feat(lite): mirror errors into the lite Console (copyable), not just toasts
Lite send/shield, unlock, and key-import failures were shown only as transient toasts — impossible to copy. Route them through liteLog() so they also appear in the lite Console (which has a Copy button), alongside the lifecycle/open/sync errors the controller already logs: - send/shield broadcast failures (App broadcast-result delivery) - wallet unlock failure - key import failure (controller; logs the error text only, never the key) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -532,6 +532,10 @@ void App::update()
|
|||||||
// Deliver a completed async send/shield result to the waiting send_tab callback.
|
// Deliver a completed async send/shield result to the waiting send_tab callback.
|
||||||
wallet::LiteBroadcastResult broadcast;
|
wallet::LiteBroadcastResult broadcast;
|
||||||
if (lite_wallet_->takeBroadcastResult(broadcast)) {
|
if (lite_wallet_->takeBroadcastResult(broadcast)) {
|
||||||
|
// Mirror failures into the lite Console (copyable) in addition to the toast the send UI
|
||||||
|
// shows — transient toasts are easy to miss and impossible to copy.
|
||||||
|
if (!broadcast.ok)
|
||||||
|
wallet::liteLog("Send/shield failed: " + broadcast.error);
|
||||||
if (lite_send_callback_) {
|
if (lite_send_callback_) {
|
||||||
lite_send_callback_(broadcast.ok, broadcast.ok ? broadcast.txid : broadcast.error);
|
lite_send_callback_(broadcast.ok, broadcast.ok ? broadcast.txid : broadcast.error);
|
||||||
lite_send_callback_ = nullptr;
|
lite_send_callback_ = nullptr;
|
||||||
@@ -2243,7 +2247,10 @@ void App::renderLiteUnlockPrompt()
|
|||||||
const bool ok = lite_wallet_->unlockWallet(pass);
|
const bool ok = lite_wallet_->unlockWallet(pass);
|
||||||
sodium_memzero(pass, sizeof(pass));
|
sodium_memzero(pass, sizeof(pass));
|
||||||
if (ok) ui::Notifications::instance().success(TR("lite_unlock_ok"), 5.0f);
|
if (ok) ui::Notifications::instance().success(TR("lite_unlock_ok"), 5.0f);
|
||||||
else ui::Notifications::instance().error(TR("lite_unlock_failed"));
|
else {
|
||||||
|
wallet::liteLog(std::string("Unlock failed: ") + TR("lite_unlock_failed"));
|
||||||
|
ui::Notifications::instance().error(TR("lite_unlock_failed"));
|
||||||
|
}
|
||||||
lite_unlock_prompt_ = false;
|
lite_unlock_prompt_ = false;
|
||||||
ImGui::CloseCurrentPopup();
|
ImGui::CloseCurrentPopup();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -896,6 +896,7 @@ LiteImportResult LiteWalletController::importKey(std::string spendingOrViewingKe
|
|||||||
LiteImportResult alt = runImport(transparentFirst ? "import" : "timport");
|
LiteImportResult alt = runImport(transparentFirst ? "import" : "timport");
|
||||||
if (alt.ok) out = alt;
|
if (alt.ok) out = alt;
|
||||||
}
|
}
|
||||||
|
if (!out.ok) liteLog("Key import failed: " + out.error); // error text only — never the key
|
||||||
secureWipeLiteSecret(spendingOrViewingKey); // wipe our copy after both attempts
|
secureWipeLiteSecret(spendingOrViewingKey); // wipe our copy after both attempts
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user