Browse Source

UsersDao: make setUserAsActiveWithId blocking

Room won't accept non-blocking @Transactions, which makes sense

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
Álvaro Brey 2 years ago
parent
commit
886a3d0df2

+ 11 - 12
app/src/main/java/com/nextcloud/talk/data/user/UsersDao.kt

@@ -83,19 +83,18 @@ abstract class UsersDao {
     abstract fun getUserWithUsernameAndServer(username: String, server: String): Maybe<UserEntity>
 
     @Transaction
-    open fun setUserAsActiveWithId(id: Long): Single<Boolean> {
-        return getUsers()
-            .map { users ->
-                users.forEach { user ->
-                    user.current = user.id == id
-                    updateUser(user)
-                }
-                true
-            }
-            .onErrorReturn { e ->
-                Log.e(TAG, "Error setting user active", e)
-                false
+    @Suppress("Detekt.TooGenericExceptionCaught") // blockingGet() only throws RuntimeExceptions per rx docs
+    open fun setUserAsActiveWithId(id: Long): Boolean {
+        return try {
+            getUsers().blockingGet().forEach { user ->
+                user.current = user.id == id
+                updateUser(user)
             }
+            true
+        } catch (e: RuntimeException) {
+            Log.e(TAG, "Error setting user active", e)
+            false
+        }
     }
 
     @Transaction

+ 1 - 1
app/src/main/java/com/nextcloud/talk/data/user/UsersRepositoryImpl.kt

@@ -74,7 +74,7 @@ class UsersRepositoryImpl(private val usersDao: UsersDao) : UsersRepository {
     }
 
     override fun setUserAsActiveWithId(id: Long): Single<Boolean> {
-        return usersDao.setUserAsActiveWithId(id)
+        return Single.just(usersDao.setUserAsActiveWithId(id))
     }
 
     override fun deleteUserWithId(id: Long) {