Selaa lähdekoodia

Convert Color type to Hexstring because it cannot be sent to watchmanager

polscm32 aka Marvout 1 vuosi sitten
vanhempi
commit
558a2656b0

+ 16 - 0
Trio Watch App Extension/Helper/Helper+Extensions.swift

@@ -14,3 +14,19 @@ extension Color {
     static let bgDarkBlue = Color("Background_DarkBlue")
     static let bgDarkerDarkBlue = Color("Background_DarkerDarkBlue")
 }
+
+extension String {
+    func toColor() -> Color {
+        var hexString = trimmingCharacters(in: .whitespacesAndNewlines)
+        hexString = hexString.replacingOccurrences(of: "#", with: "")
+
+        var rgb: UInt64 = 0
+        Scanner(string: hexString).scanHexInt64(&rgb)
+
+        let red = Double((rgb & 0xFF0000) >> 16) / 255.0
+        let green = Double((rgb & 0x00FF00) >> 8) / 255.0
+        let blue = Double(rgb & 0x0000FF) / 255.0
+
+        return Color(red: red, green: green, blue: blue)
+    }
+}

+ 6 - 2
Trio Watch App Extension/WatchState.swift

@@ -319,10 +319,14 @@ import WatchConnectivity
                 self.glucoseValues = glucoseData.compactMap { data in
                     guard let glucose = data["glucose"] as? Double,
                           let timestamp = data["date"] as? TimeInterval,
-                          let color = data["color"] as? Color
+                          let colorString = data["color"] as? String
                     else { return nil }
 
-                    return (Date(timeIntervalSince1970: timestamp), glucose, color)
+                    return (
+                        Date(timeIntervalSince1970: timestamp),
+                        glucose,
+                        colorString.toColor() // Convert colorString to Color
+                    )
                 }
                 .sorted { $0.date < $1.date }
             }

+ 0 - 0
Trio/Sources/Extensions/Color+Extensions.swift


+ 21 - 6
Trio/Sources/Models/GlucoseColorScheme.swift

@@ -1,10 +1,6 @@
-//
-//  GlucoseColorScheme.swift
-//  Trio
-//
-//  Created by Cengiz Deniz on 27.09.24.
-//
 import Foundation
+import SwiftUI
+import UIKit
 
 public enum GlucoseColorScheme: String, JSON, CaseIterable, Identifiable, Codable, Hashable {
     public var id: String { rawValue }
@@ -20,3 +16,22 @@ public enum GlucoseColorScheme: String, JSON, CaseIterable, Identifiable, Codabl
         }
     }
 }
+
+extension Color {
+    func toHexString() -> String {
+        let uiColor = UIColor(self)
+        var red: CGFloat = 0
+        var green: CGFloat = 0
+        var blue: CGFloat = 0
+        var alpha: CGFloat = 0
+
+        uiColor.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
+
+        return String(
+            format: "#%02X%02X%02X",
+            Int(red * 255),
+            Int(green * 255),
+            Int(blue * 255)
+        )
+    }
+}

+ 1 - 1
Trio/Sources/Models/WatchState.swift

@@ -5,7 +5,7 @@ struct WatchState: Hashable, Equatable, Sendable {
     var currentGlucose: String?
     var trend: String?
     var delta: String?
-    var glucoseValues: [(date: Date, glucose: Double, color: Color)] = []
+    var glucoseValues: [(date: Date, glucose: Double, color: String)] = []
     var units: GlucoseUnits = .mgdL
     var iob: String?
     var cob: String?

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

@@ -218,7 +218,9 @@ final class BaseWatchManager: NSObject, WCSessionDelegate, Injectable, WatchMana
                     glucoseColorScheme: self.glucoseColorScheme
                 )
 
-                return (date: glucose.date ?? Date(), glucose: glucoseValue, color: glucoseColor)
+                let colorString = glucoseColor.toHexString()
+
+                return (date: glucose.date ?? Date(), glucose: glucoseValue, color: colorString)
             }
             .sorted { $0.date < $1.date }