浏览代码

fix upsert logic for users

Co-authored-by: Álvaro Brey <alvaro.brey@nextcloud.com>
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Andy Scherzinger 2 年之前
父节点
当前提交
f1dff03188
共有 1 个文件被更改,包括 10 次插入7 次删除
  1. 10 7
      app/src/main/java/com/nextcloud/talk/users/UserManager.kt

+ 10 - 7
app/src/main/java/com/nextcloud/talk/users/UserManager.kt

@@ -119,9 +119,9 @@ class UserManager internal constructor(private val userRepository: UsersReposito
     fun createOrUpdateUser(
         username: String?,
         userAttributes: UserAttributes,
-    ): Maybe<User?> {
+    ): Maybe<User> {
 
-        val userObservable: Maybe<User> = if (userAttributes.id != null) {
+        val userMaybe: Maybe<User> = if (userAttributes.id != null) {
             userRepository.getUserWithId(userAttributes.id)
         } else if (username != null && userAttributes.serverUrl != null) {
             userRepository.getUserWithUsernameAndServer(username, userAttributes.serverUrl)
@@ -129,9 +129,9 @@ class UserManager internal constructor(private val userRepository: UsersReposito
             Maybe.empty()
         }
 
-        return userObservable
+        return userMaybe
             .map { user: User? ->
-                val userModel = when (user) {
+                when (user) {
                     null -> createUser(
                         username,
                         userAttributes
@@ -144,9 +144,12 @@ class UserManager internal constructor(private val userRepository: UsersReposito
                         user
                     }
                 }
-                val id = userRepository.insertUser(userModel)
-                id
-            }.flatMap { id ->
+            }
+            .switchIfEmpty(Maybe.just(createUser(username, userAttributes)))
+            .map { user ->
+                userRepository.insertUser(user)
+            }
+            .flatMap { id ->
                 userRepository.getUserWithId(id)
             }
     }