UserAccountData: optimize helper and clean code.

This commit is contained in:
ganfra 2019-07-30 21:41:29 +02:00
parent eb446d7b49
commit 95089b91b8
2 changed files with 12 additions and 16 deletions

View File

@ -78,13 +78,7 @@ internal class UserAccountDataSyncHandler @Inject constructor(private val monarc
// If we get some direct chat invites, we synchronize the user account data including those. // If we get some direct chat invites, we synchronize the user account data including those.
private fun synchronizeWithServerIfNeeded(realm: Realm, invites: Map<String, InvitedRoomSync>?) { private fun synchronizeWithServerIfNeeded(realm: Realm, invites: Map<String, InvitedRoomSync>?) {
if (invites.isNullOrEmpty()) return if (invites.isNullOrEmpty()) return
val directChats = directChatsHelper.getLocalUserAccount() val directChats = directChatsHelper.getLocalUserAccount()
val directChatInvites = HashMap<String, MutableList<String>>().apply {
directChats.forEach { (inviterId, roomIds) ->
put(inviterId, ArrayList(roomIds))
}
}
var hasUpdate = false var hasUpdate = false
invites.forEach { (roomId, _) -> invites.forEach { (roomId, _) ->
val myUserStateEvent = RoomMembers(realm, roomId).getStateEvent(credentials.userId) val myUserStateEvent = RoomMembers(realm, roomId).getStateEvent(credentials.userId)
@ -92,19 +86,21 @@ internal class UserAccountDataSyncHandler @Inject constructor(private val monarc
val myUserRoomMember: RoomMember? = myUserStateEvent?.let { it.asDomain().content?.toModel() } val myUserRoomMember: RoomMember? = myUserStateEvent?.let { it.asDomain().content?.toModel() }
val isDirect = myUserRoomMember?.isDirect val isDirect = myUserRoomMember?.isDirect
if (inviterId != null && inviterId != credentials.userId && isDirect == true) { if (inviterId != null && inviterId != credentials.userId && isDirect == true) {
directChatInvites.getOrPut(inviterId, { arrayListOf() }).apply { directChats
if (contains(roomId)) { .getOrPut(inviterId, { arrayListOf() })
Timber.v("Direct chats already include room $roomId with user $inviterId") .apply {
} else { if (contains(roomId)) {
this.add(roomId) Timber.v("Direct chats already include room $roomId with user $inviterId")
hasUpdate = true } else {
} add(roomId)
} hasUpdate = true
}
}
} }
} }
if (hasUpdate) { if (hasUpdate) {
val updateUserAccountParams = UpdateUserAccountDataTask.DirectChatParams( val updateUserAccountParams = UpdateUserAccountDataTask.DirectChatParams(
directMessages = directChatInvites directMessages = directChats
) )
updateUserAccountDataTask.configureWith(updateUserAccountParams).executeBy(taskExecutor) updateUserAccountDataTask.configureWith(updateUserAccountParams).executeBy(taskExecutor)
} }

View File

@ -30,7 +30,7 @@ internal class DirectChatsHelper @Inject constructor(@SessionDatabase
/** /**
* @return a map of userId <-> list of roomId * @return a map of userId <-> list of roomId
*/ */
fun getLocalUserAccount(filterRoomId: String? = null): Map<String, List<String>> { fun getLocalUserAccount(filterRoomId: String? = null): MutableMap<String, MutableList<String>> {
return Realm.getInstance(realmConfiguration).use { realm -> return Realm.getInstance(realmConfiguration).use { realm ->
val currentDirectRooms = RoomSummaryEntity.getDirectRooms(realm) val currentDirectRooms = RoomSummaryEntity.getDirectRooms(realm)
val directChatsMap = mutableMapOf<String, MutableList<String>>() val directChatsMap = mutableMapOf<String, MutableList<String>>()