Explorar o código

update unread messages badge count on every incoming new message and on leaving a chat view (#344)

cyberta %!s(int64=5) %!d(string=hai) anos
pai
achega
30a4dbea33

+ 2 - 3
deltachat-ios/Controller/ChatViewController.swift

@@ -159,9 +159,8 @@ class ChatViewController: MessagesViewController {
         // the navigationController will be used when chatDetail is pushed, so we have to remove that gestureRecognizer
         navigationController?.navigationBar.removeGestureRecognizer(navBarTap)
 
-        let cnt = Int(dc_get_fresh_msg_cnt(mailboxPointer, UInt32(chatId)))
-        logger.info("updating count for chat \(cnt)")
-        UIApplication.shared.applicationIconBadgeNumber = cnt
+        let array = DcArray(arrayPointer: dc_get_fresh_msgs(mailboxPointer))
+        UIApplication.shared.applicationIconBadgeNumber = array.count
     }
 
     override func viewDidDisappear(_ animated: Bool) {

+ 14 - 0
deltachat-ios/DC/Wrapper.swift

@@ -463,6 +463,20 @@ class DcChat {
         }()
 }
 
+class DcArray {
+    private var dcArrayPointer: OpaquePointer?
+
+    init(arrayPointer: OpaquePointer) {
+        dcArrayPointer = arrayPointer
+    }
+
+    var count: Int {
+       return Int(dc_array_get_cnt(dcArrayPointer))
+    }
+
+    ///TODO: add missing methods here
+}
+
 class DcMsg: MessageType {
     private var messagePointer: OpaquePointer?
 

+ 3 - 1
deltachat-ios/DC/events.swift

@@ -105,7 +105,6 @@ public func callbackSwift(event: CInt, data1: CUnsignedLong, data2: CUnsignedLon
             let msg = DcMsg(id: Int(data2))
             content.title = msg.fromContact.displayName
             content.body = msg.summary(chars: 40) ?? ""
-            content.badge = 1
             content.userInfo = userInfo
             content.sound = .default
 
@@ -114,6 +113,9 @@ public func callbackSwift(event: CInt, data1: CUnsignedLong, data2: CUnsignedLon
             let request = UNNotificationRequest(identifier: Constants.notificationIdentifier, content: content, trigger: trigger)
             UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
             logger.info("notifications: added \(content)")
+
+            let array = DcArray(arrayPointer: dc_get_fresh_msgs(mailboxPointer))
+            UIApplication.shared.applicationIconBadgeNumber = array.count
         }
 
     case DC_EVENT_SMTP_MESSAGE_SENT: