From eddd5b98f3f3f710e6eb2eb720c24ea7eb6f8fc3 Mon Sep 17 00:00:00 2001 From: Evgenii Kozlov Date: Tue, 27 May 2025 22:43:24 +0200 Subject: [PATCH] DROID-3699 Chats | Enhancement | Unsubscribe from chats on back navigation (#2473) --- .../anytype/domain/chats/ChatContainer.kt | 17 +++++++++++++---- .../domain/chats/ChatPreviewContainer.kt | 2 +- .../feature_chats/presentation/ChatViewModel.kt | 3 +++ 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/domain/src/main/java/com/anytypeio/anytype/domain/chats/ChatContainer.kt b/domain/src/main/java/com/anytypeio/anytype/domain/chats/ChatContainer.kt index d3632b27c9..2f7b5c1089 100644 --- a/domain/src/main/java/com/anytypeio/anytype/domain/chats/ChatContainer.kt +++ b/domain/src/main/java/com/anytypeio/anytype/domain/chats/ChatContainer.kt @@ -105,6 +105,16 @@ class ChatContainer @Inject constructor( } } + suspend fun stop(chat: Id) { + runCatching { + repo.unsubscribeChat(chat) + }.onFailure { + logger.logWarning("DROID-2966 Error while unsubscribing from chat") + }.onSuccess { + logger.logInfo("DROID-2966 Successfully unsubscribed from chat") + } + } + fun watch(chat: Id): Flow = flow { val response = repo.subscribeLastChatMessages( command = Command.ChatCommand.SubscribeLastMessages( @@ -119,7 +129,7 @@ class ChatContainer @Inject constructor( var intent: Intent = Intent.None - val initial = buildList { + val initial = buildList { if (initialState.hasUnReadMessages && !initialState.oldestMessageOrderId.isNullOrEmpty()) { // Starting from the unread-messages window. val aroundUnread = loadAroundMessageOrder( @@ -210,7 +220,6 @@ class ChatContainer @Inject constructor( logger.logException(e, "DROID-2966 Error while loading reply context") state.messages } - val target = messages.find { it.order == oldestReadOrderId } ChatStreamState( messages = messages, intent = Intent.ScrollToBottom, @@ -296,7 +305,7 @@ class ChatContainer @Inject constructor( ) ) }.onFailure { - logger.logException(it, "DROID-2966 Error while reading mentions") + logger.logWarning("DROID-2966 Error while reading mentions: ${it.message}") }.onSuccess { logger.logInfo("DROID-2966 Read mentions with success") } @@ -336,7 +345,7 @@ class ChatContainer @Inject constructor( ) ) }.onFailure { - logger.logException(it, "DROID-2966 Error while reading messages") + logger.logWarning("DROID-2966 Error while reading messages: ${it.message}") }.onSuccess { logger.logInfo("DROID-2966 Read messages with success") } diff --git a/domain/src/main/java/com/anytypeio/anytype/domain/chats/ChatPreviewContainer.kt b/domain/src/main/java/com/anytypeio/anytype/domain/chats/ChatPreviewContainer.kt index 597242ea6c..df0a5ebcbe 100644 --- a/domain/src/main/java/com/anytypeio/anytype/domain/chats/ChatPreviewContainer.kt +++ b/domain/src/main/java/com/anytypeio/anytype/domain/chats/ChatPreviewContainer.kt @@ -48,7 +48,7 @@ interface ChatPreviewContainer { job = scope.launch(dispatchers.io) { previews.value = emptyList() val initial = runCatching { repo.subscribeToMessagePreviews(SUBSCRIPTION_ID) } - .onFailure { logger.logException(it, "DROID-2966 Error while getting initial previews") } + .onFailure { logger.logWarning("DROID-2966 Error while getting initial previews: ${it.message}") } .getOrDefault(emptyList()) events .subscribe(SUBSCRIPTION_ID) diff --git a/feature-chats/src/main/java/com/anytypeio/anytype/feature_chats/presentation/ChatViewModel.kt b/feature-chats/src/main/java/com/anytypeio/anytype/feature_chats/presentation/ChatViewModel.kt index b8d605d819..6b21e4e66c 100644 --- a/feature-chats/src/main/java/com/anytypeio/anytype/feature_chats/presentation/ChatViewModel.kt +++ b/feature-chats/src/main/java/com/anytypeio/anytype/feature_chats/presentation/ChatViewModel.kt @@ -914,6 +914,9 @@ class ChatViewModel @Inject constructor( fun onBackButtonPressed(isSpaceRoot: Boolean) { viewModelScope.launch { + withContext(dispatchers.io) { + chatContainer.stop(chat = vmParams.ctx) + } if (isSpaceRoot) { Timber.d("Root space screen. Releasing resources...") proceedWithClearingSpaceBeforeExitingToVault()