mirror of
https://github.com/wahyd4/Yep.git
synced 2026-08-18 17:25:59 +10:00
add countOfUnreadMessagesInRealm; logic of show red dot on tabBarItem to indicating have unread messages
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user