From 4aa67918b6ddbcfbd53219f72d7e6d67108dd6ba Mon Sep 17 00:00:00 2001 From: Kamal Bramwell <kamal@elixxir.io> Date: Wed, 7 Dec 2022 11:36:31 -0500 Subject: [PATCH] Fixed bug preventing backups after restoring a Crust account Username is now cached in UD by calling StoreUsername --- .../backup/bindings/BindingsBackupMediator.kt | 2 +- .../messenger/backup/cloud/crust/Crust.kt | 1 + .../backup/cloud/crust/CrustDataSource.kt | 18 +++++++++++++++++- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/io/xxlabs/messenger/backup/bindings/BindingsBackupMediator.kt b/app/src/main/java/io/xxlabs/messenger/backup/bindings/BindingsBackupMediator.kt index 61b1c1b7..38f43eee 100644 --- a/app/src/main/java/io/xxlabs/messenger/backup/bindings/BindingsBackupMediator.kt +++ b/app/src/main/java/io/xxlabs/messenger/backup/bindings/BindingsBackupMediator.kt @@ -30,7 +30,7 @@ class BindingsBackupMediator @Inject constructor( private val restoreHandler = BindingsRestoreHandler(preferences, daoRepo, messageReceivedListener, backupHandler) - override val crustApi = BindingsCrustMediator() + override val crustApi = BindingsCrustMediator(username = preferences.name) override fun initializeCrustIntegration( userDiscovery: UserDiscovery, diff --git a/app/src/main/java/io/xxlabs/messenger/backup/cloud/crust/Crust.kt b/app/src/main/java/io/xxlabs/messenger/backup/cloud/crust/Crust.kt index f38a0431..56fbb1c0 100644 --- a/app/src/main/java/io/xxlabs/messenger/backup/cloud/crust/Crust.kt +++ b/app/src/main/java/io/xxlabs/messenger/backup/cloud/crust/Crust.kt @@ -86,6 +86,7 @@ class Crust private constructor( } private suspend fun fetchData() { + cachedBackupData = crustApi.recoverBackup(username ?: preferences.name).getOrNull()?.let { AccountArchive(it) }?.also { diff --git a/app/src/main/java/io/xxlabs/messenger/backup/cloud/crust/CrustDataSource.kt b/app/src/main/java/io/xxlabs/messenger/backup/cloud/crust/CrustDataSource.kt index dab2ef4a..3cc47927 100644 --- a/app/src/main/java/io/xxlabs/messenger/backup/cloud/crust/CrustDataSource.kt +++ b/app/src/main/java/io/xxlabs/messenger/backup/cloud/crust/CrustDataSource.kt @@ -2,6 +2,7 @@ package io.xxlabs.messenger.backup.cloud.crust import bindings.Bindings import bindings.UserDiscovery +import timber.log.Timber interface CrustDataSource { suspend fun uploadBackup(path: String): Result<ByteArray> @@ -10,11 +11,13 @@ interface CrustDataSource { class BindingsCrustMediator( var udManager: UserDiscovery? = null, - var receptionRsaPrivateKey: ByteArray = byteArrayOf() + var receptionRsaPrivateKey: ByteArray = byteArrayOf(), + val username: String? = null ) : CrustDataSource { override suspend fun uploadBackup(path: String): Result<ByteArray> { return try { + updateUsernameCache() udManager?.let { val uploadSuccessReport = Bindings.uploadBackup(path, udManager, receptionRsaPrivateKey) Result.success(uploadSuccessReport) @@ -24,6 +27,19 @@ class BindingsCrustMediator( } } + private fun updateUsernameCache() { + udManager?.run { + try { + if (username.isNotBlank()) { + storeUsername(username) + Timber.d("Successfully cached username '$username' in UserDiscovery.") + } + } catch (e: Exception) { + Timber.d("Failed to cache username '$username' in UserDiscovery") + } + } + } + override suspend fun recoverBackup(username: String): Result<ByteArray> { return try { val backupData = Bindings.recoverBackup(username) -- GitLab