From 5c561ad3a1e94fdeac0ca6b6df39137c37d5f6ab Mon Sep 17 00:00:00 2001 From: Kgothatso Ngako Date: Mon, 15 Jun 2026 13:29:17 +0200 Subject: [PATCH] Observe chatroom list --- .../ac/cord/auxiliary/compose/database/dao/ChatRoomDao.kt | 5 +++++ .../compose/database/repository/DatabaseChatRepository.kt | 3 +++ .../ac/cord/auxiliary/compose/repository/ChatRepository.kt | 6 ++++++ .../compose/ui/view/model/ChatRoomListViewModel.kt | 4 ++-- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatRoomDao.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatRoomDao.kt index 5e926ed2..6f9b8cf3 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatRoomDao.kt +++ b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/dao/ChatRoomDao.kt @@ -6,6 +6,7 @@ import androidx.room3.Dao import androidx.room3.Query import androidx.room3.Transaction import androidx.room3.Upsert +import kotlinx.coroutines.flow.Flow @Dao interface ChatRoomDao { @@ -17,6 +18,10 @@ interface ChatRoomDao { @Query("SELECT * FROM ChatRoom WHERE userPublicKey = :userPublicKey") fun getChatRoomListByUserPublicKey(userPublicKey: String): List + @Transaction + @Query("SELECT * FROM ChatRoom WHERE userPublicKey = :userPublicKey") + fun observeChatRoomListByUserPublicKey(userPublicKey: String): Flow> + @Upsert suspend fun upsert(chatRoom: ChatRoom) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/repository/DatabaseChatRepository.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/repository/DatabaseChatRepository.kt index fdc1e09f..f6472e74 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/repository/DatabaseChatRepository.kt +++ b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/database/repository/DatabaseChatRepository.kt @@ -31,6 +31,9 @@ class DatabaseChatRepository( private val scope: CoroutineScope ): ChatRepository { val logger = Logger.withTag(TAG) + override suspend fun observeChatRoomListByPublicKey(publicKey: String): Flow> { + return database.chatRoomDao().observeChatRoomListByUserPublicKey(publicKey) + } override suspend fun getChatRoomListByPublicKey(publicKey: String): List { return database.chatRoomDao().getChatRoomListByUserPublicKey(publicKey) diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/ChatRepository.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/ChatRepository.kt index ee7a4876..b57e4a07 100644 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/ChatRepository.kt +++ b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/repository/ChatRepository.kt @@ -13,6 +13,8 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow interface ChatRepository { + suspend fun observeChatRoomListByPublicKey(publicKey: String): Flow> + suspend fun getChatRoomListByPublicKey(publicKey: String): List suspend fun getChatRoomByIdentifier(id: String): LocalChatRoom? @@ -39,6 +41,10 @@ interface ChatRepository { companion object { val NO_OP_CHAT_REPOSITORY = object: ChatRepository { + override suspend fun observeChatRoomListByPublicKey(publicKey: String): Flow> { + return flow { } + } + override suspend fun getChatRoomListByPublicKey(publicKey: String): List { return emptyList() } diff --git a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/ChatRoomListViewModel.kt b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/ChatRoomListViewModel.kt index 8f468e93..96866dac 100755 --- a/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/ChatRoomListViewModel.kt +++ b/composeApp/src/commonMain/kotlin/ac/cord/auxiliary/compose/ui/view/model/ChatRoomListViewModel.kt @@ -64,9 +64,9 @@ class ChatRoomListViewModel( fun observeChatRoomFeed() { logger.d("observeChatRoomFeed") viewModelScope.launch(Dispatchers.IO) { - chatRepository.getChatRoomListByPublicKey( + chatRepository.observeChatRoomListByPublicKey( publicKey - ).let { chatRooms -> + ).collect { chatRooms -> logger.d("ChatRoomList: $chatRooms") chatRoomListUIState = ChatRoomListUIState.Loaded( chatRoomList = chatRooms