feat(desktop): add logout option to menu bar and settings

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
nrobi144
2026-03-05 13:23:18 +02:00
parent 1821b9ff71
commit 2346d92f16
@@ -147,6 +147,8 @@ fun main() =
var replyToNote by remember { mutableStateOf<com.vitorpamplona.quartz.nip01Core.core.Event?>(null) } var replyToNote by remember { mutableStateOf<com.vitorpamplona.quartz.nip01Core.core.Event?>(null) }
val deckScope = rememberCoroutineScope() val deckScope = rememberCoroutineScope()
val deckState = remember { DeckState(deckScope).also { it.load() } } val deckState = remember { DeckState(deckScope).also { it.load() } }
val accountManager = remember { AccountManager.create() }
val accountState by accountManager.accountState.collectAsState()
var showAddColumnDialog by remember { mutableStateOf(false) } var showAddColumnDialog by remember { mutableStateOf(false) }
var layoutMode by remember { var layoutMode by remember {
mutableStateOf( mutableStateOf(
@@ -193,6 +195,16 @@ fun main() =
}, },
) )
Separator() Separator()
Item(
"Logout",
onClick = {
deckScope.launch {
accountManager.logout()
}
},
enabled = accountState is AccountState.LoggedIn,
)
Separator()
Item( Item(
"Quit", "Quit",
shortcut = shortcut =
@@ -352,6 +364,7 @@ fun main() =
App( App(
layoutMode = layoutMode, layoutMode = layoutMode,
deckState = deckState, deckState = deckState,
accountManager = accountManager,
showComposeDialog = showComposeDialog, showComposeDialog = showComposeDialog,
showAddColumnDialog = showAddColumnDialog, showAddColumnDialog = showAddColumnDialog,
onShowComposeDialog = { showComposeDialog = true }, onShowComposeDialog = { showComposeDialog = true },
@@ -374,6 +387,7 @@ fun main() =
fun App( fun App(
layoutMode: LayoutMode, layoutMode: LayoutMode,
deckState: DeckState, deckState: DeckState,
accountManager: AccountManager,
showComposeDialog: Boolean, showComposeDialog: Boolean,
showAddColumnDialog: Boolean, showAddColumnDialog: Boolean,
onShowComposeDialog: () -> Unit, onShowComposeDialog: () -> Unit,
@@ -385,7 +399,6 @@ fun App(
) { ) {
val relayManager = remember { DesktopRelayConnectionManager() } val relayManager = remember { DesktopRelayConnectionManager() }
val localCache = remember { DesktopLocalCache() } val localCache = remember { DesktopLocalCache() }
val accountManager = remember { AccountManager.create() }
val accountState by accountManager.accountState.collectAsState() val accountState by accountManager.accountState.collectAsState()
val scope = remember { CoroutineScope(SupervisorJob() + Dispatchers.Main) } val scope = remember { CoroutineScope(SupervisorJob() + Dispatchers.Main) }
@@ -933,5 +946,35 @@ fun RelaySettingsScreen(
Text("Reset to Defaults") Text("Reset to Defaults")
} }
} }
Spacer(Modifier.height(24.dp))
HorizontalDivider()
Spacer(Modifier.height(24.dp))
// Account section
Text(
"Account",
style = MaterialTheme.typography.titleLarge,
color = MaterialTheme.colorScheme.onBackground,
)
Spacer(Modifier.height(8.dp))
Text(
"Logged in as ${account.npub.take(16)}...",
style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant,
)
Spacer(Modifier.height(12.dp))
val logoutScope = rememberCoroutineScope()
OutlinedButton(
onClick = { logoutScope.launch { accountManager.logout() } },
colors =
ButtonDefaults.outlinedButtonColors(
contentColor = MaterialTheme.colorScheme.error,
),
) {
Text("Logout")
}
} }
} }