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( val user = sut.userManager.createOrUpdateUser(
"test", "test",
UserManager.UserAttributes( UserManager.UserAttributes(
id = 0, null,
serverUrl = "http://server/nc", serverUrl = "http://server/nc",
currentUser = false, currentUser = true,
userId = "test", userId = "test",
token = "test", token = "test",
displayName = null, displayName = "Test Name",
pushConfigurationState = null, pushConfigurationState = null,
capabilities = null, capabilities = null,
certificateAlias = null, certificateAlias = null,

View File

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

View File

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

View File

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

View File

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