Explorar o código

mark messages seen in chat view for all visible messages after scrolling finished

cyberta %!s(int64=4) %!d(string=hai) anos
pai
achega
417c029259
Modificáronse 1 ficheiros con 27 adicións e 0 borrados
  1. 27 0
      deltachat-ios/Chat/ChatViewControllerNew.swift

+ 27 - 0
deltachat-ios/Chat/ChatViewControllerNew.swift

@@ -351,6 +351,33 @@ class ChatViewControllerNew: UITableViewController {
         return cell
         return cell
     }
     }
 
 
+    public override func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
+        if !decelerate {
+            markSeenMessagesInVisibleArea()
+        }
+    }
+
+    public override func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {
+        markSeenMessagesInVisibleArea()
+    }
+
+    func markSeenMessagesInVisibleArea() {
+        if let indexPaths = tableView.indexPathsForVisibleRows {
+            let messages = indexPaths.map { DcMsg(id: messageIds[$0.row]) }
+            var markSeenMessageIds: [UInt32] = []
+            for message in messages {
+                if message.state != DC_STATE_IN_SEEN &&
+                    dcContext.getChat(chatId: chatId).canSend &&
+                    !message.isFromCurrentSender {
+                    markSeenMessageIds.append(UInt32(message.id))
+                }
+            }
+            if !markSeenMessageIds.isEmpty {
+                dcContext.markSeenMessages(messageIds: markSeenMessageIds)
+            }
+        }
+    }
+
     override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
     override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
         let messageId = messageIds[indexPath.row]
         let messageId = messageIds[indexPath.row]
         let message = DcMsg(id: messageId)
         let message = DcMsg(id: messageId)