feat: implement route type and icons

This commit is contained in:
LavaDesu 2025-04-15 14:09:46 +10:00
parent 3c0eb906cc
commit 4cd160cc47
Signed by: cilly
GPG key ID: 6500251E087653C9
13 changed files with 200 additions and 3 deletions

View file

@ -18,12 +18,34 @@ import moe.lava.banksia.Constants
import moe.lava.banksia.log
import okio.ByteString.Companion.encodeUtf8
// Ordinals used for sorting in searcher
enum class GtfsSubType(val value: Int) {
MetroTrain(2),
MetroTram(3),
MetroBus(4),
RegionalTrain(1),
RegionalCoach(5),
RegionalBus(6),
SkyBus(11),
Interstate(10),
}
@Serializable
data class Route(
@SerialName("route_type") val routeType: RouteType,
@SerialName("route_id") val routeId: Int,
@SerialName("route_number") val routeNumber: String,
@SerialName("route_name") val routeName: String,
)
@SerialName("route_gtfs_id") val routeGtfsId: String,
) {
fun gtfsSubType(): GtfsSubType? {
GtfsSubType.entries.forEach {
if (routeGtfsId.startsWith(it.value.toString()))
return it
}
return null
}
}
@Serializable
data class RouteResponse(val routes: List<Route>)

View file

@ -0,0 +1,34 @@
package moe.lava.banksia.api.ptv
import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
private object RouteTypeSerializer : KSerializer<RouteType> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor(RouteType::class.qualifiedName!!,
PrimitiveKind.INT)
override fun serialize(encoder: Encoder, value: RouteType) {
encoder.encodeInt(value.ordinal)
}
override fun deserialize(decoder: Decoder): RouteType {
val index = decoder.decodeInt()
return RouteType.entries[index]
}
override fun toString(): String = "EnumOrdinalSerializer<${descriptor.serialName}>"
}
@Serializable(with = RouteTypeSerializer::class)
enum class RouteType {
TRAIN,
TRAM,
BUS,
VLINE,
NIGHT_BUS,
}