|
|
@ -43,8 +43,10 @@ import io.element.android.libraries.matrix.impl.media.MediaUploadHandlerImpl |
|
|
|
import io.element.android.libraries.matrix.impl.media.map |
|
|
|
import io.element.android.libraries.matrix.impl.media.map |
|
|
|
import io.element.android.libraries.matrix.impl.room.location.toInner |
|
|
|
import io.element.android.libraries.matrix.impl.room.location.toInner |
|
|
|
import io.element.android.libraries.matrix.impl.timeline.RustMatrixTimeline |
|
|
|
import io.element.android.libraries.matrix.impl.timeline.RustMatrixTimeline |
|
|
|
|
|
|
|
import io.element.android.libraries.matrix.impl.util.destroyAll |
|
|
|
import io.element.android.libraries.sessionstorage.api.SessionData |
|
|
|
import io.element.android.libraries.sessionstorage.api.SessionData |
|
|
|
import io.element.android.services.toolbox.api.systemclock.SystemClock |
|
|
|
import io.element.android.services.toolbox.api.systemclock.SystemClock |
|
|
|
|
|
|
|
import kotlinx.coroutines.CancellationException |
|
|
|
import kotlinx.coroutines.CoroutineScope |
|
|
|
import kotlinx.coroutines.CoroutineScope |
|
|
|
import kotlinx.coroutines.ExperimentalCoroutinesApi |
|
|
|
import kotlinx.coroutines.ExperimentalCoroutinesApi |
|
|
|
import kotlinx.coroutines.cancel |
|
|
|
import kotlinx.coroutines.cancel |
|
|
@ -55,6 +57,7 @@ import kotlinx.coroutines.withContext |
|
|
|
import org.matrix.rustcomponents.sdk.RequiredState |
|
|
|
import org.matrix.rustcomponents.sdk.RequiredState |
|
|
|
import org.matrix.rustcomponents.sdk.Room |
|
|
|
import org.matrix.rustcomponents.sdk.Room |
|
|
|
import org.matrix.rustcomponents.sdk.RoomListItem |
|
|
|
import org.matrix.rustcomponents.sdk.RoomListItem |
|
|
|
|
|
|
|
import org.matrix.rustcomponents.sdk.RoomMember |
|
|
|
import org.matrix.rustcomponents.sdk.RoomSubscription |
|
|
|
import org.matrix.rustcomponents.sdk.RoomSubscription |
|
|
|
import org.matrix.rustcomponents.sdk.SendAttachmentJoinHandle |
|
|
|
import org.matrix.rustcomponents.sdk.SendAttachmentJoinHandle |
|
|
|
import org.matrix.rustcomponents.sdk.genTransactionId |
|
|
|
import org.matrix.rustcomponents.sdk.genTransactionId |
|
|
@ -170,12 +173,19 @@ class RustMatrixRoom( |
|
|
|
val currentState = _membersStateFlow.value |
|
|
|
val currentState = _membersStateFlow.value |
|
|
|
val currentMembers = currentState.roomMembers() |
|
|
|
val currentMembers = currentState.roomMembers() |
|
|
|
_membersStateFlow.value = MatrixRoomMembersState.Pending(prevRoomMembers = currentMembers) |
|
|
|
_membersStateFlow.value = MatrixRoomMembersState.Pending(prevRoomMembers = currentMembers) |
|
|
|
runCatching { |
|
|
|
var rustMembers: List<RoomMember>? = null |
|
|
|
innerRoom.members().parallelMap(RoomMemberMapper::map) |
|
|
|
try { |
|
|
|
}.map { |
|
|
|
rustMembers = innerRoom.members() |
|
|
|
_membersStateFlow.value = MatrixRoomMembersState.Ready(it) |
|
|
|
val mappedMembers = rustMembers.parallelMap(RoomMemberMapper::map) |
|
|
|
}.onFailure { |
|
|
|
_membersStateFlow.value = MatrixRoomMembersState.Ready(mappedMembers) |
|
|
|
_membersStateFlow.value = MatrixRoomMembersState.Error(prevRoomMembers = currentMembers, failure = it) |
|
|
|
Result.success(Unit) |
|
|
|
|
|
|
|
} catch (cancellationException: CancellationException) { |
|
|
|
|
|
|
|
throw cancellationException |
|
|
|
|
|
|
|
} catch (exception: Exception) { |
|
|
|
|
|
|
|
_membersStateFlow.value = MatrixRoomMembersState.Error(prevRoomMembers = currentMembers, failure = exception) |
|
|
|
|
|
|
|
Result.failure(exception) |
|
|
|
|
|
|
|
} finally { |
|
|
|
|
|
|
|
rustMembers?.destroyAll() |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|