make sure all stops are requested
This commit is contained in:
parent
ced8e8173d
commit
93148fcf36
@ -10,13 +10,11 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import kotlinx.serialization.Serializable
|
||||
import okhttp3.OkHttpClient
|
||||
import okhttp3.Request
|
||||
import ovh.plrapps.mapcompose.api.addClusterer
|
||||
import ovh.plrapps.mapcompose.api.addLazyLoader
|
||||
import ovh.plrapps.mapcompose.api.addMarker
|
||||
import ovh.plrapps.mapcompose.api.removeMarker
|
||||
import ovh.plrapps.mapcompose.ui.state.markers.model.RenderingStrategy
|
||||
import java.net.URL
|
||||
|
||||
@ -37,9 +35,10 @@ data class GTFSRoute(
|
||||
)
|
||||
|
||||
// Type alias for array of GTFS routes
|
||||
typealias GTFSRoutes = List<GTFSRoute>
|
||||
typealias GTFSRoutes = MutableList<GTFSRoute>
|
||||
|
||||
var gtfsRoutes: GTFSRoutes = mutableListOf()
|
||||
|
||||
var gtfsRoutes: GTFSRoutes? = null
|
||||
|
||||
@Serializable
|
||||
data class GTFSStopGeometry(
|
||||
@ -68,11 +67,11 @@ data class GTFSStop(
|
||||
|
||||
@Serializable
|
||||
data class GTFSStops(
|
||||
val features: List<GTFSStop>,
|
||||
val features: MutableList<GTFSStop>,
|
||||
val type: String?
|
||||
)
|
||||
|
||||
var gtfsStops: GTFSStops? = null
|
||||
var gtfsStops: GTFSStops = GTFSStops(mutableListOf<GTFSStop>(), "FeatureCollection")
|
||||
|
||||
|
||||
// OkHttpClient for making HTTP requests
|
||||
@ -108,19 +107,24 @@ private fun fetchGTFSPosition(gtfsUrl: URL,api_key: String, callee: Activity) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Start the timer with a URL:
|
||||
fun startGTFSTracking(url: String, api_key: String, callee: Activity) {
|
||||
if (GTFSIsTracking) return
|
||||
|
||||
GTFSIsTracking = true
|
||||
GTFSTrackingThread = Thread {
|
||||
var gtfsUrl = URL(url);
|
||||
val gtfsUrl = URL(url);
|
||||
try {
|
||||
if(gtfsRoutes == null) {
|
||||
if(gtfsRoutes.isEmpty()) {
|
||||
GTFSMainHandler.post {
|
||||
Toast.makeText(callee, "Fetching routes...", Toast.LENGTH_SHORT).show()}
|
||||
|
||||
var messageParsed: GTFSRoutes;
|
||||
var offset = 0;
|
||||
do {
|
||||
val request = Request.Builder()
|
||||
.url("${gtfsUrl.protocol}://${gtfsUrl.host}${callee.getString(R.string.routes_path)}")
|
||||
.url("${gtfsUrl.protocol}://${gtfsUrl.host}${callee.getString(R.string.routes_path)}?offset=${offset}")
|
||||
.header(
|
||||
"User-Agent",
|
||||
"${BuildConfig.APPLICATION_ID}/${BuildConfig.VERSION_NAME} (Android)"
|
||||
@ -133,13 +137,20 @@ fun startGTFSTracking(url: String, api_key: String, callee: Activity) {
|
||||
} else {
|
||||
"Error: ${response.code} ${response.message}"
|
||||
}
|
||||
gtfsRoutes = json.decodeFromString<GTFSRoutes>(message)
|
||||
}}
|
||||
if(gtfsStops == null) {
|
||||
messageParsed = json.decodeFromString<GTFSRoutes>(message)
|
||||
gtfsRoutes.addAll(messageParsed)
|
||||
offset += messageParsed.size
|
||||
}} while (messageParsed.isNotEmpty())
|
||||
}
|
||||
if(gtfsStops.features.isEmpty()) {
|
||||
GTFSMainHandler.post {
|
||||
Toast.makeText(callee, "Fetching stops...", Toast.LENGTH_SHORT).show()}
|
||||
|
||||
var messageParsed: GTFSStops;
|
||||
var offset = 0;
|
||||
do {
|
||||
val request = Request.Builder()
|
||||
.url("${gtfsUrl.protocol}://${gtfsUrl.host}${callee.getString(R.string.stops_path)}")
|
||||
.url("${gtfsUrl.protocol}://${gtfsUrl.host}${callee.getString(R.string.stops_path)}?offset=${offset}")
|
||||
.header(
|
||||
"User-Agent",
|
||||
"${BuildConfig.APPLICATION_ID}/${BuildConfig.VERSION_NAME} (Android)"
|
||||
@ -152,29 +163,31 @@ fun startGTFSTracking(url: String, api_key: String, callee: Activity) {
|
||||
} else {
|
||||
"Error: ${response.code} ${response.message}"
|
||||
}
|
||||
gtfsStops = json.decodeFromString<GTFSStops>(message)
|
||||
messageParsed = json.decodeFromString<GTFSStops>(message)
|
||||
gtfsStops.features.addAll(messageParsed.features)
|
||||
}
|
||||
|
||||
// put all stops on the map
|
||||
GTFSMainHandler.post {
|
||||
Toast.makeText(callee, "Drawing stops...", Toast.LENGTH_SHORT).show()}
|
||||
for (stop in gtfsStops!!.features) {
|
||||
offset += messageParsed.features.size;
|
||||
}while(messageParsed.features.isNotEmpty())
|
||||
}
|
||||
// put all stops on the map
|
||||
GTFSMainHandler.post {
|
||||
Toast.makeText(callee, "Drawing stops...", Toast.LENGTH_SHORT).show()}
|
||||
for (stop in gtfsStops!!.features) {
|
||||
|
||||
if (stop.properties.parent_station == null) {
|
||||
mapState.addMarker(stop.properties.stop_id, x = longitudeToXNormalized(stop.geometry.coordinates[0]), y = latitudeToYNormalized(stop.geometry.coordinates[1]), renderingStrategy = RenderingStrategy.LazyLoading("default")) {
|
||||
Icon(
|
||||
painter = painterResource(id = R.drawable.outline_directions_bus_24),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(12.dp),
|
||||
tint = Color(0xFF0000FF)
|
||||
)
|
||||
}}
|
||||
|
||||
|
||||
|
||||
}
|
||||
GTFSMainHandler.post {
|
||||
Toast.makeText(callee, "Done drawing stops", Toast.LENGTH_SHORT).show()}
|
||||
if (stop.properties.parent_station == null) {
|
||||
mapState.addMarker(stop.properties.stop_id, x = longitudeToXNormalized(stop.geometry.coordinates[0]), y = latitudeToYNormalized(stop.geometry.coordinates[1]), renderingStrategy = RenderingStrategy.LazyLoading("default")) {
|
||||
Icon(
|
||||
painter = painterResource(id = R.drawable.outline_directions_bus_24),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.size(12.dp),
|
||||
tint = Color(0xFF0000FF)
|
||||
)
|
||||
}}
|
||||
}
|
||||
GTFSMainHandler.post {
|
||||
Toast.makeText(callee, "Done drawing stops", Toast.LENGTH_SHORT).show()}
|
||||
|
||||
} catch(e: Exception) {
|
||||
GTFSMainHandler.post {
|
||||
Toast.makeText(callee, e.message ?: "Unknown error", Toast.LENGTH_SHORT).show()
|
||||
@ -195,7 +208,11 @@ fun startGTFSTracking(url: String, api_key: String, callee: Activity) {
|
||||
|
||||
fun stopGTFSTracking() {
|
||||
GTFSIsTracking = false
|
||||
|
||||
for (stop in gtfsStops!!.features) {
|
||||
if (stop.properties.parent_station == null) {
|
||||
mapState.removeMarker(stop.properties.stop_id);
|
||||
}
|
||||
}
|
||||
GTFSTrackingThread?.interrupt()
|
||||
GTFSTrackingThread = null
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user