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