Merge pull request #4667 from nextcloud/bugfix/4492/fixMissingUsersInUI

Bugfix/4492/fix missing users in UI
This commit is contained in:
Julius Linus 2025-02-03 11:51:37 -06:00 committed by GitHub
commit 3d2f99907a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 19 additions and 7 deletions

View File

@ -7,6 +7,7 @@
*/ */
package com.nextcloud.talk.data.user package com.nextcloud.talk.data.user
import android.util.Log
import com.nextcloud.talk.data.user.model.User import com.nextcloud.talk.data.user.model.User
import com.nextcloud.talk.models.json.push.PushConfigurationState import com.nextcloud.talk.models.json.push.PushConfigurationState
import io.reactivex.Maybe import io.reactivex.Maybe
@ -17,7 +18,12 @@ import io.reactivex.Single
class UsersRepositoryImpl(private val usersDao: UsersDao) : UsersRepository { class UsersRepositoryImpl(private val usersDao: UsersDao) : UsersRepository {
override fun getActiveUser(): Maybe<User> { override fun getActiveUser(): Maybe<User> {
return usersDao.getActiveUser().map { UserMapper.toModel(it) } val user = usersDao.getActiveUser()
.map {
setUserAsActiveWithId(it.id)
UserMapper.toModel(it)!!
}
return user
} }
override fun getActiveUserObservable(): Observable<User> { override fun getActiveUserObservable(): Observable<User> {
@ -62,6 +68,7 @@ class UsersRepositoryImpl(private val usersDao: UsersDao) : UsersRepository {
override fun setUserAsActiveWithId(id: Long): Single<Boolean> { override fun setUserAsActiveWithId(id: Long): Single<Boolean> {
val amountUpdated = usersDao.setUserAsActiveWithId(id) val amountUpdated = usersDao.setUserAsActiveWithId(id)
Log.d(TAG, "setUserAsActiveWithId. amountUpdated: $amountUpdated")
return if (amountUpdated > 0) { return if (amountUpdated > 0) {
Single.just(true) Single.just(true)
} else { } else {
@ -76,4 +83,8 @@ class UsersRepositoryImpl(private val usersDao: UsersDao) : UsersRepository {
override fun updatePushState(id: Long, state: PushConfigurationState): Single<Int> { override fun updatePushState(id: Long, state: PushConfigurationState): Single<Int> {
return usersDao.updatePushState(id, state) return usersDao.updatePushState(id, state)
} }
companion object {
private val TAG = UsersRepositoryImpl::class.simpleName
}
} }

View File

@ -8,6 +8,7 @@
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
@ -30,7 +31,7 @@ class UserManager internal constructor(private val userRepository: UsersReposito
val currentUser: Maybe<User> val currentUser: Maybe<User>
get() { get() {
return userRepository.getActiveUser() return userRepository.getActiveUser()
.switchIfEmpty(getAnyUserAndSetAsActive()) .switchIfEmpty(Maybe.defer { getAnyUserAndSetAsActive() })
} }
val currentUserObservable: Observable<User> val currentUserObservable: Observable<User>
@ -88,12 +89,11 @@ class UserManager internal constructor(private val userRepository: UsersReposito
.flatMapMaybe { .flatMapMaybe {
if (it.isNotEmpty()) { if (it.isNotEmpty()) {
val user = it.first() val user = it.first()
user.apply { if (setUserAsActive(user).blockingGet()) {
current = true userRepository.getActiveUser()
}.also { currentUser -> } else {
userRepository.updateUser(currentUser) Maybe.empty()
} }
Maybe.just(user)
} else { } else {
Maybe.empty() Maybe.empty()
} }
@ -123,6 +123,7 @@ class UserManager internal constructor(private val userRepository: UsersReposito
} }
fun setUserAsActive(user: User): Single<Boolean> { fun setUserAsActive(user: User): Single<Boolean> {
Log.d(TAG, "setUserAsActive:" + user.id!!)
return userRepository.setUserAsActiveWithId(user.id!!) return userRepository.setUserAsActiveWithId(user.id!!)
} }