refactor: move route into its own package
This commit is contained in:
parent
4cd160cc47
commit
2551f67323
5 changed files with 45 additions and 41 deletions
|
|
@ -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
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -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)
|
||||||
Loading…
Add table
Add a link
Reference in a new issue