mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-10 06:14:10 +01:00
Move from Single to Maybe
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
This commit is contained in:
parent
6497c2d9b1
commit
dc83403606
@ -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,
|
||||
|
@ -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 {
|
||||
|
@ -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
|
||||
|
@ -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) }
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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>
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user