Fix user manager db result processing

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
Andy Scherzinger 2022-07-19 14:01:51 +02:00
parent 6e05056b2e
commit 9bdd0c7a4e
No known key found for this signature in database
GPG Key ID: 6CADC7E3523C308B
2 changed files with 25 additions and 34 deletions

View File

@ -328,7 +328,7 @@ class WebViewLoginController(args: Bundle? = null) : NewBaseController(
val currentUser = userManager.currentUser.blockingGet()
var messageType: ApplicationWideMessageHolder.MessageType? = null
if (!isPasswordUpdate &&
userManager.getIfUserWithUsernameAndServer(loginData.username!!, baseUrl!!).blockingGet()
userManager.checkIfUserExists(loginData.username!!, baseUrl!!).blockingGet()
) {
messageType = ApplicationWideMessageHolder.MessageType.ACCOUNT_UPDATED_NOT_ADDED
}

View File

@ -22,7 +22,6 @@
package com.nextcloud.talk.users
import android.text.TextUtils
import android.util.Log
import com.bluelinelabs.logansquare.LoganSquare
import com.nextcloud.talk.data.user.UsersRepository
import com.nextcloud.talk.data.user.model.User
@ -47,15 +46,16 @@ class UserManager internal constructor(private val userRepository: UsersReposito
val results = userRepository.getUsersNotScheduledForDeletion()
// TODO needs to return Empty in case no user was found (and set active)
return results.map { users ->
users
.firstOrNull()
?.apply {
current = true
}.also { user ->
userRepository.updateUser(user!!)
}
}
return results
.map { users ->
users
.firstOrNull()
?.apply {
current = true
}.also { user ->
userRepository.updateUser(user!!)
}
}
}
override val currentUser: Maybe<User>
@ -91,45 +91,36 @@ class UserManager internal constructor(private val userRepository: UsersReposito
}
}
fun checkIfUserIsScheduledForDeletion(username: String, server: String): Maybe<Boolean> {
fun checkIfUserIsScheduledForDeletion(username: String, server: String): Single<Boolean> {
return userRepository
.getUserWithUsernameAndServer(username, server)
.switchIfEmpty(Maybe.empty())
.map { user: User? ->
when (user) {
null -> FALSE
else -> user.scheduledForDeletion
}
}
.map { it.scheduledForDeletion }
.switchIfEmpty(Single.just(false))
}
fun getUserWithInternalId(id: Long): Maybe<User> {
return userRepository.getUserWithIdNotScheduledForDeletion(id)
}
fun getIfUserWithUsernameAndServer(username: String, server: String): Maybe<Boolean> {
fun checkIfUserExists(username: String, server: String): Single<Boolean> {
return userRepository
.getUserWithUsernameAndServer(username, server)
.map { user: User? ->
when (user) {
null -> FALSE
else -> TRUE
}
}
.map { true }
.switchIfEmpty(Single.just(false))
}
fun scheduleUserForDeletionWithId(id: Long): Single<Boolean> {
// TODO needs to return false in case getAnyUserAndSetAsActive doesn't return a user
// or getUserWithId(id) doesn't return a user
return userRepository.getUserWithId(id).map { user ->
user.scheduledForDeletion = true
user.current = false
userRepository.updateUser(user)
}
return userRepository.getUserWithId(id)
.map { user ->
user.scheduledForDeletion = true
user.current = false
userRepository.updateUser(user)
}
.toSingle()
.flatMap {
getAnyUserAndSetAsActive()
}.map { TRUE }
.flatMap { getAnyUserAndSetAsActive() }
.map { true }
}
fun updateExternalSignalingServer(id: Long, externalSignalingServer: ExternalSignalingServer): Single<Int> {