Преглед на файлове

Fix 'glitching' bolus progress bar when userInfo queue is handled after the fact WIP

Deniz Cengiz преди 1 година
родител
ревизия
a976a6ba70

+ 46 - 17
Trio Watch App Extension/WatchState.swift

@@ -203,21 +203,34 @@ import WatchConnectivity
 
 
                     // Handle bolus progress updates
                     // Handle bolus progress updates
         } else if
         } else if
+            let timestamp = message[WatchMessageKeys.bolusProgressTimestamp] as? TimeInterval,
             let progress = message[WatchMessageKeys.bolusProgress] as? Double,
             let progress = message[WatchMessageKeys.bolusProgress] as? Double,
             let activeBolusAmount = message[WatchMessageKeys.activeBolusAmount] as? Double,
             let activeBolusAmount = message[WatchMessageKeys.activeBolusAmount] as? Double,
             let deliveredAmount = message[WatchMessageKeys.deliveredAmount] as? Double
             let deliveredAmount = message[WatchMessageKeys.deliveredAmount] as? Double
         {
         {
-            DispatchQueue.main.async {
-                if !self.isBolusCanceled {
-                    self.bolusProgress = progress
+            let date = Date(timeIntervalSince1970: timestamp)
 
 
-                    // we only need to grab the active bolus amount from the phone if it is a phone-invoked bolus
-                    // when it comes from the watch, we already have it stored and available
-                    if self.activeBolusAmount == 0 {
-                        self.activeBolusAmount = activeBolusAmount
-                    }
+            // Check if it's not older than 5 min
+            if date >= Date().addingTimeInterval(-5 * 60) {
+                print("⌚️ Handling bolusProgress (sent at \(date))")
+                DispatchQueue.main.async {
+                    if !self.isBolusCanceled {
+                        self.bolusProgress = progress
+
+                        // we only need to grab the active bolus amount from the phone if it is a phone-invoked bolus
+                        // when it comes from the watch, we already have it stored and available
+                        if self.activeBolusAmount == 0 {
+                            self.activeBolusAmount = activeBolusAmount
+                        }
 
 
-                    self.deliveredAmount = deliveredAmount
+                        self.deliveredAmount = deliveredAmount
+                    }
+                }
+            } else {
+                print("⌚️ Received outdated bolus progress (sent at \(date))")
+                DispatchQueue.main.async {
+                    self.bolusProgress = 0
+                    self.activeBolusAmount = 0
                 }
                 }
             }
             }
             return
             return
@@ -287,19 +300,35 @@ import WatchConnectivity
 
 
                     // Handle bolus progress updates
                     // Handle bolus progress updates
         } else if
         } else if
+            let timestamp = userInfo[WatchMessageKeys.bolusProgressTimestamp] as? TimeInterval,
             let progress = userInfo[WatchMessageKeys.bolusProgress] as? Double,
             let progress = userInfo[WatchMessageKeys.bolusProgress] as? Double,
-            let activeBolusAmount = userInfo[WatchMessageKeys.activeBolusAmount] as? Double
+            let activeBolusAmount = userInfo[WatchMessageKeys.activeBolusAmount] as? Double,
+            let deliveredAmount = userInfo[WatchMessageKeys.deliveredAmount] as? Double
         {
         {
-            DispatchQueue.main.async {
-                if !self.isBolusCanceled {
-                    self.bolusProgress = progress
+            let date = Date(timeIntervalSince1970: timestamp)
+
+            // Check if it's not older than 5 min
+            if date >= Date().addingTimeInterval(-5 * 60) {
+                print("⌚️ Handling bolusProgress (sent at \(date))")
+                DispatchQueue.main.async {
+                    if !self.isBolusCanceled {
+                        self.bolusProgress = progress
 
 
-                    // we only need to grab the active bolus amount from the phone if it is a phone-invoked bolus
-                    // when it comes from the watch, we already have it stored and available
-                    if self.activeBolusAmount == 0 {
-                        self.activeBolusAmount = activeBolusAmount
+                        // we only need to grab the active bolus amount from the phone if it is a phone-invoked bolus
+                        // when it comes from the watch, we already have it stored and available
+                        if self.activeBolusAmount == 0 {
+                            self.activeBolusAmount = activeBolusAmount
+                        }
+
+                        self.deliveredAmount = deliveredAmount
                     }
                     }
                 }
                 }
+            } else {
+                print("⌚️ Received outdated bolus progress (sent at \(date))")
+                DispatchQueue.main.async {
+                    self.bolusProgress = 0
+                    self.activeBolusAmount = 0
+                }
             }
             }
             return
             return
 
 

+ 1 - 0
Trio/Sources/Models/WatchMessageKeys.swift

@@ -14,6 +14,7 @@ enum WatchMessageKeys {
     static let bolusProgress = "bolusProgress"
     static let bolusProgress = "bolusProgress"
     static let activeBolusAmount = "activeBolusAmount"
     static let activeBolusAmount = "activeBolusAmount"
     static let deliveredAmount = "deliveredAmount"
     static let deliveredAmount = "deliveredAmount"
+    static let bolusProgressTimestamp = "bolusProgressTimestamp"
 
 
     // Recommendation Keys
     // Recommendation Keys
     static let requestBolusRecommendation = "requestBolusRecommendation"
     static let requestBolusRecommendation = "requestBolusRecommendation"

+ 1 - 0
Trio/Sources/Services/WatchManager/AppleWatchManager.swift

@@ -921,6 +921,7 @@ final class BaseWatchManager: NSObject, WCSessionDelegate, Injectable, WatchMana
         guard let session = session, let progress = progress, let pumpManager = apsManager.pumpManager else { return }
         guard let session = session, let progress = progress, let pumpManager = apsManager.pumpManager else { return }
 
 
         let message: [String: Any] = [
         let message: [String: Any] = [
+            WatchMessageKeys.bolusProgressTimestamp: Date().timeIntervalSince1970,
             WatchMessageKeys.bolusProgress: Double(truncating: progress as NSNumber),
             WatchMessageKeys.bolusProgress: Double(truncating: progress as NSNumber),
             WatchMessageKeys.activeBolusAmount: activeBolusAmount,
             WatchMessageKeys.activeBolusAmount: activeBolusAmount,
             WatchMessageKeys.deliveredAmount: pumpManager
             WatchMessageKeys.deliveredAmount: pumpManager