mirror of
https://github.com/tonytins/amtkstat.git
synced 2026-10-24 05:32:54 -04:00
Removed on time column for now
- Added origin and destination columns
This commit is contained in:
parent
f0b71b3762
commit
6f8cca9dc9
3 changed files with 38 additions and 17 deletions
|
|
@ -36,7 +36,10 @@ struct AmtrakClient {
|
||||||
}
|
}
|
||||||
|
|
||||||
func trainNumber(fromTrainId trainId: String) -> String {
|
func trainNumber(fromTrainId trainId: String) -> String {
|
||||||
trainId.split(separator: "-").first.map(String.init) ?? trainId
|
trainId
|
||||||
|
.split(separator: "-")
|
||||||
|
.first
|
||||||
|
.map(String.init) ?? trainId
|
||||||
}
|
}
|
||||||
|
|
||||||
func fetchStationTrainNumbers(stationCode code: String) async throws -> [String] {
|
func fetchStationTrainNumbers(stationCode code: String) async throws -> [String] {
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,17 @@
|
||||||
import SwiftCrossUI
|
import SwiftCrossUI
|
||||||
|
|
||||||
|
extension Train {
|
||||||
|
var displayNumber: String {
|
||||||
|
let parts = trainID.split(separator: "-", maxSplits: 1)
|
||||||
|
|
||||||
|
guard parts.count <= 2 else {
|
||||||
|
return trainNum
|
||||||
|
}
|
||||||
|
|
||||||
|
return "\(trainNum) (\(parts[1]))"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct ContentView: View {
|
struct ContentView: View {
|
||||||
@State var client = AmtrakClient()
|
@State var client = AmtrakClient()
|
||||||
|
|
||||||
|
|
@ -46,8 +58,9 @@ struct ContentView: View {
|
||||||
Table(rows) {
|
Table(rows) {
|
||||||
TableColumn("Number", value: \TrainStatusRow.trainNum)
|
TableColumn("Number", value: \TrainStatusRow.trainNum)
|
||||||
TableColumn("Route", value: \TrainStatusRow.routeName)
|
TableColumn("Route", value: \TrainStatusRow.routeName)
|
||||||
TableColumn("On Time", value: \TrainStatusRow.onTime)
|
|
||||||
TableColumn("Platform", value: \TrainStatusRow.platform)
|
TableColumn("Platform", value: \TrainStatusRow.platform)
|
||||||
|
TableColumn("Origin", value: \TrainStatusRow.origin)
|
||||||
|
TableColumn("Destination", value: \TrainStatusRow.destination)
|
||||||
|
|
||||||
}.overlay(alignment: .bottomTrailing) {
|
}.overlay(alignment: .bottomTrailing) {
|
||||||
if isLoading {
|
if isLoading {
|
||||||
|
|
@ -62,8 +75,8 @@ struct ContentView: View {
|
||||||
Text(errorMessage)
|
Text(errorMessage)
|
||||||
}
|
}
|
||||||
}.padding(10)
|
}.padding(10)
|
||||||
|
}
|
||||||
}.frame(idealWidth: 500)
|
.frame(idealWidth: 500)
|
||||||
.onAppear {
|
.onAppear {
|
||||||
Task {
|
Task {
|
||||||
await loadTrainStatus(forStationCode: normalizedStationCode)
|
await loadTrainStatus(forStationCode: normalizedStationCode)
|
||||||
|
|
@ -104,18 +117,22 @@ struct ContentView: View {
|
||||||
where: { $0.code == code
|
where: { $0.code == code
|
||||||
},
|
},
|
||||||
)?.platform
|
)?.platform
|
||||||
|
|
||||||
newRows.append(TrainStatusRow(
|
newRows.append(TrainStatusRow(
|
||||||
trainID: train.trainID,
|
trainID: train.trainID,
|
||||||
trainNum: train.trainNum,
|
trainNum: train.displayNumber,
|
||||||
routeName: train.routeName,
|
routeName: train.routeName,
|
||||||
onTime: train.trainTimely.isEmpty ? "" : train.trainTimely,
|
origin: train.origName,
|
||||||
|
destination: train.destName,
|
||||||
platform: (
|
platform: (
|
||||||
platform?.isEmpty == false,
|
platform?.isEmpty == false,
|
||||||
) ? platform! : "",
|
) ? platform! : "",
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rows = newRows
|
rows = newRows
|
||||||
|
|
||||||
} catch let AmtrakError.stationNotFound(code) {
|
} catch let AmtrakError.stationNotFound(code) {
|
||||||
errorMessage = "Station \(code) not found"
|
errorMessage = "Station \(code) not found"
|
||||||
rows = []
|
rows = []
|
||||||
|
|
|
||||||
|
|
@ -12,11 +12,11 @@ struct Station: Codable {
|
||||||
struct Train: Codable {
|
struct Train: Codable {
|
||||||
var routeName: String
|
var routeName: String
|
||||||
var trainNum: String
|
var trainNum: String
|
||||||
var trainNumRaw: String
|
var trainNumRaw: String?
|
||||||
var trainID: String
|
var trainID: String
|
||||||
var lat: Double
|
var lat: Double?
|
||||||
var lon: Double
|
var lon: Double?
|
||||||
var trainTimely: String
|
var trainTimely: String?
|
||||||
var iconColor: String?
|
var iconColor: String?
|
||||||
var textColor: String?
|
var textColor: String?
|
||||||
var heading: String?
|
var heading: String?
|
||||||
|
|
@ -24,9 +24,9 @@ struct Train: Codable {
|
||||||
var eventTZ: String?
|
var eventTZ: String?
|
||||||
var eventName: String?
|
var eventName: String?
|
||||||
var origCode: String?
|
var origCode: String?
|
||||||
var origName: String?
|
var origName: String
|
||||||
var destCode: String?
|
var destCode: String?
|
||||||
var destName: String?
|
var destName: String
|
||||||
var trainState: String?
|
var trainState: String?
|
||||||
var velocity: Double?
|
var velocity: Double?
|
||||||
var statusMsg: String?
|
var statusMsg: String?
|
||||||
|
|
@ -73,6 +73,7 @@ struct TrainStatusRow: Identifiable {
|
||||||
var trainID: String
|
var trainID: String
|
||||||
var trainNum: String
|
var trainNum: String
|
||||||
var routeName: String
|
var routeName: String
|
||||||
var onTime: String
|
var origin: String
|
||||||
|
var destination: String
|
||||||
var platform: String
|
var platform: String
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue