From 82afa2e0396a4261e0b67edc633c2a4c76da48ce Mon Sep 17 00:00:00 2001 From: greenart7c3 Date: Wed, 4 Dec 2024 14:09:07 -0300 Subject: [PATCH] Fix app duplicated when connecting to bunker --- .../nostrsigner/database/ApplicationDao.kt | 5 +++ .../nostrsigner/service/IntentUtils.kt | 33 ++++++++++--------- .../greenart7c3/nostrsigner/ui/MainScreen.kt | 7 +++- .../nostrsigner/ui/NewNsecBunkerScreen.kt | 4 +-- 4 files changed, 31 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/database/ApplicationDao.kt b/app/src/main/java/com/greenart7c3/nostrsigner/database/ApplicationDao.kt index c16d567c..a192ec08 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/database/ApplicationDao.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/database/ApplicationDao.kt @@ -125,8 +125,13 @@ interface ApplicationDao { } @Delete + @Transaction fun delete(entity: ApplicationEntity) + @Query("DELETE FROM application WHERE `key` = :key") + @Transaction + fun delete(key: String) + @Insert(onConflict = OnConflictStrategy.REPLACE) fun innerAddHistory(entity: HistoryEntity) diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/service/IntentUtils.kt b/app/src/main/java/com/greenart7c3/nostrsigner/service/IntentUtils.kt index 3a3cdf9c..cb789e56 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/service/IntentUtils.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/service/IntentUtils.kt @@ -342,12 +342,13 @@ object IntentUtils { bunkerRequest.localKey, ) { encryptedContent -> sendBunkerResponse( - account, - bunkerRequest.localKey, - encryptedContent, - relays.ifEmpty { NostrSigner.getInstance().getSavedRelays().toList() }, - onLoading, - onDone, + bunkerRequest = bunkerRequest, + account = account, + localKey = bunkerRequest.localKey, + encryptedContent = encryptedContent, + relays = relays.ifEmpty { NostrSigner.getInstance().getSavedRelays().toList() }, + onLoading = onLoading, + onDone = onDone, ) } } @@ -357,12 +358,13 @@ object IntentUtils { bunkerRequest.localKey, ) { encryptedContent -> sendBunkerResponse( - account, - bunkerRequest.localKey, - encryptedContent, - relays.ifEmpty { NostrSigner.getInstance().getSavedRelays().toList() }, - onLoading, - onDone, + bunkerRequest = bunkerRequest, + account = account, + localKey = bunkerRequest.localKey, + encryptedContent = encryptedContent, + relays = relays.ifEmpty { NostrSigner.getInstance().getSavedRelays().toList() }, + onLoading = onLoading, + onDone = onDone, ) } } @@ -371,6 +373,7 @@ object IntentUtils { @OptIn(DelicateCoroutinesApi::class) private fun sendBunkerResponse( + bunkerRequest: BunkerRequest? = null, account: Account, localKey: String, encryptedContent: String, @@ -385,7 +388,7 @@ object IntentUtils { encryptedContent, ) { GlobalScope.launch(Dispatchers.IO) { - Log.d("IntentUtils", "Sending response to relays ${relays.map { it.url }}") + Log.d("IntentUtils", "Sending response to relays ${relays.map { it.url }} type ${bunkerRequest?.method}") if (RelayPool.getAll().any { !it.isConnected() }) { NostrSigner.getInstance().checkForNewRelays( @@ -395,10 +398,10 @@ object IntentUtils { val success = Client.sendAndWaitForResponse(it, relayList = relays) if (success) { - Log.d("IntentUtils", "Success response to relays ${relays.map { it.url }}") + Log.d("IntentUtils", "Success response to relays ${relays.map { it.url }} type ${bunkerRequest?.method}") onDone() } else { - Log.d("IntentUtils", "Failed response to relays ${relays.map { it.url }}") + Log.d("IntentUtils", "Failed response to relays ${relays.map { it.url }} type ${bunkerRequest?.method}") } AmberListenerSingleton.getListener()?.let { Client.unsubscribe(it) diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/ui/MainScreen.kt b/app/src/main/java/com/greenart7c3/nostrsigner/ui/MainScreen.kt index d65f4046..1f4ae48f 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/ui/MainScreen.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/ui/MainScreen.kt @@ -154,11 +154,16 @@ fun sendResult( ) val tempApp2 = ApplicationWithPermissions( application = tempApplication, - permissions = savedApplication.permissions, + permissions = savedApplication.permissions.map { + it.copy() + }.toMutableList(), ) + + database.applicationDao().delete(intentData.bunkerRequest.secret) database.applicationDao().insertApplicationWithPermissions(tempApp2) } } + savedApplication = database.applicationDao().getByKey(key) val relays = savedApplication?.application?.relays?.ifEmpty { defaultRelays } ?: (intentData.bunkerRequest?.relays?.ifEmpty { defaultRelays } ?: defaultRelays) if (intentData.bunkerRequest != null) { NostrSigner.getInstance().checkForNewRelays( diff --git a/app/src/main/java/com/greenart7c3/nostrsigner/ui/NewNsecBunkerScreen.kt b/app/src/main/java/com/greenart7c3/nostrsigner/ui/NewNsecBunkerScreen.kt index 8d194432..1e366d8b 100644 --- a/app/src/main/java/com/greenart7c3/nostrsigner/ui/NewNsecBunkerScreen.kt +++ b/app/src/main/java/com/greenart7c3/nostrsigner/ui/NewNsecBunkerScreen.kt @@ -270,8 +270,8 @@ fun NewNsecBunkerCreatedScreen( val bunkerUri = "bunker://${account.signer.keyPair.pubKey.toHexKey()}?$relays$localSecret" LaunchedEffect(Unit) { - launch(Dispatchers.IO) { - NostrSigner.getInstance().checkForNewRelays() + NostrSigner.getInstance().applicationIOScope.launch(Dispatchers.IO) { + NostrSigner.getInstance().checkForNewRelays(shouldReconnect = true) NotificationDataSource.stop() delay(2000) NotificationDataSource.start()