Эх сурвалжийг харах

calculate previous message id when possible

Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>
Andy Scherzinger 3 жил өмнө
parent
commit
58c0106ec7

+ 47 - 29
app/src/main/java/com/nextcloud/talk/controllers/ChatController.kt

@@ -2049,8 +2049,8 @@ class ChatController(args: Bundle) :
 
             var countGroupedMessages = 0
             if (!isFromTheFuture) {
-
-                for (i in chatMessageList.indices) {
+                var previousMessageId = NO_PREVIOUS_MESSAGE_ID
+                for (i in chatMessageList.indices.reversed()) {
                     if (chatMessageList.size > i + 1) {
                         if (TextUtils.isEmpty(chatMessageList[i].systemMessage) &&
                             TextUtils.isEmpty(chatMessageList[i + 1].systemMessage) &&
@@ -2069,6 +2069,12 @@ class ChatController(args: Bundle) :
                     chatMessage.isOneToOneConversation =
                         currentConversation?.type == Conversation.ConversationType.ROOM_TYPE_ONE_TO_ONE_CALL
                     chatMessage.activeUser = conversationUser
+
+                    if (previousMessageId > NO_PREVIOUS_MESSAGE_ID) {
+                        chatMessage.previousMessageId = previousMessageId
+                    }
+
+                    previousMessageId = chatMessage.jsonMessageId
                 }
 
                 if (adapter != null) {
@@ -2092,9 +2098,16 @@ class ChatController(args: Bundle) :
                 val isThereANewNotice =
                     shouldAddNewMessagesNotice || adapter?.getMessagePositionByIdInReverse("-1") != -1
 
-                for (i in chatMessageList.indices) {
+                var previousMessageId = -1
+                for (i in chatMessageList.indices.reversed()) {
                     chatMessage = chatMessageList[i]
 
+                    if (previousMessageId > NO_PREVIOUS_MESSAGE_ID) {
+                        chatMessage.previousMessageId = previousMessageId
+                    }
+
+                    previousMessageId = chatMessage.jsonMessageId
+
                     chatMessage.activeUser = conversationUser
 
                     val shouldScroll =
@@ -2321,34 +2334,36 @@ class ChatController(args: Bundle) :
                     }
                     R.id.action_mark_as_unread -> {
                         val chatMessage = message as ChatMessage?
-                        ncApi!!.setChatReadMarker(
-                            credentials,
-                            ApiUtils.getUrlForSetChatReadMarker(
-                                ApiUtils.getChatApiVersion(conversationUser, intArrayOf(ApiUtils.APIv1)),
-                                conversationUser?.baseUrl,
-                                roomToken
-                            ),
-                            chatMessage!!.jsonMessageId.minus(1)
-                        )
-                            .subscribeOn(Schedulers.io())
-                            .observeOn(AndroidSchedulers.mainThread())
-                            .subscribe(object : Observer<GenericOverall> {
-                                override fun onSubscribe(d: Disposable) {
-                                    // unused atm
-                                }
+                        if (chatMessage!!.previousMessageId > 0) {
+                            ncApi!!.setChatReadMarker(
+                                credentials,
+                                ApiUtils.getUrlForSetChatReadMarker(
+                                    ApiUtils.getChatApiVersion(conversationUser, intArrayOf(ApiUtils.APIv1)),
+                                    conversationUser?.baseUrl,
+                                    roomToken
+                                ),
+                                chatMessage.previousMessageId
+                            )
+                                .subscribeOn(Schedulers.io())
+                                .observeOn(AndroidSchedulers.mainThread())
+                                .subscribe(object : Observer<GenericOverall> {
+                                    override fun onSubscribe(d: Disposable) {
+                                        // unused atm
+                                    }
 
-                                override fun onNext(t: GenericOverall) {
-                                    // unused atm
-                                }
+                                    override fun onNext(t: GenericOverall) {
+                                        // unused atm
+                                    }
 
-                                override fun onError(e: Throwable) {
-                                    Log.e(TAG, e.message, e)
-                                }
+                                    override fun onError(e: Throwable) {
+                                        Log.e(TAG, e.message, e)
+                                    }
 
-                                override fun onComplete() {
-                                    // unused atm
-                                }
-                            })
+                                    override fun onComplete() {
+                                        // unused atm
+                                    }
+                                })
+                        }
                         true
                     }
                     R.id.action_forward_message -> {
@@ -2503,8 +2518,10 @@ class ChatController(args: Bundle) :
             menu.findItem(R.id.action_delete_message).isVisible = isShowMessageDeletionButton(message)
             menu.findItem(R.id.action_forward_message).isVisible =
                 ChatMessage.MessageType.REGULAR_TEXT_MESSAGE == message.getMessageType()
+            menu.findItem(R.id.action_mark_as_unread).isVisible = message.previousMessageId > -1 &&
+                ChatMessage.MessageType.SYSTEM_MESSAGE != message.getMessageType()
             if (menu.hasVisibleItems()) {
-                if (Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
+                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                     setForceShowIcon(true)
                 }
                 show()
@@ -2755,5 +2772,6 @@ class ChatController(args: Bundle) :
         private const val SEMI_TRANSPARENT_INT: Int = 99
         private const val VOICE_MESSAGE_SEEKBAR_BASE: Int = 1000
         private const val SECOND: Long = 1000
+        private const val NO_PREVIOUS_MESSAGE_ID: Int = -1
     }
 }

+ 2 - 0
app/src/main/java/com/nextcloud/talk/models/json/chat/ChatMessage.java

@@ -62,6 +62,8 @@ public class ChatMessage implements MessageContentType, MessageContentType.Image
     public boolean isDeleted;
     @JsonField(name = "id")
     public int jsonMessageId;
+    @JsonIgnore
+    public int previousMessageId = -1;
     @JsonField(name = "token")
     public String token;
     // guests or users