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.runtime.Composable

View file

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

View file

@ -15,40 +15,14 @@ import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import moe.lava.banksia.Constants
import moe.lava.banksia.api.ptv.structures.Route
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),
}
object Responses {
@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
data class Route(val routes: List<moe.lava.banksia.api.ptv.structures.Route>)
}
return null
}
}
@Serializable
data class RouteResponse(val routes: List<Route>)
class PtvService {
private val client = HttpClient() {
@ -74,7 +48,7 @@ class PtvService {
}
suspend fun routes(): List<Route> {
val response: RouteResponse = client.get("routes").body()
val response: Responses.Route = client.get("routes").body()
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.Serializable
@ -9,7 +9,8 @@ import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
private object RouteTypeSerializer : KSerializer<RouteType> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor(RouteType::class.qualifiedName!!,
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor(
RouteType::class.qualifiedName!!,
PrimitiveKind.INT)
override fun serialize(encoder: Encoder, value: RouteType) {
@ -20,8 +21,6 @@ private object RouteTypeSerializer : KSerializer<RouteType> {
val index = decoder.decodeInt()
return RouteType.entries[index]
}
override fun toString(): String = "EnumOrdinalSerializer<${descriptor.serialName}>"
}
@Serializable(with = RouteTypeSerializer::class)