Skip to content

Commit aff1d00

Browse files
feat(chat): Re-add mark message as read
Resolves #6058 AI-assistant: Claude Code v2.1.117 (Claude Sonnet 4.6) Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
1 parent 5361576 commit aff1d00

7 files changed

Lines changed: 45 additions & 21 deletions

File tree

app/src/main/java/com/nextcloud/talk/chat/ChatActivity.kt

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3451,21 +3451,27 @@ class ChatActivity :
34513451
)
34523452
}
34533453

3454-
fun markAsUnread(chatMessage: ChatMessage?) {
3455-
if (chatMessage!!.previousMessageId > NO_PREVIOUS_MESSAGE_ID) {
3456-
// previousMessageId is taken to mark chat as unread even when "chat-unread" capability is not available
3457-
// It should be checked if "chat-unread" capability is available and then use
3458-
// https://nextcloud-talk.readthedocs.io/en/latest/chat/#mark-chat-as-unread
3459-
chatViewModel.setChatReadMessage(
3460-
credentials!!,
3461-
ApiUtils.getUrlForChatReadMarker(
3462-
ApiUtils.getChatApiVersion(spreedCapabilities, intArrayOf(ApiUtils.API_V1)),
3463-
conversationUser?.baseUrl!!,
3464-
roomToken
3465-
),
3466-
chatMessage.previousMessageId
3467-
)
3454+
fun markAsUnread(chatMessage: ChatMessage) {
3455+
val items = chatViewModel.uiState.value.items
3456+
val selectedIndex = items.indexOfFirst {
3457+
(it as? ChatViewModel.ChatItem.MessageItem)?.uiMessage?.id == chatMessage.jsonMessageId
3458+
}
3459+
val lastReadMessage = if (selectedIndex in 0 until items.size - 1) {
3460+
(selectedIndex + 1 until items.size)
3461+
.firstNotNullOfOrNull { (items[it] as? ChatViewModel.ChatItem.MessageItem)?.uiMessage?.id }
3462+
?: 0
3463+
} else {
3464+
0
34683465
}
3466+
chatViewModel.setChatReadMessage(
3467+
credentials!!,
3468+
ApiUtils.getUrlForChatReadMarker(
3469+
ApiUtils.getChatApiVersion(spreedCapabilities, intArrayOf(ApiUtils.API_V1)),
3470+
conversationUser.baseUrl!!,
3471+
roomToken
3472+
),
3473+
lastReadMessage
3474+
)
34693475
}
34703476

34713477
fun copyMessage(message: ChatMessage?) {
@@ -3712,10 +3718,7 @@ class ChatActivity :
37123718
// delete
37133719
ChatMessage.MessageType.REGULAR_TEXT_MESSAGE == message.getCalculateMessageType() ||
37143720
// forward
3715-
message.previousMessageId > NO_PREVIOUS_MESSAGE_ID &&
3716-
// mark as unread
3717-
ChatMessage.MessageType.SYSTEM_MESSAGE != message.getCalculateMessageType() &&
3718-
BuildConfig.DEBUG
3721+
ChatMessage.MessageType.SYSTEM_MESSAGE != message.getCalculateMessageType()
37193722

37203723
private fun isShowMessageDeletionButton(message: ChatMessage): Boolean {
37213724
val isUserAllowedByPrivileges = userAllowedByPrivilages(message)
@@ -3975,7 +3978,6 @@ class ChatActivity :
39753978
private const val FULLY_OPAQUE_INT: Int = 255
39763979
private const val SEMI_TRANSPARENT_INT: Int = 99
39773980
private const val VOICE_MESSAGE_SEEKBAR_BASE = 1000
3978-
private const val NO_PREVIOUS_MESSAGE_ID: Int = -1
39793981
private const val TOOLBAR_AVATAR_RATIO = 1.5
39803982
private const val STATUS_SIZE_IN_DP = 9f
39813983
private const val HTTP_BAD_REQUEST = 400

app/src/main/java/com/nextcloud/talk/chat/data/ChatMessageRepository.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ interface ChatMessageRepository : LifecycleAwareManager {
133133

134134
suspend fun hidePinnedMessage(credentials: String, url: String): Flow<Boolean>
135135

136+
suspend fun markChatAsUnread(credentials: String, url: String): Flow<Boolean>
137+
136138
@Suppress("LongParameterList")
137139
suspend fun sendScheduledChatMessage(
138140
credentials: String,

app/src/main/java/com/nextcloud/talk/chat/data/network/ChatNetworkDataSource.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,4 +116,6 @@ interface ChatNetworkDataSource {
116116
suspend fun unPinMessage(credentials: String, url: String): ChatOverallSingleMessage
117117

118118
suspend fun hidePinnedMessage(credentials: String, url: String): GenericOverall
119+
120+
suspend fun markChatAsUnread(credentials: String, url: String): GenericOverall
119121
}

app/src/main/java/com/nextcloud/talk/chat/data/network/OfflineFirstChatRepository.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -954,6 +954,16 @@ class OfflineFirstChatRepository @Inject constructor(
954954
}
955955
}
956956

957+
override suspend fun markChatAsUnread(credentials: String, url: String): Flow<Boolean> =
958+
flow {
959+
runCatching {
960+
network.markChatAsUnread(credentials, url)
961+
emit(true)
962+
}.getOrElse { throwable ->
963+
Log.e(TAG, "Error in markChatAsUnread: $throwable")
964+
}
965+
}
966+
957967
override suspend fun onSignalingChatMessageReceived(chatMessages: List<ChatMessageJson>) {
958968
persistChatMessagesAndHandleSystemMessages(chatMessages, emitOnIncoming = true)
959969

app/src/main/java/com/nextcloud/talk/chat/data/network/RetrofitChatNetwork.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,4 +285,7 @@ class RetrofitChatNetwork(private val ncApi: NcApi, private val ncApiCoroutines:
285285

286286
override suspend fun hidePinnedMessage(credentials: String, url: String): GenericOverall =
287287
ncApiCoroutines.hidePinnedMessage(credentials, url)
288+
289+
override suspend fun markChatAsUnread(credentials: String, url: String): GenericOverall =
290+
ncApiCoroutines.markRoomAsUnread(credentials, url)
288291
}

app/src/main/java/com/nextcloud/talk/chat/viewmodels/ChatViewModel.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1756,6 +1756,12 @@ class ChatViewModel @AssistedInject constructor(
17561756
}
17571757
}
17581758

1759+
fun markChatAsUnread(credentials: String, url: String) {
1760+
viewModelScope.launch {
1761+
chatRepository.markChatAsUnread(credentials, url).collect {}
1762+
}
1763+
}
1764+
17591765
fun refreshRoom() {
17601766
viewModelScope.launch {
17611767
getRoom(chatRoomToken)

app/src/main/java/com/nextcloud/talk/ui/dialog/MessageActionsDialog.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ class MessageActionsDialog(
175175
canPin
176176
)
177177
initMenuMarkAsUnread(
178-
message.previousMessageId > NO_PREVIOUS_MESSAGE_ID &&
178+
hasSpreedFeatureCapability(spreedCapabilities, SpreedFeatures.CHAT_READ_MARKER) &&
179179
ChatMessage.MessageType.SYSTEM_MESSAGE != message.getCalculateMessageType() &&
180180
isOnline
181181
)
@@ -638,7 +638,6 @@ class MessageActionsDialog(
638638
companion object {
639639
private val TAG = MessageActionsDialog::class.java.simpleName
640640
private const val ACTOR_LENGTH = 6
641-
private const val NO_PREVIOUS_MESSAGE_ID: Int = -1
642641
private const val DELAY: Long = 200
643642
private const val AGE_THRESHOLD_FOR_EDIT_MESSAGE: Long = 86400000
644643
private const val ACTOR_BOTS = "bots"

0 commit comments

Comments
 (0)