feat: blockchain rescan via daemon restart + status bar progress

- Fix z_importwallet to use full path instead of filename only
- Add rescanBlockchain() method that restarts daemon with -rescan flag
- Track rescan progress via daemon output parsing and getrescaninfo RPC
- Display rescan progress in status bar with animated indicator when starting
- Improve dark theme card contrast: lighter surface-variant, tinted borders, stronger rim-light
This commit is contained in:
2026-02-28 15:06:35 -06:00
parent f5378a55ed
commit 1a5c4e8744
42 changed files with 1113 additions and 687 deletions

View File

@@ -347,12 +347,8 @@ void ConsoleTab::render(daemon::EmbeddedDaemon* daemon, rpc::RPCClient* rpc, rpc
void ConsoleTab::renderCommandsPopupModal()
{
if (!show_commands_popup_) {
renderCommandsPopup();
return;
}
// Called at top-level window scope so the modal blocks all input.
ImGui::OpenPopup("RPC Command Reference");
show_commands_popup_ = false;
renderCommandsPopup();
}
@@ -1287,18 +1283,8 @@ void ConsoleTab::renderCommandsPopup()
{
using namespace material;
// Center the modal
ImVec2 center = ImGui::GetMainViewport()->GetCenter();
ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
float popW = std::min(schema::UI().drawElement("tabs.console", "popup-max-width").size, ImGui::GetMainViewport()->Size.x * schema::UI().drawElement("tabs.console", "popup-width-ratio").size);
float popH = std::min(schema::UI().drawElement("tabs.console", "popup-max-height").size, ImGui::GetMainViewport()->Size.y * schema::UI().drawElement("tabs.console", "popup-height-ratio").size);
ImGui::SetNextWindowSize(ImVec2(popW, popH), ImGuiCond_Appearing);
const auto& acrylicTheme = GetCurrentAcrylicTheme();
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(Layout::spacingXl(), Layout::spacingLg()));
if (!effects::ImGuiAcrylic::BeginAcrylicPopupModal("RPC Command Reference", nullptr,
ImGuiWindowFlags_NoTitleBar, acrylicTheme.popup)) {
ImGui::PopStyleVar();
if (!material::BeginOverlayDialog("RPC Command Reference", &show_commands_popup_, popW, 0.94f)) {
return;
}
@@ -1591,11 +1577,10 @@ void ConsoleTab::renderCommandsPopup()
// Close button
if (ImGui::Button("Close", ImVec2(-1, 0))) {
cmdFilter[0] = '\0';
ImGui::CloseCurrentPopup();
show_commands_popup_ = false;
}
effects::ImGuiAcrylic::EndAcrylicPopup();
ImGui::PopStyleVar();
material::EndOverlayDialog();
}
void ConsoleTab::executeCommand(const std::string& cmd, rpc::RPCClient* rpc, rpc::RPCWorker* worker)