refactor: move route into its own package

This commit is contained in:
LavaDesu 2025-04-15 14:19:17 +10:00
parent 4cd160cc47
commit 2551f67323
Signed by: cilly
GPG key ID: 6500251E087653C9
5 changed files with 45 additions and 41 deletions

View file

@ -1,4 +1,4 @@
package moe.lava.banksia.api.ptv package moe.lava.banksia.api.ptv.structures
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable

View file

@ -21,19 +21,16 @@ import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import moe.lava.banksia.api.ptv.ComposableIcon
import moe.lava.banksia.api.ptv.PtvService import moe.lava.banksia.api.ptv.PtvService
import moe.lava.banksia.api.ptv.Route import moe.lava.banksia.api.ptv.structures.ComposableIcon
import moe.lava.banksia.api.ptv.structures.Route
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable

View file

@ -15,40 +15,14 @@ import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import moe.lava.banksia.Constants import moe.lava.banksia.Constants
import moe.lava.banksia.api.ptv.structures.Route
import moe.lava.banksia.log import moe.lava.banksia.log
import okio.ByteString.Companion.encodeUtf8 import okio.ByteString.Companion.encodeUtf8
// Ordinals used for sorting in searcher object Responses {
enum class GtfsSubType(val value: Int) {
MetroTrain(2),
MetroTram(3),
MetroBus(4),
RegionalTrain(1),
RegionalCoach(5),
RegionalBus(6),
SkyBus(11),
Interstate(10),
}
@Serializable @Serializable
data class Route( data class Route(val routes: List<moe.lava.banksia.api.ptv.structures.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>)
class PtvService { class PtvService {
private val client = HttpClient() { private val client = HttpClient() {
@ -74,7 +48,7 @@ class PtvService {
} }
suspend fun routes(): List<Route> { suspend fun routes(): List<Route> {
val response: RouteResponse = client.get("routes").body() val response: Responses.Route = client.get("routes").body()
return response.routes return response.routes
} }
} }

View file

@ -0,0 +1,34 @@
package moe.lava.banksia.api.ptv.structures
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
// 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
}
}

View file

@ -1,4 +1,4 @@
package moe.lava.banksia.api.ptv package moe.lava.banksia.api.ptv.structures
import kotlinx.serialization.KSerializer import kotlinx.serialization.KSerializer
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
@ -9,7 +9,8 @@ import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder import kotlinx.serialization.encoding.Encoder
private object RouteTypeSerializer : KSerializer<RouteType> { private object RouteTypeSerializer : KSerializer<RouteType> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor(RouteType::class.qualifiedName!!, override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor(
RouteType::class.qualifiedName!!,
PrimitiveKind.INT) PrimitiveKind.INT)
override fun serialize(encoder: Encoder, value: RouteType) { override fun serialize(encoder: Encoder, value: RouteType) {
@ -20,8 +21,6 @@ private object RouteTypeSerializer : KSerializer<RouteType> {
val index = decoder.decodeInt() val index = decoder.decodeInt()
return RouteType.entries[index] return RouteType.entries[index]
} }
override fun toString(): String = "EnumOrdinalSerializer<${descriptor.serialName}>"
} }
@Serializable(with = RouteTypeSerializer::class) @Serializable(with = RouteTypeSerializer::class)