diff --git a/app/src/main/java/com/bitcointxoko/gudariwallet/ui/nwc/NwcViewModel.kt b/app/src/main/java/com/bitcointxoko/gudariwallet/ui/nwc/NwcViewModel.kt index 9cac362..19f5791 100644 --- a/app/src/main/java/com/bitcointxoko/gudariwallet/ui/nwc/NwcViewModel.kt +++ b/app/src/main/java/com/bitcointxoko/gudariwallet/ui/nwc/NwcViewModel.kt @@ -103,44 +103,46 @@ class NwcViewModel( Timber.d("[$TAG] createConnection description='$description' permissions=$permissions") viewModelScope.launch { _isCreating.value = true - runCatching { - val keypair = NwcKeyGenerator.generate() - Timber.d("[$TAG] generated keypair pubkey=${keypair.pubKeyHex.take(16)}…") - check(keypair.pubKeyHex.length == 64) { - "pubKeyHex must be 64 hex chars, got ${keypair.pubKeyHex.length}" - } - check(keypair.privKeyHex.length == 64) { - "privKeyHex must be 64 hex chars, got ${keypair.privKeyHex.length}" - } - Timber.d("[$TAG] generated keypair pubkey=${keypair.pubKeyHex.take(16)}… (${keypair.pubKeyHex.length} chars)") - Timber.d("[$TAG] REGISTERING pubkey=${keypair.pubKeyHex}") - Timber.d("[$TAG] PAIRING secret=${keypair.privKeyHex}") + try { + runCatching { + val keypair = NwcKeyGenerator.generate() + Timber.d("[$TAG] generated keypair pubkey=${keypair.pubKeyHex.take(16)}…") + check(keypair.pubKeyHex.length == 64) { + "pubKeyHex must be 64 hex chars, got ${keypair.pubKeyHex.length}" + } + check(keypair.privKeyHex.length == 64) { + "privKeyHex must be 64 hex chars, got ${keypair.privKeyHex.length}" + } + Timber.d("[$TAG] generated keypair pubkey=${keypair.pubKeyHex.take(16)}… (${keypair.pubKeyHex.length} chars)") + Timber.d("[$TAG] REGISTERING pubkey=${keypair.pubKeyHex}") - repo.registerNwcKey( - pubkey = keypair.pubKeyHex, - request = NwcRegistrationRequest( - description = description, - permissions = permissions, - expires_at = expiresAt, - budgets = budgets + repo.registerNwcKey( + pubkey = keypair.pubKeyHex, + request = NwcRegistrationRequest( + description = description, + permissions = permissions, + expires_at = expiresAt, + budgets = budgets + ) ) - ) - Timber.i("[$TAG] registered key ✓") + Timber.i("[$TAG] registered key ✓") - val url = repo.getNwcPairingUrl(keypair.privKeyHex) - Timber.i("[$TAG] pairing URL fetched ✓") - Timber.d("[$TAG] URI=$url") - url + val url = repo.getNwcPairingUrl(keypair.privKeyHex) + Timber.i("[$TAG] pairing URL fetched ✓") + Timber.d("[$TAG] URI=$url") + url + } + .onSuccess { url -> + _pairingUrl.value = url + loadConnections() + } + .onFailure { e -> + Timber.e(e, "[$TAG] createConnection failed") + _uiState.value = NwcUiState.Error(e.message ?: "Failed to create connection") + } + } finally { + _isCreating.value = false } - .onSuccess { url -> - _pairingUrl.value = url - loadConnections() - } - .onFailure { e -> - Timber.e(e, "[$TAG] createConnection failed") - _uiState.value = NwcUiState.Error(e.message ?: "Failed to create connection") - } - .also { _isCreating.value = false } } } @@ -154,30 +156,33 @@ class NwcViewModel( fun deleteConnection(pubkey: String) { Timber.d("[$TAG] deleteConnection pubkey=${pubkey.take(16)}…") - _isDeleting.value = true viewModelScope.launch { - runCatching { repo.deleteNwcKey(pubkey) } - .onSuccess { - Timber.i("[$TAG] deleted connection pubkey=${pubkey.take(16)}… ✓") - // Remove locally for instant feedback, then reload to sync - val current = _uiState.value - if (current is NwcUiState.Success) { - _uiState.value = NwcUiState.Success( - current.connections.filter { it.data.pubkey != pubkey } + _isDeleting.value = true + try { + runCatching { repo.deleteNwcKey(pubkey) } + .onSuccess { + Timber.i("[$TAG] deleted connection pubkey=${pubkey.take(16)}… ✓") + val current = _uiState.value + if (current is NwcUiState.Success) { + _uiState.value = NwcUiState.Success( + current.connections.filter { it.data.pubkey != pubkey } + ) + } + loadConnections() + } + .onFailure { e -> + Timber.e(e, "[$TAG] failed to delete connection pubkey=${pubkey.take(16)}…") + _uiState.value = NwcUiState.Error( + e.message ?: "Failed to delete connection" ) } - loadConnections() - } - .onFailure { e -> - Timber.e(e, "[$TAG] failed to delete connection pubkey=${pubkey.take(16)}…") - _uiState.value = NwcUiState.Error( - e.message ?: "Failed to delete connection" - ) - } - .also { _isDeleting.value = false } + } finally { + _isDeleting.value = false + } } } + fun loadConnectionDetail(pubkey: String) { Timber.d("[$TAG] loadConnectionDetail pubkey=${pubkey.take(16)}…") _connectionDetailState.value = ConnectionDetailState.Loading