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