ganfra
2 years ago
11 changed files with 202 additions and 74 deletions
@ -1,11 +1,50 @@
@@ -1,11 +1,50 @@
|
||||
package io.element.android.x.matrix.room |
||||
|
||||
import io.element.android.x.matrix.core.RoomId |
||||
import kotlinx.coroutines.flow.Flow |
||||
import kotlinx.coroutines.flow.filter |
||||
import kotlinx.coroutines.flow.map |
||||
import kotlinx.coroutines.flow.onStart |
||||
import org.matrix.rustcomponents.sdk.Room |
||||
import org.matrix.rustcomponents.sdk.SlidingSyncRoom |
||||
import org.matrix.rustcomponents.sdk.UpdateSummary |
||||
|
||||
class MatrixRoom(private val room: Room) { |
||||
class MatrixRoom( |
||||
private val slidingSyncUpdateFlow: Flow<UpdateSummary>, |
||||
private val slidingSyncRoom: SlidingSyncRoom, |
||||
private val room: Room, |
||||
) { |
||||
|
||||
fun syncUpdateFlow(): Flow<Unit> { |
||||
return slidingSyncUpdateFlow |
||||
.filter { |
||||
it.rooms.contains(room.id()) |
||||
} |
||||
.map { } |
||||
.onStart { emit(Unit) } |
||||
} |
||||
|
||||
val roomId = RoomId(room.id()) |
||||
|
||||
val name: String? |
||||
get() { |
||||
return slidingSyncRoom.name() |
||||
} |
||||
|
||||
val displayName: String |
||||
get() { |
||||
return room.displayName() |
||||
} |
||||
|
||||
val topic: String? |
||||
get() { |
||||
return room.topic() |
||||
} |
||||
|
||||
val avatarUrl: String? |
||||
get() { |
||||
return room.avatarUrl() |
||||
} |
||||
|
||||
|
||||
} |
@ -0,0 +1,30 @@
@@ -0,0 +1,30 @@
|
||||
package io.element.android.x.matrix.room |
||||
|
||||
import io.element.android.x.matrix.core.RoomId |
||||
import io.element.android.x.matrix.room.message.RoomMessageFactory |
||||
import org.matrix.rustcomponents.sdk.Room |
||||
import org.matrix.rustcomponents.sdk.SlidingSyncRoom |
||||
|
||||
class RoomSummaryDetailsFactory(private val roomMessageFactory: RoomMessageFactory = RoomMessageFactory()) { |
||||
|
||||
fun create(slidingSyncRoom: SlidingSyncRoom, room: Room?): RoomSummaryDetails{ |
||||
val latestRoomMessage = slidingSyncRoom.latestRoomMessage()?.let { |
||||
roomMessageFactory.create(it) |
||||
} |
||||
val computedLastMessage = when { |
||||
latestRoomMessage == null -> null |
||||
slidingSyncRoom.isDm() == true -> latestRoomMessage.body |
||||
else -> "${latestRoomMessage.sender.value}: ${latestRoomMessage.body}" |
||||
} |
||||
return RoomSummaryDetails( |
||||
roomId = RoomId(slidingSyncRoom.roomId()), |
||||
name = slidingSyncRoom.name() ?: slidingSyncRoom.roomId(), |
||||
isDirect = slidingSyncRoom.isDm() ?: false, |
||||
avatarURLString = room?.avatarUrl(), |
||||
unreadNotificationCount = slidingSyncRoom.unreadNotifications().notificationCount().toInt(), |
||||
lastMessage = computedLastMessage, |
||||
lastMessageTimestamp = latestRoomMessage?.originServerTs |
||||
) |
||||
} |
||||
|
||||
} |
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
package io.element.android.x.matrix.sync |
||||
|
||||
import kotlinx.coroutines.CoroutineScope |
||||
import kotlinx.coroutines.flow.Flow |
||||
import kotlinx.coroutines.flow.MutableSharedFlow |
||||
import kotlinx.coroutines.launch |
||||
import org.matrix.rustcomponents.sdk.SlidingSyncObserver |
||||
import org.matrix.rustcomponents.sdk.UpdateSummary |
||||
|
||||
class SlidingSyncObserverProxy(private val coroutineScope: CoroutineScope) : SlidingSyncObserver { |
||||
|
||||
private val updateSummaryMutableFlow = MutableSharedFlow<UpdateSummary>() |
||||
val updateSummaryFlow: Flow<UpdateSummary> = updateSummaryMutableFlow |
||||
|
||||
override fun didReceiveSyncUpdate(summary: UpdateSummary) { |
||||
coroutineScope.launch { |
||||
updateSummaryMutableFlow.emit(summary) |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue