mirror of
https://github.com/element-hq/element-android
synced 2024-11-26 19:35:42 +03:00
fix 7870
This commit is contained in:
parent
ea2c41b818
commit
a345c6c8e5
3 changed files with 10 additions and 12 deletions
|
@ -1,4 +1,4 @@
|
||||||
Changes in Element v.5.16 (2022-12-29)
|
Changes in Element v1.5.16 (2022-12-29)
|
||||||
======================================
|
======================================
|
||||||
|
|
||||||
Features ✨
|
Features ✨
|
||||||
|
|
1
changelog.d/7870.bugfix
Normal file
1
changelog.d/7870.bugfix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Start DM will create a deadlock is user profile was never loaded
|
|
@ -21,7 +21,7 @@ import io.realm.Realm
|
||||||
import io.realm.RealmConfiguration
|
import io.realm.RealmConfiguration
|
||||||
import io.realm.kotlin.createObject
|
import io.realm.kotlin.createObject
|
||||||
import kotlinx.coroutines.TimeoutCancellationException
|
import kotlinx.coroutines.TimeoutCancellationException
|
||||||
import kotlinx.coroutines.runBlocking
|
import org.matrix.android.sdk.api.session.events.model.Event
|
||||||
import org.matrix.android.sdk.api.session.events.model.EventType
|
import org.matrix.android.sdk.api.session.events.model.EventType
|
||||||
import org.matrix.android.sdk.api.session.room.failure.CreateRoomFailure
|
import org.matrix.android.sdk.api.session.room.failure.CreateRoomFailure
|
||||||
import org.matrix.android.sdk.api.session.room.model.Membership
|
import org.matrix.android.sdk.api.session.room.model.Membership
|
||||||
|
@ -73,8 +73,9 @@ internal class DefaultCreateLocalRoomTask @Inject constructor(
|
||||||
override suspend fun execute(params: CreateRoomParams): String {
|
override suspend fun execute(params: CreateRoomParams): String {
|
||||||
val createRoomBody = createRoomBodyBuilder.build(params)
|
val createRoomBody = createRoomBodyBuilder.build(params)
|
||||||
val roomId = RoomLocalEcho.createLocalEchoId()
|
val roomId = RoomLocalEcho.createLocalEchoId()
|
||||||
|
val eventList = createLocalRoomStateEventsTask.execute(CreateLocalRoomStateEventsTask.Params(createRoomBody))
|
||||||
monarchy.awaitTransaction { realm ->
|
monarchy.awaitTransaction { realm ->
|
||||||
createLocalRoomEntity(realm, roomId, createRoomBody)
|
createLocalRoomEntity(realm, roomId, eventList)
|
||||||
createLocalRoomSummaryEntity(realm, roomId, params, createRoomBody)
|
createLocalRoomSummaryEntity(realm, roomId, params, createRoomBody)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,10 +97,10 @@ internal class DefaultCreateLocalRoomTask @Inject constructor(
|
||||||
* Create a local room entity from the given room creation params.
|
* Create a local room entity from the given room creation params.
|
||||||
* This will also generate and store in database the chunk and the events related to the room params in order to retrieve and display the local room.
|
* This will also generate and store in database the chunk and the events related to the room params in order to retrieve and display the local room.
|
||||||
*/
|
*/
|
||||||
private fun createLocalRoomEntity(realm: Realm, roomId: String, createRoomBody: CreateRoomBody) {
|
private fun createLocalRoomEntity(realm: Realm, roomId: String, localStateEventList: List<Event>) {
|
||||||
RoomEntity.getOrCreate(realm, roomId).apply {
|
RoomEntity.getOrCreate(realm, roomId).apply {
|
||||||
membership = Membership.JOIN
|
membership = Membership.JOIN
|
||||||
chunks.add(createLocalRoomChunk(realm, roomId, createRoomBody))
|
chunks.add(createLocalRoomChunk(realm, roomId, localStateEventList))
|
||||||
membersLoadStatus = RoomMembersLoadStatusType.LOADED
|
membersLoadStatus = RoomMembersLoadStatusType.LOADED
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -145,23 +146,19 @@ internal class DefaultCreateLocalRoomTask @Inject constructor(
|
||||||
*
|
*
|
||||||
* @param realm the current instance of realm
|
* @param realm the current instance of realm
|
||||||
* @param roomId the id of the local room
|
* @param roomId the id of the local room
|
||||||
* @param createRoomBody the room creation params
|
* @param localStateEventList list of local state events for that room
|
||||||
*
|
*
|
||||||
* @return a chunk entity
|
* @return a chunk entity
|
||||||
*/
|
*/
|
||||||
private fun createLocalRoomChunk(realm: Realm, roomId: String, createRoomBody: CreateRoomBody): ChunkEntity {
|
private fun createLocalRoomChunk(realm: Realm, roomId: String, localStateEventList: List<Event>): ChunkEntity {
|
||||||
val chunkEntity = realm.createObject<ChunkEntity>().apply {
|
val chunkEntity = realm.createObject<ChunkEntity>().apply {
|
||||||
isLastBackward = true
|
isLastBackward = true
|
||||||
isLastForward = true
|
isLastForward = true
|
||||||
}
|
}
|
||||||
|
|
||||||
// Can't suspend when using realm as it could jump thread
|
|
||||||
val eventList = runBlocking {
|
|
||||||
createLocalRoomStateEventsTask.execute(CreateLocalRoomStateEventsTask.Params(createRoomBody))
|
|
||||||
}
|
|
||||||
val roomMemberContentsByUser = HashMap<String, RoomMemberContent?>()
|
val roomMemberContentsByUser = HashMap<String, RoomMemberContent?>()
|
||||||
|
|
||||||
for (event in eventList) {
|
for (event in localStateEventList) {
|
||||||
if (event.eventId == null || event.senderId == null || event.type == null) {
|
if (event.eventId == null || event.senderId == null || event.type == null) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue