big update
This commit is contained in:
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user