diff --git a/src/app.cpp b/src/app.cpp index 22ef018..2e3e277 100644 --- a/src/app.cpp +++ b/src/app.cpp @@ -169,12 +169,7 @@ bool App::init() // Lite builds with a linked SDXL backend own a lite wallet controller that drives // real create/open/restore through the bridge. Full-node and unlinked-lite builds // leave lite_wallet_ null (the UI falls back to validation-only). - if (supportsLiteBackend()) { - lite_wallet_ = wallet::LiteWalletController::createLinked( - walletCapabilities(), - wallet::liteConnectionSettingsFromAppSettings(*settings_)); - lite_wallet_->setPersistCallback([this]() { settings_->save(); }); - } + rebuildLiteWallet(); // Apply verbose logging preference from saved settings util::Logger::instance().setVerbose(settings_->getVerboseLogging()); @@ -370,6 +365,21 @@ void App::preFrame() } } +void App::rebuildLiteWallet() +{ + if (!supportsLiteBackend() || !settings_) return; + // Don't tear down a live session: if a wallet is already open (and possibly mid-sync), the + // new server selection is already persisted to settings and will take effect the next time + // the controller is built (next launch, or before another wallet is opened). Rebuilding now + // would discard the open wallet and its in-flight, uninterruptible sync. + if (lite_wallet_ && lite_wallet_->walletOpen()) return; + + lite_wallet_ = wallet::LiteWalletController::createLinked( + walletCapabilities(), + wallet::liteConnectionSettingsFromAppSettings(*settings_)); + lite_wallet_->setPersistCallback([this]() { settings_->save(); }); +} + void App::update() { PERF_SCOPE("Update.Total"); diff --git a/src/app.h b/src/app.h index 4629112..2abb5e7 100644 --- a/src/app.h +++ b/src/app.h @@ -157,6 +157,9 @@ public: config::Settings* settings() { return settings_.get(); } // Lite wallet controller (non-null only in lite builds with a linked backend). wallet::LiteWalletController* liteWallet() { return lite_wallet_.get(); } + // (Re)build the lite controller from current settings so a changed lite-server selection + // takes effect. No-op on non-lite/unlinked builds; preserves a live wallet (see app.cpp). + void rebuildLiteWallet(); WalletState& state() { return state_; } const WalletState& state() const { return state_; } const WalletState& getWalletState() const { return state_; } diff --git a/src/ui/pages/settings_page.cpp b/src/ui/pages/settings_page.cpp index 40ca07f..83177fd 100644 --- a/src/ui/pages/settings_page.cpp +++ b/src/ui/pages/settings_page.cpp @@ -197,6 +197,9 @@ static void saveLiteServerSelectionFromPageState(App* app) { const auto result = wallet::executeLiteWalletServerSelectionUi(*app->settings(), input); if (result.settingsWritten) { s_settingsState.lite_server_status = "Saved"; + // Rebuild the lite controller so the newly-saved server actually takes effect (it is + // otherwise captured once at startup). No-op if a wallet is already open mid-session. + app->rebuildLiteWallet(); } else if (!result.error.empty()) { s_settingsState.lite_server_status = result.error; Notifications::instance().warning(result.error);