Fix watch fuel icons and snapshot sync

This commit is contained in:
FuelBoard Contributor
2026-08-30 23:35:59 +01:00
parent d40bcaeca0
commit 486b8cff2e
3 changed files with 34 additions and 14 deletions
+9 -3
View File
@@ -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 handleIncomingMessage(_ payload: [String: Any]) {
if payload["fuelboard.snapshotRequest"] as? String != nil {
Task { @MainActor in
self.pushSnapshot()
}
}
private nonisolated func handleIncomingRefreshRequest(_ payload: [String: Any]) {
guard let raw = payload[FuelStore.watchRefreshRequestKey] as? String,
let timestamp = TimeInterval(raw) else { return }
let date = Date(timeIntervalSince1970: timestamp)
+8 -11
View File
@@ -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()
}
}