| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- import Foundation
- import WatchConnectivity
- // MARK: - Send Data to Phone
- extension WatchState {
- /// Sends a bolus insulin request to the paired iPhone
- /// - Parameters:
- /// - amount: The insulin amount to be delivered
- func sendBolusRequest(_ amount: Decimal) {
- guard let session = session, session.isReachable else { return }
- isBolusCanceled = false // Reset canceled state when starting new bolus
- activeBolusAmount = Double(truncating: amount as NSNumber) // Set active bolus amount
- let message: [String: Any] = [
- "bolus": amount
- ]
- session.sendMessage(message, replyHandler: nil) { error in
- print("Error sending bolus request: \(error.localizedDescription)")
- }
- // Display pending communication animation
- showCommsAnimation = true
- }
- /// Sends a carbohydrate entry request to the paired iPhone
- /// - Parameters:
- /// - amount: The amount of carbs in grams
- /// - date: The timestamp for the carb entry (defaults to current time)
- func sendCarbsRequest(_ amount: Int, _ date: Date = Date()) {
- guard let session = session, session.isReachable else { return }
- let message: [String: Any] = [
- "carbs": amount,
- "date": date.timeIntervalSince1970
- ]
- session.sendMessage(message, replyHandler: nil) { error in
- print("Error sending carbs request: \(error.localizedDescription)")
- }
- // Display pending communication animation
- showCommsAnimation = true
- }
- /// Sends a meal and bolus insulin combo request to the paired iPhone
- /// - Parameters:
- /// - amount: The insulin amount to be delivered
- /// - isExternal: Indicates if the bolus is from an external source
- func sendMealBolusComboRequest(carbsAmount _: Decimal, bolusAmount: Decimal, _ date: Date = Date()) {
- guard let session = session, session.isReachable else { return }
- let message: [String: Any] = [
- "bolus": bolusAmount,
- "carbs": bolusAmount,
- "date": date.timeIntervalSince1970
- ]
- session.sendMessage(message, replyHandler: nil) { error in
- print("Error sending meal bolus combo request: \(error.localizedDescription)")
- }
- // Display pending communication animation
- showCommsAnimation = true
- isMealBolusCombo = true
- }
- /// Sends a request to cancel the current override preset to the paired iPhone
- func sendCancelOverrideRequest() {
- guard let session = session, session.isReachable else { return }
- let message: [String: Any] = [
- "cancelOverride": true
- ]
- session.sendMessage(message, replyHandler: nil) { error in
- print("⌚️ Error sending cancel override request: \(error.localizedDescription)")
- }
- // Display pending communication animation
- showCommsAnimation = true
- }
- /// Sends a request to activate an override preset to the paired iPhone
- /// - Parameter presetName: The name of the override preset to activate
- func sendActivateOverrideRequest(presetName: String) {
- guard let session = session, session.isReachable else { return }
- let message: [String: Any] = [
- "activateOverride": presetName
- ]
- session.sendMessage(message, replyHandler: nil) { error in
- print("⌚️ Error sending activate override request: \(error.localizedDescription)")
- }
- // Display pending communication animation
- showCommsAnimation = true
- }
- /// Sends a request to cancel the current temporary target to the paired iPhone
- func sendCancelTempTargetRequest() {
- guard let session = session, session.isReachable else { return }
- let message: [String: Any] = [
- "cancelTempTarget": true
- ]
- session.sendMessage(message, replyHandler: nil) { error in
- print("⌚️ Error sending cancel temp target request: \(error.localizedDescription)")
- }
- // Display pending communication animation
- showCommsAnimation = true
- }
- /// Sends a request to activate a temporary target preset to the paired iPhone
- /// - Parameter presetName: The name of the temporary target preset to activate
- func sendActivateTempTargetRequest(presetName: String) {
- guard let session = session, session.isReachable else { return }
- let message: [String: Any] = [
- "activateTempTarget": presetName
- ]
- session.sendMessage(message, replyHandler: nil) { error in
- print("⌚️ Error sending activate temp target request: \(error.localizedDescription)")
- }
- // Display pending communication animation
- showCommsAnimation = true
- }
- /// Sends a request to cancel the current bolus delivery to the paired iPhone
- func sendCancelBolusRequest() {
- isBolusCanceled = true
- guard let session = session, session.isReachable else { return }
- let message: [String: Any] = [
- "cancelBolus": true
- ]
- session.sendMessage(message, replyHandler: nil) { error in
- print("Error sending cancel bolus request: \(error.localizedDescription)")
- }
- // Reset when cancelled
- bolusProgress = 0
- activeBolusAmount = 0
- // Display pending communication animation
- showCommsAnimation = true
- }
- /// Sends a request to calculate a bolus recommendation based on the current carbs amount
- func requestBolusRecommendation() {
- guard let session = session, session.isReachable else { return }
- let message: [String: Any] = [
- WatchMessageKeys.requestBolusRecommendation: true,
- WatchMessageKeys.carbs: carbsAmount
- ]
- session.sendMessage(message, replyHandler: nil) { error in
- print("Error requesting bolus recommendation: \(error.localizedDescription)")
- }
- if bolusAmount == 0 {
- showBolusCalculationProgress = true
- }
- }
- func requestWatchStateUpdate() {
- guard let session = session, session.activationState == .activated else {
- print("⌚️ Session not activated, activating...")
- session?.activate()
- return
- }
- if session.isReachable {
- print("⌚️ Request an update for watch state from Trio iPhone app...")
- let message = [WatchMessageKeys.requestWatchUpdate: WatchMessageKeys.watchState]
- session.sendMessage(message, replyHandler: nil) { error in
- print("⌚️ Update request for fresh watch state data: \(error.localizedDescription)")
- }
- } else {
- print("⌚️ Phone not reachable for watch state update")
- }
- }
- }
|