ganfra
2 years ago
11 changed files with 202 additions and 74 deletions
@ -1,11 +1,50 @@ |
|||||||
package io.element.android.x.matrix.room |
package io.element.android.x.matrix.room |
||||||
|
|
||||||
import io.element.android.x.matrix.core.RoomId |
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.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 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 @@ |
|||||||
|
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 @@ |
|||||||
|
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