Improve train status formatting

This change adds proper singular/plural labels for minutes and hours in the lateness display, fixes green status text contrast for dark mode, and updates the README to credit the Amtrak.js models used as a base.
This commit is contained in:
Tony Bark 2026-08-24 20:07:11 -04:00
parent bf420b7480
commit 79176585b4
4 changed files with 16 additions and 5 deletions

View file

@ -38,7 +38,7 @@ This was intended to solve a rather awkward dilemma. I turned a bunch of online
So I created simple frontend that mapped to Dixieland Software's API using Tauri. You could type in simple station code and it'd take you their status board from within the app. Simple, right? Unfortunately, I didn't know how to get it go back to change the station, my attempted UI redesigns kept failing, and I accidentally botched a migration to Tauri 2.0. I'm just not that good with Node. So I created simple frontend that mapped to Dixieland Software's API using Tauri. You could type in simple station code and it'd take you their status board from within the app. Simple, right? Unfortunately, I didn't know how to get it go back to change the station, my attempted UI redesigns kept failing, and I accidentally botched a migration to Tauri 2.0. I'm just not that good with Node.
So it sat abandoned until I discovered [SwiftCrossUI](https://github.com/moreSwift/swift-cross-ui). Now it directly makes use of [Amtraker](https://amtraker.com/)'s API. So it sat abandoned until I discovered [SwiftCrossUI](https://github.com/moreSwift/swift-cross-ui). Now it directly makes use of [Amtraker](https://amtraker.com/)'s API, based on models ported from [Amtrak.js](https://github.com/piemadd/amtrak).
## ⚖️ License ## ⚖️ License

View file

@ -103,7 +103,7 @@ struct ContentView: View {
func statusColour(_ color: Color) -> Color { func statusColour(_ color: Color) -> Color {
switch color { switch color {
case .green: case .green:
return .black return .adaptive(light: .white, dark: .black)
default: default:
return .white return .white
} }

View file

@ -0,0 +1,7 @@
import Foundation
extension Int {
func pluralized(singular: String, plural: String) -> String {
self == 1 ? singular : plural
}
}

View file

@ -33,13 +33,17 @@ enum TrainLateness {
} }
} }
static func formatted(_ minutes: Int) -> String { static func formatted(_ minutes: Int) -> String {
let hours = minutes / 60 let hours = minutes / 60
let remainder = minutes % 60 let remainder = minutes % 60
let minutesPart = "\(minutes) \(minutes.pluralized(singular: "min", plural: "mins"))"
let hoursPart = "\(hours) \(hours.pluralized(singular: "hr", plural: "hrs"))"
guard hours > 0 else { guard hours > 0 else {
return "\(minutes) mins" return minutesPart
} }
return "\(hours) hrs"
return hoursPart
} }
} }