From 6f8cca9dc9374ed870ee86bb24bb1bcfd65414e2 Mon Sep 17 00:00:00 2001 From: Tony Bark <35226681+tonytins@users.noreply.github.com> Date: Sun, 23 Aug 2026 07:12:40 -0400 Subject: [PATCH] Removed on time column for now - Added origin and destination columns --- Sources/AmtrakStatus/AmtrakClient.swift | 5 +++- Sources/AmtrakStatus/ContentView.swift | 35 ++++++++++++++++++------- Sources/AmtrakStatus/Models.swift | 15 ++++++----- 3 files changed, 38 insertions(+), 17 deletions(-) diff --git a/Sources/AmtrakStatus/AmtrakClient.swift b/Sources/AmtrakStatus/AmtrakClient.swift index 93cef6a..3430066 100644 --- a/Sources/AmtrakStatus/AmtrakClient.swift +++ b/Sources/AmtrakStatus/AmtrakClient.swift @@ -36,7 +36,10 @@ struct AmtrakClient { } 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] { diff --git a/Sources/AmtrakStatus/ContentView.swift b/Sources/AmtrakStatus/ContentView.swift index 8701bb3..01a165f 100644 --- a/Sources/AmtrakStatus/ContentView.swift +++ b/Sources/AmtrakStatus/ContentView.swift @@ -1,5 +1,17 @@ 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 { @State var client = AmtrakClient() @@ -46,8 +58,9 @@ struct ContentView: View { Table(rows) { TableColumn("Number", value: \TrainStatusRow.trainNum) TableColumn("Route", value: \TrainStatusRow.routeName) - TableColumn("On Time", value: \TrainStatusRow.onTime) TableColumn("Platform", value: \TrainStatusRow.platform) + TableColumn("Origin", value: \TrainStatusRow.origin) + TableColumn("Destination", value: \TrainStatusRow.destination) }.overlay(alignment: .bottomTrailing) { if isLoading { @@ -62,13 +75,13 @@ struct ContentView: View { Text(errorMessage) } }.padding(10) - - }.frame(idealWidth: 500) - .onAppear { - Task { - await loadTrainStatus(forStationCode: normalizedStationCode) - } + } + .frame(idealWidth: 500) + .onAppear { + Task { + await loadTrainStatus(forStationCode: normalizedStationCode) } + } } var normalizedStationCode: String { @@ -104,18 +117,22 @@ struct ContentView: View { where: { $0.code == code }, )?.platform + newRows.append(TrainStatusRow( trainID: train.trainID, - trainNum: train.trainNum, + trainNum: train.displayNumber, routeName: train.routeName, - onTime: train.trainTimely.isEmpty ? "" : train.trainTimely, + origin: train.origName, + destination: train.destName, platform: ( platform?.isEmpty == false, ) ? platform! : "", )) } } + rows = newRows + } catch let AmtrakError.stationNotFound(code) { errorMessage = "Station \(code) not found" rows = [] diff --git a/Sources/AmtrakStatus/Models.swift b/Sources/AmtrakStatus/Models.swift index bc86c84..29effcb 100644 --- a/Sources/AmtrakStatus/Models.swift +++ b/Sources/AmtrakStatus/Models.swift @@ -12,11 +12,11 @@ struct Station: Codable { struct Train: Codable { var routeName: String var trainNum: String - var trainNumRaw: String + var trainNumRaw: String? var trainID: String - var lat: Double - var lon: Double - var trainTimely: String + var lat: Double? + var lon: Double? + var trainTimely: String? var iconColor: String? var textColor: String? var heading: String? @@ -24,9 +24,9 @@ struct Train: Codable { var eventTZ: String? var eventName: String? var origCode: String? - var origName: String? + var origName: String var destCode: String? - var destName: String? + var destName: String var trainState: String? var velocity: Double? var statusMsg: String? @@ -73,6 +73,7 @@ struct TrainStatusRow: Identifiable { var trainID: String var trainNum: String var routeName: String - var onTime: String + var origin: String + var destination: String var platform: String }