Fix watch fuel icons and snapshot sync
This commit is contained in:
@@ -90,14 +90,20 @@ final class WatchSyncManager: NSObject, WCSessionDelegate {
|
||||
}
|
||||
|
||||
nonisolated func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) {
|
||||
handleIncomingRefreshRequest(userInfo)
|
||||
handleIncomingMessage(userInfo)
|
||||
}
|
||||
|
||||
nonisolated func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
|
||||
handleIncomingRefreshRequest(message)
|
||||
handleIncomingMessage(message)
|
||||
}
|
||||
|
||||
private nonisolated func handleIncomingRefreshRequest(_ payload: [String: Any]) {
|
||||
private nonisolated func handleIncomingMessage(_ payload: [String: Any]) {
|
||||
if payload["fuelboard.snapshotRequest"] as? String != nil {
|
||||
Task { @MainActor in
|
||||
self.pushSnapshot()
|
||||
}
|
||||
}
|
||||
|
||||
guard let raw = payload[FuelStore.watchRefreshRequestKey] as? String,
|
||||
let timestamp = TimeInterval(raw) else { return }
|
||||
let date = Date(timeIntervalSince1970: timestamp)
|
||||
|
||||
@@ -26,19 +26,13 @@ private enum WatchFuelType: String, CaseIterable, Identifiable, Codable {
|
||||
|
||||
var color: Color {
|
||||
switch self {
|
||||
case .e10: return .green
|
||||
case .e5: return .yellow
|
||||
case .diesel: return .blue
|
||||
case .e10: return Color(red: 48/255.0, green: 209/255.0, blue: 88/255.0) // #30D158
|
||||
case .e5: return Color(red: 255/255.0, green: 214/255.0, blue: 10/255.0) // #FFD60A
|
||||
case .diesel: return Color(red: 100/255.0, green: 210/255.0, blue: 255/255.0) // #64D2FF
|
||||
}
|
||||
}
|
||||
|
||||
var symbol: String {
|
||||
switch self {
|
||||
case .e10: return "fuelpump.fill"
|
||||
case .e5: return "fuelpump.circle.fill"
|
||||
case .diesel: return "drop.fill"
|
||||
}
|
||||
}
|
||||
var symbol: String { "fuelpump.fill" }
|
||||
|
||||
var sortRank: Int {
|
||||
switch self {
|
||||
@@ -297,7 +291,10 @@ struct ContentView: View {
|
||||
}
|
||||
}
|
||||
.tabViewStyle(.verticalPage)
|
||||
.onAppear(perform: reloadFromCache)
|
||||
.onAppear {
|
||||
reloadFromCache()
|
||||
WatchSyncManager.shared.requestSnapshot()
|
||||
}
|
||||
.onReceive(NotificationCenter.default.publisher(for: .fuelBoardWatchDataDidUpdate)) { _ in
|
||||
reloadFromCache()
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ final class WatchSyncManager: NSObject, WCSessionDelegate {
|
||||
static let shared = WatchSyncManager()
|
||||
|
||||
private let suiteName = "group.com.apt.fuelboard"
|
||||
private let snapshotRequestKey = "fuelboard.snapshotRequest"
|
||||
|
||||
private override init() {
|
||||
super.init()
|
||||
@@ -36,6 +37,18 @@ final class WatchSyncManager: NSObject, WCSessionDelegate {
|
||||
}
|
||||
}
|
||||
|
||||
func requestSnapshot() {
|
||||
guard WCSession.isSupported() else { return }
|
||||
let payload = [snapshotRequestKey: String(Date().timeIntervalSince1970)]
|
||||
let session = WCSession.default
|
||||
|
||||
if session.isReachable {
|
||||
session.sendMessage(payload, replyHandler: nil, errorHandler: nil)
|
||||
} else {
|
||||
session.transferUserInfo(payload)
|
||||
}
|
||||
}
|
||||
|
||||
private func sharedDefaults() -> UserDefaults? {
|
||||
UserDefaults(suiteName: suiteName)
|
||||
}
|
||||
@@ -74,6 +87,10 @@ final class WatchSyncManager: NSObject, WCSessionDelegate {
|
||||
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: (any Error)?) {
|
||||
if let error {
|
||||
print("WATCH-SYNC activation failed: \(error.localizedDescription)")
|
||||
return
|
||||
}
|
||||
if activationState == .activated {
|
||||
requestSnapshot()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user