diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRepository.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRepository.kt index 112d198c..ea07006b 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRepository.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRepository.kt @@ -210,4 +210,13 @@ class ChatRepository( .subscribeOn(Schedulers.io()) .map { ensureSuccess(it) } } + + /** + * 방별 로컬 메시지 전체 삭제 + */ + fun clearMessagesByRoom(roomId: Long): Completable { + return Completable.fromAction { + kotlinx.coroutines.runBlocking { chatDao.deleteMessagesByRoomId(roomId) } + }.subscribeOn(Schedulers.io()) + } } diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRoomActivity.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRoomActivity.kt index ce322dca..49a93967 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRoomActivity.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/ChatRoomActivity.kt @@ -884,6 +884,18 @@ class ChatRoomActivity : BaseActivity( return if (id > 0) id else null } + private fun clearLocalPrefsForRoom(roomId: Long) { + val keys = listOf( + "chat_bg_visible_room_$roomId", + "chat_bg_url_room_$roomId", + "chat_bg_image_id_room_$roomId", + noticePrefKey(roomId) + ) + prefs.edit { + keys.forEach { remove(it) } + } + } + fun onResetChatRequested() { val title = "대화 초기화" val desc = "지금까지의 대화가 모두 초기화 되고 새롭게 대화를 시작합니다." @@ -896,6 +908,12 @@ class ChatRoomActivity : BaseActivity( confirmButtonClick = { val token = "Bearer ${SharedPreferenceManager.token}" val disposable = chatRepository.resetChatRoom(token = token, roomId = roomId) + .flatMap { response -> + // 로컬 데이터(이 방) 삭제: Prefs + DB + clearLocalPrefsForRoom(roomId) + chatRepository.clearMessagesByRoom(roomId) + .andThen(io.reactivex.rxjava3.core.Single.just(response)) + } .observeOn(AndroidSchedulers.mainThread()) .subscribe({ response -> val intent = newIntent(this, response.chatRoomId) diff --git a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/db/ChatMessageDao.kt b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/db/ChatMessageDao.kt index 19d3efbd..0241b51a 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/db/ChatMessageDao.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/chat/talk/room/db/ChatMessageDao.kt @@ -37,4 +37,7 @@ interface ChatMessageDao { @Query("SELECT DISTINCT roomId FROM chat_messages") suspend fun getAllRoomIds(): List + + @Query("DELETE FROM chat_messages WHERE roomId = :roomId") + suspend fun deleteMessagesByRoomId(roomId: Long) }