- MirrorFuelProvider: fetches CURRENT prices from raw.githubusercontent (latest.json pointer → history/<day>.json full dump), app-group day-cache so the ~2.8 MB dump is re-downloaded only when the mirror pushes a new day - LiveChainProvider: full path (app refresh) GitHub → relay; focused path (background alert checks) relay-first so alerts never pull the full dump over mobile data; records which leg served for About + telemetry - FuelBeacon: fire-and-forget X-Client app ping to the relay's existing widget-diag route (zero relay changes) — attribution + cadence on-LAN, silent skip off-LAN is the reachability datum; /stats app-hit spike = GitHub path failing - Bundled dump: FuelBoardDump dataset (real 2026-08-15 snapshot, 8,022 stations) + BundledDumpProvider + scripts/refresh_bundled_dump.sh — no-network last resort replaces the demo sample set - ContentView: About meta from the chain; catch falls back cached → bundled → sample - 89 tests (6 new: chain order x4, cache decision, beacon URL); Release build green; beacon route verified against the live relay (204 + logged)
19 lines
815 B
Swift
19 lines
815 B
Swift
// BundledDumpProvider.swift — no-network last resort (P0 live chain).
|
|
//
|
|
// A REAL snapshot of the mirror dump is bundled into the app (FuelBoardDump
|
|
// dataset, refreshed before builds by scripts/refresh_bundled_dump.sh) so the
|
|
// app never demos empty and App Review always sees real data even fully
|
|
// offline. Same relay envelope, so the shared decode applies unchanged.
|
|
|
|
import UIKit
|
|
|
|
enum BundledDumpProvider {
|
|
/// The bundled real snapshot, decoded with the shared relay decode —
|
|
/// nil only if the asset is missing or corrupt (callers then fall back
|
|
/// to the England-wide sample set).
|
|
static var stations: [FuelStation]? {
|
|
guard let asset = NSDataAsset(name: "FuelBoardDump") else { return nil }
|
|
return try? FuelPriceProvider.decodeStations(from: asset.data)
|
|
}
|
|
}
|