diff --git a/src/wallet/lite_wallet_controller.cpp b/src/wallet/lite_wallet_controller.cpp index 5502168..f154ffe 100644 --- a/src/wallet/lite_wallet_controller.cpp +++ b/src/wallet/lite_wallet_controller.cpp @@ -356,7 +356,7 @@ bool LiteWalletController::beginOpenExisting() auto resultSlot = openResult_; openThread_ = std::thread([bridge, servers, running, resultMutex, resultSlot]() { OpenOutcome outcome; - outcome.error = "could not reach any lite server"; + std::string preferredError; // error from the FIRST (preferred) server — the actionable one for (const auto& url : servers) { if (!bridge) break; liteLog(" connecting to " + url + " ..."); @@ -372,10 +372,14 @@ bool LiteWalletController::beginOpenExisting() const std::string why = call.error.empty() ? "unreachable" : call.error; liteLog(" " + url + ": " + why); if (!call.error.empty()) { - outcome.error = call.error; + if (preferredError.empty()) preferredError = call.error; // keep the preferred one if (liteOpenErrorIsWarmup(call.error)) outcome.warming = true; // healthy, just starting } } + // On total failure, report the preferred server's error (not whichever broken fallback + // happened to be tried last), since that's the server the user expects to use. + if (!outcome.ok) + outcome.error = preferredError.empty() ? "could not reach any lite server" : preferredError; { std::lock_guard lk(*resultMutex); *resultSlot = outcome;