From 486b8cff2e8f450749cf62b61235b37cdc2eed53 Mon Sep 17 00:00:00 2001 From: FuelBoard Contributor Date: Sun, 30 Aug 2026 23:35:59 +0100 Subject: [PATCH] Fix watch fuel icons and snapshot sync --- FuelBoard/WatchSyncManager.swift | 12 +++++++++--- FuelBoardWatch Watch App/ContentView.swift | 19 ++++++++----------- .../WatchSyncManager.swift | 17 +++++++++++++++++ 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/FuelBoard/WatchSyncManager.swift b/FuelBoard/WatchSyncManager.swift index 8f4db71..596b9d2 100644 --- a/FuelBoard/WatchSyncManager.swift +++ b/FuelBoard/WatchSyncManager.swift @@ -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) diff --git a/FuelBoardWatch Watch App/ContentView.swift b/FuelBoardWatch Watch App/ContentView.swift index a1fd13f..c75de3d 100644 --- a/FuelBoardWatch Watch App/ContentView.swift +++ b/FuelBoardWatch Watch App/ContentView.swift @@ -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() } diff --git a/FuelBoardWatch Watch App/WatchSyncManager.swift b/FuelBoardWatch Watch App/WatchSyncManager.swift index 113813b..eb205da 100644 --- a/FuelBoardWatch Watch App/WatchSyncManager.swift +++ b/FuelBoardWatch Watch App/WatchSyncManager.swift @@ -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() } }