All fuel prices per station (E10/E5/Diesel from one fetch); re-fetch on fuel switch; fuel tabs populate instantly
This commit is contained in:
@@ -120,6 +120,11 @@ struct ContentView: View {
|
|||||||
Task { await refresh() }
|
Task { await refresh() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.onChange(of: selectedFuel) { _, _ in
|
||||||
|
// Re-fetch so the station set matches the selected fuel (relay
|
||||||
|
// filters by grade); all prices still come back in one response.
|
||||||
|
Task { await refresh() }
|
||||||
|
}
|
||||||
.onChange(of: alertsEnabled) { _, newValue in
|
.onChange(of: alertsEnabled) { _, newValue in
|
||||||
FuelStore.saveAlertsEnabled(newValue)
|
FuelStore.saveAlertsEnabled(newValue)
|
||||||
monitor.setEnabled(newValue)
|
monitor.setEnabled(newValue)
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ struct RelayFuelProvider: FuelPriceProviding {
|
|||||||
postcode: relay.postcode ?? "",
|
postcode: relay.postcode ?? "",
|
||||||
lat: relay.lat ?? 0,
|
lat: relay.lat ?? 0,
|
||||||
lng: relay.lng ?? 0,
|
lng: relay.lng ?? 0,
|
||||||
prices: [fuel: relay.price],
|
prices: relay.allPrices,
|
||||||
priceUpdated: nil
|
priceUpdated: nil
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -72,7 +72,29 @@ private struct RelayResponse: Codable {
|
|||||||
let postcode: String?
|
let postcode: String?
|
||||||
let lat: Double?
|
let lat: Double?
|
||||||
let lng: Double?
|
let lng: Double?
|
||||||
let price: Double
|
let price: Double?
|
||||||
|
let prices: [String: Double]?
|
||||||
|
|
||||||
|
/// Map relay grade keys (E5/E10/DIESEL) to FuelType for ALL fuels the
|
||||||
|
/// station sells — one fetch populates every fuel tab.
|
||||||
|
var allPrices: [FuelType: Double] {
|
||||||
|
var result: [FuelType: Double] = [:]
|
||||||
|
if let prices {
|
||||||
|
for (grade, value) in prices {
|
||||||
|
switch grade.uppercased() {
|
||||||
|
case "E10": result[.e10] = value
|
||||||
|
case "E5": result[.e5] = value
|
||||||
|
case "DIESEL", "B7", "B7S", "B7P", "B10": result[.diesel] = value
|
||||||
|
default: break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Backwards-compat: relay versions without `prices` still send `price`.
|
||||||
|
if result.isEmpty, let price {
|
||||||
|
result[.e10] = price
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
}
|
}
|
||||||
let stations: [RelayStation]
|
let stations: [RelayStation]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user