Move from Single to Maybe

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
Andy Scherzinger 2022-06-25 21:27:18 +02:00
parent 6497c2d9b1
commit dc83403606
No known key found for this signature in database
GPG Key ID: 6CADC7E3523C308B
6 changed files with 58 additions and 58 deletions

View File

@ -21,12 +21,12 @@ class MainActivityTest {
val user = sut.userManager.createOrUpdateUser(
"test",
UserManager.UserAttributes(
id = 0,
null,
serverUrl = "http://server/nc",
currentUser = false,
currentUser = true,
userId = "test",
token = "test",
displayName = null,
displayName = "Test Name",
pushConfigurationState = null,
capabilities = null,
certificateAlias = null,

View File

@ -30,6 +30,7 @@ import androidx.room.Query
import androidx.room.Transaction
import androidx.room.Update
import com.nextcloud.talk.data.user.model.UserEntity
import io.reactivex.Maybe
import io.reactivex.Single
import io.reactivex.SingleObserver
import io.reactivex.disposables.Disposable
@ -41,7 +42,7 @@ import java.lang.Boolean.TRUE
abstract class UsersDao {
// get active user
@Query("SELECT * FROM User where current = 1")
abstract fun getActiveUser(): Single<UserEntity?>
abstract fun getActiveUser(): Maybe<UserEntity>
@Query("SELECT * FROM User where current = 1")
abstract fun getActiveUserSynchronously(): UserEntity?
@ -66,13 +67,13 @@ abstract class UsersDao {
abstract fun getUsers(): Single<List<UserEntity>>
@Query("SELECT * FROM User where id = :id")
abstract fun getUserWithId(id: Long): Single<UserEntity?>
abstract fun getUserWithId(id: Long): Maybe<UserEntity>
@Query("SELECT * FROM User where id = :id AND scheduledForDeletion != 1")
abstract fun getUserWithIdNotScheduledForDeletion(id: Long): Single<UserEntity?>
abstract fun getUserWithIdNotScheduledForDeletion(id: Long): Maybe<UserEntity>
@Query("SELECT * FROM User where userId = :userId")
abstract fun getUserWithUserId(userId: String): Single<UserEntity?>
abstract fun getUserWithUserId(userId: String): Maybe<UserEntity>
@Query("SELECT * FROM User where userId != :userId")
abstract fun getUsersWithoutUserId(userId: Long): Single<List<UserEntity>>
@ -84,7 +85,7 @@ abstract class UsersDao {
abstract fun getUsersNotScheduledForDeletion(): Single<List<UserEntity>>
@Query("SELECT * FROM User WHERE username = :username AND baseUrl = :server")
abstract fun getUserWithUsernameAndServer(username: String, server: String): Single<UserEntity?>
abstract fun getUserWithUsernameAndServer(username: String, server: String): Maybe<UserEntity>
@Transaction
open suspend fun setUserAsActiveWithId(id: Long): Boolean {

View File

@ -23,22 +23,20 @@
package com.nextcloud.talk.data.user
import com.nextcloud.talk.data.user.model.User
import io.reactivex.Maybe
import io.reactivex.Single
@Suppress("TooManyFunctions")
interface UsersRepository {
fun getActiveUserLiveData(): Single<User?>
fun getActiveUser(): Single<User?>
fun getActiveUserSynchronously(): User?
fun getActiveUser(): Maybe<User>
fun getUsers(): Single<List<User>>
fun getUserWithId(id: Long): Single<User?>
fun getUserWithIdLiveData(id: Long): Single<User?>
fun getUserWithIdNotScheduledForDeletion(id: Long): Single<User?>
fun getUserWithUserId(userId: String): Single<User?>
fun getUserWithId(id: Long): Maybe<User>
fun getUserWithIdNotScheduledForDeletion(id: Long): Maybe<User>
fun getUserWithUserId(userId: String): Maybe<User>
fun getUsersWithoutUserId(userId: Long): Single<List<User>>
fun getUsersScheduledForDeletion(): Single<List<User>>
fun getUsersNotScheduledForDeletion(): Single<List<User>>
fun getUserWithUsernameAndServer(username: String, server: String): Single<User?>
fun getUserWithUsernameAndServer(username: String, server: String): Maybe<User>
fun updateUser(user: User): Int
fun insertUser(user: User): Long
suspend fun setUserAsActiveWithId(id: Long): Boolean

View File

@ -23,39 +23,29 @@
package com.nextcloud.talk.data.user
import com.nextcloud.talk.data.user.model.User
import io.reactivex.Maybe
import io.reactivex.Single
@Suppress("TooManyFunctions")
class UsersRepositoryImpl(private val usersDao: UsersDao) : UsersRepository {
override fun getActiveUserLiveData(): Single<User?> {
return usersDao.getActiveUser().map { UserMapper.toModel(it) }
}
override fun getActiveUser(): Single<User?> {
override fun getActiveUser(): Maybe<User> {
return usersDao.getActiveUser().map { UserMapper.toModel(it) }
}
override fun getActiveUserSynchronously(): User? {
return UserMapper.toModel(usersDao.getActiveUserSynchronously())
}
override fun getUsers(): Single<List<User>> {
return usersDao.getUsers().map { UserMapper.toModel(it) }
}
override fun getUserWithId(id: Long): Single<User?> {
override fun getUserWithId(id: Long): Maybe<User> {
return usersDao.getUserWithId(id).map { UserMapper.toModel(it) }
}
override fun getUserWithIdLiveData(id: Long): Single<User?> {
return usersDao.getUserWithId(id).map { UserMapper.toModel(it) }
}
override fun getUserWithIdNotScheduledForDeletion(id: Long): Single<User?> {
override fun getUserWithIdNotScheduledForDeletion(id: Long): Maybe<User> {
return usersDao.getUserWithIdNotScheduledForDeletion(id).map { UserMapper.toModel(it) }
}
override fun getUserWithUserId(userId: String): Single<User?> {
override fun getUserWithUserId(userId: String): Maybe<User> {
return usersDao.getUserWithUserId(userId).map { UserMapper.toModel(it) }
}
@ -71,7 +61,7 @@ class UsersRepositoryImpl(private val usersDao: UsersDao) : UsersRepository {
return usersDao.getUsersNotScheduledForDeletion().map { UserMapper.toModel(it) }
}
override fun getUserWithUsernameAndServer(username: String, server: String): Single<User?> {
override fun getUserWithUsernameAndServer(username: String, server: String): Maybe<User> {
return usersDao.getUserWithUsernameAndServer(username, server).map { UserMapper.toModel(it) }
}

View File

@ -29,6 +29,7 @@ import com.nextcloud.talk.models.ExternalSignalingServer
import com.nextcloud.talk.models.json.capabilities.Capabilities
import com.nextcloud.talk.models.json.push.PushConfigurationState
import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew
import io.reactivex.Maybe
import io.reactivex.Single
import java.lang.Boolean.TRUE
@ -40,7 +41,7 @@ class UserManager internal constructor(private val userRepository: UsersReposito
val usersScheduledForDeletion: Single<List<User>>
get() = userRepository.getUsersScheduledForDeletion()
private fun setAnyUserAndSetAsActive(): Single<User?> {
private fun setAnyUserAndSetAsActive(): Single<User> {
val results = userRepository.getUsersNotScheduledForDeletion()
return results.map { users ->
@ -48,13 +49,13 @@ class UserManager internal constructor(private val userRepository: UsersReposito
.firstOrNull()
?.apply {
current = true
}?.also { user ->
userRepository.updateUser(user)
}.also { user ->
userRepository.updateUser(user!!)
}
}
}
override val currentUser: Single<User?>
override val currentUser: Maybe<User>
get() {
return userRepository.getActiveUser()
}
@ -67,11 +68,11 @@ class UserManager internal constructor(private val userRepository: UsersReposito
userRepository.deleteUserWithId(internalId)
}
fun getUserById(userId: String): Single<User?> {
fun getUserById(userId: String): Maybe<User> {
return userRepository.getUserWithUserId(userId)
}
fun getUserWithId(id: Long): Single<User?> {
fun getUserWithId(id: Long): Maybe<User> {
return userRepository.getUserWithId(id)
}
@ -91,15 +92,15 @@ class UserManager internal constructor(private val userRepository: UsersReposito
}
}
fun checkIfUserIsScheduledForDeletion(username: String, server: String): Single<Boolean> {
fun checkIfUserIsScheduledForDeletion(username: String, server: String): Maybe<Boolean> {
return userRepository.getUserWithUsernameAndServer(username, server).map { it.scheduledForDeletion }
}
fun getUserWithInternalId(id: Long): Single<User?> {
fun getUserWithInternalId(id: Long): Maybe<User> {
return userRepository.getUserWithIdNotScheduledForDeletion(id)
}
fun getIfUserWithUsernameAndServer(username: String, server: String): Single<Boolean> {
fun getIfUserWithUsernameAndServer(username: String, server: String): Maybe<Boolean> {
return userRepository.getUserWithUsernameAndServer(username, server).map { TRUE }
}
@ -108,22 +109,24 @@ class UserManager internal constructor(private val userRepository: UsersReposito
user.scheduledForDeletion = true
user.current = false
userRepository.updateUser(user)
}.flatMap {
setAnyUserAndSetAsActive()
}.map { TRUE }
}
.toSingle()
.flatMap {
setAnyUserAndSetAsActive()
}.map { TRUE }
}
fun createOrUpdateUser(
username: String?,
userAttributes: UserAttributes,
): Single<User?> {
): Maybe<User?> {
val userObservable: Single<User?> = if (userAttributes.id == null &&
username != null && userAttributes.serverUrl != null
) {
val userObservable: Maybe<User> = if (userAttributes.id != null) {
userRepository.getUserWithId(userAttributes.id)
} else if (username != null && userAttributes.serverUrl != null) {
userRepository.getUserWithUsernameAndServer(username, userAttributes.serverUrl)
} else {
userRepository.getUserWithId(userAttributes.id!!)
Maybe.empty()
}
return userObservable
@ -141,13 +144,14 @@ class UserManager internal constructor(private val userRepository: UsersReposito
user
}
}
userRepository.insertUser(userModel)
val id = userRepository.insertUser(userModel)
id
}.flatMap { id ->
userRepository.getUserWithId(id)
}
}
fun getUserWithUsernameAndServer(username: String, server: String): Single<User?> {
fun getUserWithUsernameAndServer(username: String, server: String): Maybe<User> {
return userRepository.getUserWithUsernameAndServer(username, server)
}
@ -155,12 +159,19 @@ class UserManager internal constructor(private val userRepository: UsersReposito
user.userId = userAttributes.userId
user.token = userAttributes.token
user.displayName = userAttributes.displayName
user.pushConfigurationState = LoganSquare
.parse(userAttributes.pushConfigurationState, PushConfigurationState::class.java)
user.capabilities = LoganSquare.parse(userAttributes.capabilities, Capabilities::class.java)
if (userAttributes.pushConfigurationState != null) {
user.pushConfigurationState = LoganSquare
.parse(userAttributes.pushConfigurationState, PushConfigurationState::class.java)
}
if (userAttributes.capabilities != null) {
user.capabilities = LoganSquare
.parse(userAttributes.capabilities, Capabilities::class.java)
}
user.clientCertificate = userAttributes.certificateAlias
user.externalSignalingServer = LoganSquare
.parse(userAttributes.externalSignalingServer, ExternalSignalingServer::class.java)
if (userAttributes.externalSignalingServer != null) {
user.externalSignalingServer = LoganSquare
.parse(userAttributes.externalSignalingServer, ExternalSignalingServer::class.java)
}
user.current = userAttributes.currentUser == true
}

View File

@ -21,8 +21,8 @@
package com.nextcloud.talk.utils.database.user
import com.nextcloud.talk.data.user.model.User
import io.reactivex.Single
import io.reactivex.Maybe
interface CurrentUserProviderNew {
val currentUser: Single<User?>
val currentUser: Maybe<User>
}