From ec971643fcbe9a96f0ec5cbb370782fc53b56291 Mon Sep 17 00:00:00 2001 From: nixzhu Date: Tue, 20 Oct 2015 12:39:04 +0800 Subject: [PATCH] add batchMarkMessagesAsReaded use in Conversation --- .../ConversationViewController.swift | 106 +++++++++++++----- 1 file changed, 75 insertions(+), 31 deletions(-) diff --git a/Yep/ViewControllers/Conversation/ConversationViewController.swift b/Yep/ViewControllers/Conversation/ConversationViewController.swift index 6f982e58..e3786bf9 100644 --- a/Yep/ViewControllers/Conversation/ConversationViewController.swift +++ b/Yep/ViewControllers/Conversation/ConversationViewController.swift @@ -603,14 +603,31 @@ class ConversationViewController: BaseViewController { // 进来时就尽快标记已读 - conversation.messages.filter({ message in - if let fromFriend = message.fromFriend { - - return (message.readed == false) && (fromFriend.friendState != UserFriendState.Me.rawValue) - } else { - return false - } - }).forEach({ self.markMessageAsReaded($0) }) +// conversation.messages.filter({ message in +// if let fromFriend = message.fromFriend { +// +// return (message.readed == false) && (fromFriend.friendState != UserFriendState.Me.rawValue) +// } else { +// return false +// } +// }).forEach({ self.markMessageAsReaded($0) }) + + batchMarkMessagesAsReaded(needUpdateAllMessages: true) + +// if let _ = conversation.withFriend, recipient = conversation.recipient, latestMessage = messages.last { +// +// messages.forEach { message in +// if !message.readed { +// let _ = try? realm.write { +// message.readed = true +// } +// } +// } +// +// batchMarkAsReadOfMessagesToRecipient(recipient, beforeMessage: latestMessage, failureHandler: nil, completion: { +// println("batchMarkAsReadOfMessagesToRecipient OK") +// }) +// } // MARK: Notify Typing @@ -894,35 +911,60 @@ class ConversationViewController: BaseViewController { } } - private func markMessageAsReaded(message: Message) { +// private func markMessageAsReaded(message: Message) { +// +// if message.readed { +// return +// } +// +// // 防止未在此界面时被标记 +// +// if navigationController?.topViewController == self { +// +// let messageID = message.messageID +// +// dispatch_async(realmQueue) { +// guard let realm = try? Realm() else { +// return +// } +// +// if let message = messageWithMessageID(messageID, inRealm: realm) { +// let _ = try? realm.write { +// message.readed = true +// } +// +// markAsReadMessage(message, failureHandler: nil) { success in +// if success { +// println("appear Mark message \(messageID) as read") +// } +// } +// } +// } +// } +// } - if message.readed { - return - } + private func batchMarkMessagesAsReaded(needUpdateAllMessages needUpdateAllMessages: Bool = false) { - // 防止未在此界面时被标记 + if let _ = conversation.withFriend, recipient = conversation.recipient, latestMessage = messages.last { - if navigationController?.topViewController == self { - - let messageID = message.messageID - - dispatch_async(realmQueue) { - guard let realm = try? Realm() else { - return - } - - if let message = messageWithMessageID(messageID, inRealm: realm) { - let _ = try? realm.write { - message.readed = true - } - - markAsReadMessage(message, failureHandler: nil) { success in - if success { - println("appear Mark message \(messageID) as read") + if needUpdateAllMessages { + messages.forEach { message in + if !message.readed { + let _ = try? realm.write { + message.readed = true } } } + + } else { + let _ = try? realm.write { + latestMessage.readed = true + } } + + batchMarkAsReadOfMessagesToRecipient(recipient, beforeMessage: latestMessage, failureHandler: nil, completion: { + println("batchMarkAsReadOfMessagesToRecipient OK") + }) } } @@ -2425,7 +2467,9 @@ extension ConversationViewController: UICollectionViewDataSource, UICollectionVi if sender.friendState != UserFriendState.Me.rawValue { // from Friend - markMessageAsReaded(message) + if !message.readed { + batchMarkMessagesAsReaded() + } switch message.mediaType {