big update

This commit is contained in:
15lu.akari
2025-08-26 23:37:39 +03:00
parent 6b88875bee
commit a87a3d12ab
34 changed files with 803 additions and 282 deletions

View File

@ -5,7 +5,7 @@ struct RouteView: View {
@State private var firstStationName: String = "Загрузка..."
@State private var lastStationName: String = "Загрузка..."
@State private var engStationsName: String = "Загрузка..."
@State private var stationsRangeName: String = "Загрузка..."
private var topBackgroundColor = Color(hex: 0xFCD500)
@ -42,7 +42,7 @@ struct RouteView: View {
foregroundColor: .white
)
MarqueeText(
text: engStationsName,
text: stationsRangeName,
font: .caption,
foregroundColor: .white.opacity(0.5)
)
@ -76,33 +76,72 @@ struct RouteView: View {
await fetchStations(forRoute: routeID)
}
}
.onChange(of: appState.selectedLanguage) { _ in
if let routeID = appState.selectedRoute?.id {
Task {
await fetchStations(forRoute: routeID)
}
}
}
}
// MARK: - Fetch Stations
private func fetchStations(forRoute routeID: Int) async {
firstStationName = "Загрузка..."
lastStationName = "Загрузка..."
engStationsName = "Loading..."
guard let url = URL(string: "https://white-nights.krbl.ru/services/content/route/\(routeID)/station"),
let urlEng = URL(string: "https://white-nights.krbl.ru/services/content/route/\(routeID)/station?lang=en") else { return }
// текст загрузки
switch appState.selectedLanguage {
case "ru":
firstStationName = "Загрузка..."
lastStationName = "Загрузка..."
stationsRangeName = "Loading..."
case "zh":
firstStationName = "正在加载..."
lastStationName = "正在加载..."
stationsRangeName = "正在加载..."
default:
firstStationName = "Loading..."
lastStationName = "Loading..."
stationsRangeName = "Loading..."
}
do {
let (data, _) = try await URLSession.shared.data(from: url)
let (dataEn, _) = try await URLSession.shared.data(from: urlEng)
// Загружаем станции на русском для диапазона
guard let urlRu = URL(string: "https://white-nights.krbl.ru/services/content/route/\(routeID)/station?lang=ru") else { return }
let (dataRu, _) = try await URLSession.shared.data(from: urlRu)
let stationsRu = try JSONDecoder().decode([Station].self, from: dataRu)
let stations = try JSONDecoder().decode([Station].self, from: data)
// Загружаем станции на английском для диапазона
guard let urlEn = URL(string: "https://white-nights.krbl.ru/services/content/route/\(routeID)/station?lang=en") else { return }
let (dataEn, _) = try await URLSession.shared.data(from: urlEn)
let stationsEn = try JSONDecoder().decode([Station].self, from: dataEn)
if let firstStation = stations.first { firstStationName = firstStation.name }
if let lastStation = stations.last { lastStationName = lastStation.name }
// Загружаем станции на языке интерфейса для отображения first/last
let langCode = appState.selectedLanguage
guard let urlCurrent = URL(string: "https://white-nights.krbl.ru/services/content/route/\(routeID)/station?lang=\(langCode)") else { return }
let (dataCurrent, _) = try await URLSession.shared.data(from: urlCurrent)
let stationsCurrent = try JSONDecoder().decode([Station].self, from: dataCurrent)
let firstStationEn = stationsEn.first?.name ?? "Loading..."
let lastStationEn = stationsEn.last?.name ?? "Loading..."
engStationsName = "\(firstStationEn) - \(lastStationEn)"
// Устанавливаем first и last на текущем языке интерфейса
if let first = stationsCurrent.first { firstStationName = first.name }
if let last = stationsCurrent.last { lastStationName = last.name }
// Диапазон станций
if appState.selectedLanguage == "ru" {
// для русского языка диапазон на английском
let firstEn = stationsEn.first?.name ?? ""
let lastEn = stationsEn.last?.name ?? ""
stationsRangeName = "\(firstEn) - \(lastEn)"
} else {
// для всех остальных языков диапазон на русском
let firstRu = stationsRu.first?.name ?? ""
let lastRu = stationsRu.last?.name ?? ""
stationsRangeName = "\(firstRu) - \(lastRu)"
}
} catch {
print("Ошибка загрузки станций: \(error)")
firstStationName = appState.selectedLanguage == "ru" ? "Ошибка загрузки" : appState.selectedLanguage == "zh" ? "加载失败" : "Failed to load"
lastStationName = appState.selectedLanguage == "ru" ? "Ошибка загрузки" : appState.selectedLanguage == "zh" ? "加载失败" : "Failed to load"
stationsRangeName = appState.selectedLanguage == "ru" ? "Ошибка загрузки" : appState.selectedLanguage == "zh" ? "加载失败" : "Failed to load"
}
}
}