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() val currentUser = userManager.currentUser.blockingGet()
var messageType: ApplicationWideMessageHolder.MessageType? = null var messageType: ApplicationWideMessageHolder.MessageType? = null
if (!isPasswordUpdate && if (!isPasswordUpdate &&
userManager.getIfUserWithUsernameAndServer(loginData.username!!, baseUrl!!).blockingGet() userManager.checkIfUserExists(loginData.username!!, baseUrl!!).blockingGet()
) { ) {
messageType = ApplicationWideMessageHolder.MessageType.ACCOUNT_UPDATED_NOT_ADDED messageType = ApplicationWideMessageHolder.MessageType.ACCOUNT_UPDATED_NOT_ADDED
} }

View File

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