Refine trends and debug harness; clean up warnings
This commit is contained in:
@@ -222,15 +222,36 @@ struct ContentView: View {
|
||||
// opens the given tab; `-skipOnboarding` skips onboarding
|
||||
// without touching the stored flag.
|
||||
let args = ProcessInfo.processInfo.arguments
|
||||
#if DEBUG
|
||||
showWidgetMock = args.contains("-widgets")
|
||||
// `-seedFavourite <substring>` pins the first matching station
|
||||
// for Unleaded via the normal save path (keychain + app group)
|
||||
// so screenshot captures can show a populated Favourites tab.
|
||||
if let i = args.firstIndex(of: "-seedFavourite"), i + 1 < args.count {
|
||||
let query = args[i + 1]
|
||||
if let station = FuelStore.loadStations()
|
||||
.first(where: { $0.name.localizedCaseInsensitiveContains(query) }) {
|
||||
FuelStore.saveFavourites([FavouriteEntry(station: station, fuel: .e10)])
|
||||
// Repeatable: each occurrence adds another favourite (QA temp).
|
||||
// Optional ":fuel" suffix (e10|e5|diesel) picks the
|
||||
// fuel, so the fuel-aware Trends open can be verified (QA temp).
|
||||
let seedQueries = args.enumerated()
|
||||
.filter { $0.element == "-seedFavourite" }
|
||||
.compactMap { i, _ in
|
||||
i + 1 < args.count ? args[i + 1] : nil
|
||||
}
|
||||
if !seedQueries.isEmpty {
|
||||
let stations = FuelStore.loadStations()
|
||||
var favs = seedQueries.compactMap { query in
|
||||
let parts = query.split(separator: ":", maxSplits: 1)
|
||||
let name = String(parts[0])
|
||||
let fuel = parts.count > 1
|
||||
? FuelType(rawValue: String(parts[1])) ?? .e10
|
||||
: FuelType.e10
|
||||
return stations.first { $0.name.localizedCaseInsensitiveContains(name) }
|
||||
.map { FavouriteEntry(station: $0, fuel: fuel) }
|
||||
}
|
||||
if favs.isEmpty, let q = seedQueries.first,
|
||||
let s = stations.first(where: { $0.name.localizedCaseInsensitiveContains(q.split(separator: ":").first.map(String.init) ?? q) }) {
|
||||
favs = [FavouriteEntry(station: s, fuel: .e10)]
|
||||
}
|
||||
if !favs.isEmpty {
|
||||
FuelStore.saveFavourites(favs)
|
||||
}
|
||||
}
|
||||
if let i = args.firstIndex(of: "-tab"), i + 1 < args.count {
|
||||
@@ -241,6 +262,14 @@ struct ContentView: View {
|
||||
default: selectedTab = 0
|
||||
}
|
||||
}
|
||||
// QA temp: `-fuel <e10|e5|diesel>` sets the app-wide selected
|
||||
// fuel so the fuel-aware Trends open can be verified (simulates
|
||||
// the user having switched to the diesel tab).
|
||||
if let i = args.firstIndex(of: "-fuel"), i + 1 < args.count,
|
||||
let f = FuelType(rawValue: args[i + 1]) {
|
||||
selectedFuel = f
|
||||
FuelStore.saveSelectedFuel(f)
|
||||
}
|
||||
// `-forceOfflineDump` / `-forceConnectionProblem` simulate the two
|
||||
// failure legs for the screenshot harness. The auto-refresh below
|
||||
// is skipped so the banner stays up (a live fetch would clear it).
|
||||
@@ -254,6 +283,9 @@ struct ContentView: View {
|
||||
: FuelStore.loadStations()
|
||||
dataStatus = .connectionProblem
|
||||
}
|
||||
#else
|
||||
showWidgetMock = false
|
||||
#endif
|
||||
// Onboarding runs first on a fresh install — it owns the initial
|
||||
// permission prompts (location, notifications, and the data/local
|
||||
// network probe on the Data page). Location tracking and the first
|
||||
@@ -261,8 +293,13 @@ struct ContentView: View {
|
||||
// Launch-arg hook (UI-testing/screenshot harness, same pattern as
|
||||
// StationsView's `-showKeySheet`): skip onboarding without
|
||||
// touching the stored flag.
|
||||
#if DEBUG
|
||||
let shouldSkipOnboarding = args.contains("-skipOnboarding")
|
||||
#else
|
||||
let shouldSkipOnboarding = false
|
||||
#endif
|
||||
if FuelStore.loadHasCompletedOnboarding()
|
||||
|| args.contains("-skipOnboarding") {
|
||||
|| shouldSkipOnboarding {
|
||||
locationManager.startForegroundTracking()
|
||||
// Geofences must follow the user even in the background:
|
||||
// wire the delegate hook (fires on every fix incl. background
|
||||
@@ -284,7 +321,14 @@ struct ContentView: View {
|
||||
updateLiveActivity()
|
||||
// Refresh only when the cache is stale (twice-a-day policy).
|
||||
// Skipped under the force-* hooks so the banner stays up.
|
||||
if !args.contains("-forceOfflineDump") && !args.contains("-forceConnectionProblem") && !args.contains("-forceHistoryFailure") {
|
||||
#if DEBUG
|
||||
let shouldSkipInitialRefresh = args.contains("-forceOfflineDump")
|
||||
|| args.contains("-forceConnectionProblem")
|
||||
|| args.contains("-forceHistoryFailure")
|
||||
#else
|
||||
let shouldSkipInitialRefresh = false
|
||||
#endif
|
||||
if !shouldSkipInitialRefresh {
|
||||
Task { await refresh() }
|
||||
}
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user