parent
d291622eea
commit
52bbede960
4 changed files with 18 additions and 11 deletions
|
|
@ -150,7 +150,7 @@ jsoup = { module = "org.jsoup:jsoup", version.ref = "jsoup" }
|
||||||
appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" }
|
appyx_core = { module = "com.bumble.appyx:core", version.ref = "appyx" }
|
||||||
molecule-runtime = { module = "app.cash.molecule:molecule-runtime", version.ref = "molecule" }
|
molecule-runtime = { module = "app.cash.molecule:molecule-runtime", version.ref = "molecule" }
|
||||||
timber = "com.jakewharton.timber:timber:5.0.1"
|
timber = "com.jakewharton.timber:timber:5.0.1"
|
||||||
matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.54"
|
matrix_sdk = "org.matrix.rustcomponents:sdk-android:0.1.55"
|
||||||
matrix_richtexteditor = { module = "io.element.android:wysiwyg", version.ref = "wysiwyg" }
|
matrix_richtexteditor = { module = "io.element.android:wysiwyg", version.ref = "wysiwyg" }
|
||||||
matrix_richtexteditor_compose = { module = "io.element.android:wysiwyg-compose", version.ref = "wysiwyg" }
|
matrix_richtexteditor_compose = { module = "io.element.android:wysiwyg-compose", version.ref = "wysiwyg" }
|
||||||
sqldelight-driver-android = { module = "com.squareup.sqldelight:android-driver", version.ref = "sqldelight" }
|
sqldelight-driver-android = { module = "com.squareup.sqldelight:android-driver", version.ref = "sqldelight" }
|
||||||
|
|
|
||||||
|
|
@ -187,7 +187,13 @@ class RustMatrixRoom(
|
||||||
_membersStateFlow.value = MatrixRoomMembersState.Pending(prevRoomMembers = currentMembers)
|
_membersStateFlow.value = MatrixRoomMembersState.Pending(prevRoomMembers = currentMembers)
|
||||||
var rustMembers: List<RoomMember>? = null
|
var rustMembers: List<RoomMember>? = null
|
||||||
try {
|
try {
|
||||||
rustMembers = innerRoom.members()
|
rustMembers = buildList {
|
||||||
|
while (true) {
|
||||||
|
// Loading the whole iterator as a stop-gap measure.
|
||||||
|
// We should probably implement some sort of paging in the future.
|
||||||
|
addAll(innerRoom.members().nextChunk(1000u) ?: break)
|
||||||
|
}
|
||||||
|
}
|
||||||
val mappedMembers = rustMembers.parallelMap(RoomMemberMapper::map)
|
val mappedMembers = rustMembers.parallelMap(RoomMemberMapper::map)
|
||||||
_membersStateFlow.value = MatrixRoomMembersState.Ready(mappedMembers)
|
_membersStateFlow.value = MatrixRoomMembersState.Ready(mappedMembers)
|
||||||
Result.success(Unit)
|
Result.success(Unit)
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,9 @@ import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicator
|
||||||
import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicatorListener
|
import org.matrix.rustcomponents.sdk.RoomListServiceSyncIndicatorListener
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
|
private const val SYNC_INDICATOR_DELAY_BEFORE_SHOWING = 1000u
|
||||||
|
private const val SYNC_INDICATOR_DELAY_BEFORE_HIDING = 0u
|
||||||
|
|
||||||
fun RoomList.loadingStateFlow(): Flow<RoomListLoadingState> =
|
fun RoomList.loadingStateFlow(): Flow<RoomListLoadingState> =
|
||||||
mxCallbackFlow {
|
mxCallbackFlow {
|
||||||
val listener = object : RoomListLoadingStateListener {
|
val listener = object : RoomListLoadingStateListener {
|
||||||
|
|
@ -93,7 +96,11 @@ fun RoomListService.syncIndicator(): Flow<RoomListServiceSyncIndicator> =
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tryOrNull {
|
tryOrNull {
|
||||||
syncIndicator(listener)
|
syncIndicator(
|
||||||
|
SYNC_INDICATOR_DELAY_BEFORE_SHOWING,
|
||||||
|
SYNC_INDICATOR_DELAY_BEFORE_HIDING,
|
||||||
|
listener,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}.buffer(Channel.UNLIMITED)
|
}.buffer(Channel.UNLIMITED)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,6 @@ import io.element.android.libraries.matrix.impl.timeline.item.event.EventTimelin
|
||||||
import io.element.android.libraries.matrix.impl.timeline.item.event.TimelineEventContentMapper
|
import io.element.android.libraries.matrix.impl.timeline.item.event.TimelineEventContentMapper
|
||||||
import io.element.android.libraries.matrix.impl.timeline.item.virtual.VirtualTimelineItemMapper
|
import io.element.android.libraries.matrix.impl.timeline.item.virtual.VirtualTimelineItemMapper
|
||||||
import io.element.android.libraries.matrix.impl.timeline.postprocessor.TimelineEncryptedHistoryPostProcessor
|
import io.element.android.libraries.matrix.impl.timeline.postprocessor.TimelineEncryptedHistoryPostProcessor
|
||||||
import io.element.android.libraries.matrix.impl.util.TaskHandleBag
|
|
||||||
import kotlinx.coroutines.CompletableDeferred
|
import kotlinx.coroutines.CompletableDeferred
|
||||||
import kotlinx.coroutines.CoroutineDispatcher
|
import kotlinx.coroutines.CoroutineDispatcher
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
|
@ -103,7 +102,6 @@ class RustMatrixTimeline(
|
||||||
init {
|
init {
|
||||||
Timber.d("Initialize timeline for room ${matrixRoom.roomId}")
|
Timber.d("Initialize timeline for room ${matrixRoom.roomId}")
|
||||||
|
|
||||||
val taskHandleBag = TaskHandleBag()
|
|
||||||
roomCoroutineScope.launch(dispatcher) {
|
roomCoroutineScope.launch(dispatcher) {
|
||||||
innerRoom.timelineDiffFlow { initialList ->
|
innerRoom.timelineDiffFlow { initialList ->
|
||||||
postItems(initialList)
|
postItems(initialList)
|
||||||
|
|
@ -120,17 +118,13 @@ class RustMatrixTimeline(
|
||||||
}
|
}
|
||||||
.launchIn(this)
|
.launchIn(this)
|
||||||
|
|
||||||
taskHandleBag += fetchMembers().getOrNull()
|
fetchMembers()
|
||||||
}.invokeOnCompletion {
|
|
||||||
taskHandleBag.dispose()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun fetchMembers() = withContext(dispatcher) {
|
private suspend fun fetchMembers() = withContext(dispatcher) {
|
||||||
initLatch.await()
|
initLatch.await()
|
||||||
runCatching {
|
innerRoom.fetchMembers()
|
||||||
innerRoom.fetchMembers()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@OptIn(ExperimentalCoroutinesApi::class)
|
@OptIn(ExperimentalCoroutinesApi::class)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue