ref: c47403765e3fe723e11c9627d8f876a2ba1763f9
app/src/main/java/xyz/apiote/bimba/czwek/api/transitousJourney.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
// SPDX-FileCopyrightText: Adam Evyčędo // // SPDX-License-Identifier: GPL-3.0-or-later package xyz.apiote.bimba.czwek.api import android.content.Context import android.util.Log import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import xyz.apiote.bimba.czwek.R import xyz.apiote.bimba.czwek.api.transitous.api.RoutingApi import xyz.apiote.bimba.czwek.repo.Colour import xyz.apiote.bimba.czwek.repo.CongestionLevel import xyz.apiote.bimba.czwek.repo.Event import xyz.apiote.bimba.czwek.repo.Journey import xyz.apiote.bimba.czwek.repo.Leg import xyz.apiote.bimba.czwek.repo.LineStub import xyz.apiote.bimba.czwek.repo.LineType import xyz.apiote.bimba.czwek.repo.OccupancyStatus import xyz.apiote.bimba.czwek.repo.Place import xyz.apiote.bimba.czwek.repo.Position import xyz.apiote.bimba.czwek.repo.TrafficResponseException import xyz.apiote.bimba.czwek.repo.Vehicle import xyz.apiote.bimba.czwek.units.Metre import xyz.apiote.bimba.czwek.units.Mps import xyz.apiote.bimba.czwek.units.Second import java.time.ZoneId suspend fun getJourney(from: Place, to: Place, context: Context): List<Journey> { if (!isNetworkAvailable(context)) { throw TrafficResponseException(0, "", Error(0, R.string.error_offline, R.drawable.error_net)) } return withContext(Dispatchers.IO) { Log.d("Journeys", "from: ${from.planString()}") Log.d("Journeys", "to: ${to.planString()}") val response = RoutingApi().plan(from.planString(), to.planString(), maxTransfers = null) Log.d("Journeys", "${response.itineraries}") response.itineraries.map { val legs: List<Leg> = it.legs.map { Leg( Event( it.tripId ?: "", null, Time.fromOffsetTime(it.startTime, ZoneId.systemDefault()), 0u, it.realTime, Vehicle( it.tripId ?: "", Position(0.0, 0.0), 0u, Mps(0), LineStub( it.routeShortName ?: "", // TODO is it nullable, yes e.g. for transit LineType.fromTransitous2(it.mode), Colour.fromHex(it.routeColor) ), it.headsign ?: "", // TODO is it nullable, yes e.g. for transit CongestionLevel.UNKNOWN, OccupancyStatus.UNKNOWN ), boarding = 0xffu, alerts = emptyList(), exact = true, terminusArrival = false ), Event( it.tripId ?: "", Time.fromOffsetTime(it.endTime, ZoneId.systemDefault()), null, 0u, it.realTime, Vehicle( it.tripId ?: "", Position(0.0, 0.0), 0u, Mps(0), LineStub( it.routeShortName ?: "", // TODO is it nullable, yes e.g. for transit LineType.fromTransitous2(it.mode), Colour.fromHex(it.routeColor) ), it.headsign ?: "", // TODO is it nullable, yes e.g. for transit CongestionLevel.UNKNOWN, OccupancyStatus.UNKNOWN ), boarding = 0xffu, alerts = emptyList(), exact = true, terminusArrival = false ), Place(it.from), Place(it.to), it.agencyName, it.distance?.toDouble()?.let { Metre(it) }, Second(it.duration), (it.intermediateStops ?: emptyList()).map { Place(it) }, /*it.legGeometry, it.rental, it.steps,*/ ) } Journey( it.startTime.atZoneSameInstant(ZoneId.systemDefault()), it.endTime.atZoneSameInstant( ZoneId.systemDefault() ), legs ) } } } |