diff --git a/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/Main.kt b/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/Main.kt index c1543da02..59ef6d07c 100644 --- a/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/Main.kt +++ b/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/Main.kt @@ -708,6 +708,10 @@ fun App( if (current?.signerType is com.vitorpamplona.amethyst.commons.model.account.SignerType.Remote) { accountManager.startHeartbeat(scope) } + // Refresh account list for switcher + scope.launch(Dispatchers.IO) { + accountManager.refreshAccountList() + } }, ) } diff --git a/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/account/AccountManager.kt b/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/account/AccountManager.kt index cc3c00b5f..905fb1540 100644 --- a/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/account/AccountManager.kt +++ b/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/account/AccountManager.kt @@ -637,6 +637,17 @@ class AccountManager internal constructor( refreshAccountList() } + /** + * Ensures the currently logged-in account is persisted in multi-account storage. + * Call before switching to a new account to avoid losing the current one. + */ + suspend fun ensureCurrentAccountInStorage() { + val current = currentAccount() ?: return + val info = AccountInfo(npub = current.npub, signerType = current.signerType) + accountStorage.saveAccount(info) + accountStorage.setCurrentAccount(current.npub) + } + suspend fun removeAccountFromStorage(npub: String) { val current = currentAccount() accountStorage.deleteAccount(npub) diff --git a/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/ui/account/AddAccountDialog.kt b/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/ui/account/AddAccountDialog.kt index 4764a1c6f..9aaf5f629 100644 --- a/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/ui/account/AddAccountDialog.kt +++ b/desktopApp/src/jvmMain/kotlin/com/vitorpamplona/amethyst/desktop/ui/account/AddAccountDialog.kt @@ -88,6 +88,12 @@ fun AddAccountDialog( ) { LoginCard( onLogin = { keyInput -> + // Save current account before switching + scope.launch { + withContext(Dispatchers.IO) { + accountManager.ensureCurrentAccountInStorage() + } + } accountManager.loginWithKey(keyInput).map { scope.launch { withContext(Dispatchers.IO) { accountManager.saveCurrentAccount() } @@ -96,18 +102,31 @@ fun AddAccountDialog( } }, onGenerateNew = { - accountManager.generateNewAccount() scope.launch { + withContext(Dispatchers.IO) { + accountManager.ensureCurrentAccountInStorage() + } + accountManager.generateNewAccount() withContext(Dispatchers.IO) { accountManager.saveCurrentAccount() } onAccountAdded() } }, onLoginBunker = { bunkerUri -> + scope.launch { + withContext(Dispatchers.IO) { + accountManager.ensureCurrentAccountInStorage() + } + } accountManager.loginWithBunker(bunkerUri).map { onAccountAdded() } }, onLoginNostrConnect = { onUriGenerated -> + scope.launch { + withContext(Dispatchers.IO) { + accountManager.ensureCurrentAccountInStorage() + } + } accountManager.loginWithNostrConnect(onUriGenerated).map { onAccountAdded() }