add countOfUnreadMessagesInRealm; logic of show red dot on tabBarItem to indicating have unread messages

This commit is contained in:
nixzhu
2015-05-22 22:44:32 +08:00
parent 2cf6b7cd24
commit eb25c138b0
3 changed files with 36 additions and 11 deletions
+5
View File
@@ -259,6 +259,11 @@ func groupWithGroupID(groupID: String, inRealm realm: Realm) -> Group? {
return realm.objects(Group).filter(predicate).first
}
func countOfUnreadMessagesInRealm(realm: Realm) -> Int {
let predicate = NSPredicate(format: "readed = false AND fromFriend.friendState != %d", UserFriendState.Me.rawValue)
return realm.objects(Message).filter(predicate).count
}
func messageWithMessageID(messageID: String, inRealm realm: Realm) -> Message? {
if messageID.isEmpty {
return nil
@@ -1147,16 +1147,19 @@ extension ConversationViewController: UICollectionViewDataSource, UICollectionVi
// TODO: mark as read mark as read
downloadAttachmentOfMessage(message)
markAsReadMessage(message, failureHandler: nil) { success in
dispatch_async(dispatch_get_main_queue()) {
let realm = Realm()
if let message = messageWithMessageID(message.messageID, inRealm: realm) {
realm.write {
message.readed = true
}
//
if navigationController?.topViewController == self {
markAsReadMessage(message, failureHandler: nil) { success in
dispatch_async(dispatch_get_main_queue()) {
let realm = Realm()
println("\(message.messageID) mark as read")
if let message = messageWithMessageID(message.messageID, inRealm: realm) {
realm.write {
message.readed = true
}
println("\(message.messageID) mark as read")
}
}
}
}
@@ -17,6 +17,22 @@ class ConversationsViewController: UIViewController {
var realm: Realm!
var unreadMessagesToken: NotificationToken?
var haveUnreadMessages = false {
didSet {
if haveUnreadMessages != oldValue {
if haveUnreadMessages {
navigationController?.tabBarItem.image = UIImage(named: "icon_chat_unread")
navigationController?.tabBarItem.selectedImage = UIImage(named: "icon_chat_active_unread")
} else {
navigationController?.tabBarItem.image = UIImage(named: "icon_chat")
navigationController?.tabBarItem.selectedImage = UIImage(named: "icon_chat_active")
}
}
}
}
lazy var conversations: Results<Conversation> = {
return self.realm.objects(Conversation).sorted("updatedAt", ascending: false)
}()
@@ -47,8 +63,9 @@ class ConversationsViewController: UIViewController {
conversationsTableView.registerNib(UINib(nibName: cellIdentifier, bundle: nil), forCellReuseIdentifier: cellIdentifier)
conversationsTableView.rowHeight = 80
navigationController?.tabBarItem.image = UIImage(named: "icon_chat_unread")
navigationController?.tabBarItem.selectedImage = UIImage(named: "icon_chat_active_unread")
unreadMessagesToken = realm.addNotificationBlock { notification, realm in
self.haveUnreadMessages = countOfUnreadMessagesInRealm(realm) > 0
}
}
override func viewDidAppear(animated: Bool) {