mirror of
https://github.com/nextcloud/talk-android
synced 2025-07-12 07:14:05 +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(
|
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,
|
||||||
|
@ -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 {
|
||||||
|
@ -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
|
||||||
|
@ -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) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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>
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user