aboutsummaryrefslogtreecommitdiff
path: root/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client
diff options
context:
space:
mode:
Diffstat (limited to 'shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client')
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/AttributesApi.kt3
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/CalendarsApi.kt3
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/CommandsApi.kt3
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/DevicesApi.kt3
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/DriversApi.kt3
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/EventsApi.kt3
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/GeofencesApi.kt3
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/GroupsApi.kt3
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/MaintenanceApi.kt3
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/NotificationsApi.kt3
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/PermissionsApi.kt3
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/PositionsApi.kt3
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/ReportsApi.kt3
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/ServerApi.kt3
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/SessionApi.kt15
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/StatisticsApi.kt3
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/UsersApi.kt3
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/infrastructure/ApiClient.kt35
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/infrastructure/HttpClientProvider.kt7
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/infrastructure/SessionManager.kt35
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/EventInformation.kt17
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/MapLayer.kt17
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/Marker.kt102
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/UnitInformation.kt54
24 files changed, 277 insertions, 53 deletions
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/AttributesApi.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/AttributesApi.kt
index 2a67fd0..1da9831 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/AttributesApi.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/AttributesApi.kt
@@ -11,11 +11,12 @@
*/
package mx.trackermap.TrackerMap.client.apis
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.models.Attribute
import mx.trackermap.TrackerMap.client.infrastructure.*
-class AttributesApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
+class AttributesApi(sessionManager: SessionManager) : ApiClient(sessionManager), Injectable {
/**
* Fetch a list of Attributes
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/CalendarsApi.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/CalendarsApi.kt
index 8dd2da8..c666dc3 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/CalendarsApi.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/CalendarsApi.kt
@@ -11,11 +11,12 @@
*/
package mx.trackermap.TrackerMap.client.apis
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.models.Calendar
import mx.trackermap.TrackerMap.client.infrastructure.*
-class CalendarsApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
+class CalendarsApi(sessionManager: SessionManager) : ApiClient(sessionManager), Injectable {
/**
* Fetch a list of Calendars
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/CommandsApi.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/CommandsApi.kt
index 8ee7436..eb1718c 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/CommandsApi.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/CommandsApi.kt
@@ -11,12 +11,13 @@
*/
package mx.trackermap.TrackerMap.client.apis
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.models.Command
import mx.trackermap.TrackerMap.client.models.CommandType
import mx.trackermap.TrackerMap.client.infrastructure.*
-class CommandsApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
+class CommandsApi(sessionManager: SessionManager) : ApiClient(sessionManager), Injectable {
/**
* Fetch a list of Saved Commands
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/DevicesApi.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/DevicesApi.kt
index 74d105f..8b839aa 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/DevicesApi.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/DevicesApi.kt
@@ -11,12 +11,13 @@
*/
package mx.trackermap.TrackerMap.client.apis
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.models.Device
import mx.trackermap.TrackerMap.client.models.DeviceAccumulators
import mx.trackermap.TrackerMap.client.infrastructure.*
-class DevicesApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
+class DevicesApi(sessionManager: SessionManager) : ApiClient(sessionManager), Injectable {
/**
* Fetch a list of Devices
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/DriversApi.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/DriversApi.kt
index a9f47b8..bff61c2 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/DriversApi.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/DriversApi.kt
@@ -11,11 +11,12 @@
*/
package mx.trackermap.TrackerMap.client.apis
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.models.Driver
import mx.trackermap.TrackerMap.client.infrastructure.*
-class DriversApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
+class DriversApi(sessionManager: SessionManager) : ApiClient(sessionManager), Injectable {
/**
* Fetch a list of Drivers
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/EventsApi.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/EventsApi.kt
index 360d6e1..87f8dce 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/EventsApi.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/EventsApi.kt
@@ -11,11 +11,12 @@
*/
package mx.trackermap.TrackerMap.client.apis
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.models.Event
import mx.trackermap.TrackerMap.client.infrastructure.*
-class EventsApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
+class EventsApi(sessionManager: SessionManager) : ApiClient(sessionManager), Injectable {
/**
*
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/GeofencesApi.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/GeofencesApi.kt
index d7174e5..049aee9 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/GeofencesApi.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/GeofencesApi.kt
@@ -11,11 +11,12 @@
*/
package mx.trackermap.TrackerMap.client.apis
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.models.Geofence
import mx.trackermap.TrackerMap.client.infrastructure.*
-class GeofencesApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
+class GeofencesApi(sessionManager: SessionManager) : ApiClient(sessionManager), Injectable {
/**
* Fetch a list of Geofences
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/GroupsApi.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/GroupsApi.kt
index 620a25e..07b3b05 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/GroupsApi.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/GroupsApi.kt
@@ -11,11 +11,12 @@
*/
package mx.trackermap.TrackerMap.client.apis
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.models.Group
import mx.trackermap.TrackerMap.client.infrastructure.*
-class GroupsApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
+class GroupsApi(sessionManager: SessionManager) : ApiClient(sessionManager), Injectable {
/**
* Fetch a list of Groups
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/MaintenanceApi.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/MaintenanceApi.kt
index 5b10e9e..e28a728 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/MaintenanceApi.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/MaintenanceApi.kt
@@ -11,11 +11,12 @@
*/
package mx.trackermap.TrackerMap.client.apis
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.models.Maintenance
import mx.trackermap.TrackerMap.client.infrastructure.*
-class MaintenanceApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
+class MaintenanceApi(sessionManager: SessionManager) : ApiClient(sessionManager), Injectable {
/**
* Fetch a list of Maintenance
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/NotificationsApi.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/NotificationsApi.kt
index 290a14d..f311fdb 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/NotificationsApi.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/NotificationsApi.kt
@@ -11,12 +11,13 @@
*/
package mx.trackermap.TrackerMap.client.apis
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.models.Notification
import mx.trackermap.TrackerMap.client.models.NotificationType
import mx.trackermap.TrackerMap.client.infrastructure.*
-class NotificationsApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
+class NotificationsApi(sessionManager: SessionManager) : ApiClient(sessionManager), Injectable {
/**
* Fetch a list of Notifications
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/PermissionsApi.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/PermissionsApi.kt
index 33aab48..76fd4a8 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/PermissionsApi.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/PermissionsApi.kt
@@ -11,11 +11,12 @@
*/
package mx.trackermap.TrackerMap.client.apis
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.models.Permission
import mx.trackermap.TrackerMap.client.infrastructure.*
-class PermissionsApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
+class PermissionsApi(sessionManager: SessionManager) : ApiClient(sessionManager), Injectable {
/**
* Unlink an Object from another Object
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/PositionsApi.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/PositionsApi.kt
index 61285e9..6ad74cb 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/PositionsApi.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/PositionsApi.kt
@@ -11,11 +11,12 @@
*/
package mx.trackermap.TrackerMap.client.apis
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.models.Position
import mx.trackermap.TrackerMap.client.infrastructure.*
-class PositionsApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
+class PositionsApi(sessionManager: SessionManager) : ApiClient(sessionManager), Injectable {
/**
* Fetches a list of Positions
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/ReportsApi.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/ReportsApi.kt
index eff40ad..64ef8ea 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/ReportsApi.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/ReportsApi.kt
@@ -13,6 +13,7 @@ package mx.trackermap.TrackerMap.client.apis
import io.ktor.content.*
import kotlinx.datetime.LocalDateTime
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.models.Event
import mx.trackermap.TrackerMap.client.models.Position
import mx.trackermap.TrackerMap.client.models.Stop
@@ -21,7 +22,7 @@ import mx.trackermap.TrackerMap.client.models.ReportTrips
import mx.trackermap.TrackerMap.client.infrastructure.*
-class ReportsApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
+class ReportsApi(sessionManager: SessionManager) : ApiClient(sessionManager), Injectable {
/**
* Fetch a list of Events within the time period for the Devices or Groups
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/ServerApi.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/ServerApi.kt
index bf65dfe..5672543 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/ServerApi.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/ServerApi.kt
@@ -11,11 +11,12 @@
*/
package mx.trackermap.TrackerMap.client.apis
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.models.Server
import mx.trackermap.TrackerMap.client.infrastructure.*
-class ServerApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
+class ServerApi(sessionManager: SessionManager) : ApiClient(sessionManager), Injectable {
/**
* Fetch Server information
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/SessionApi.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/SessionApi.kt
index 3f90c4c..a22d2d9 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/SessionApi.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/SessionApi.kt
@@ -11,14 +11,11 @@
*/
package mx.trackermap.TrackerMap.client.apis
-import com.russhwolf.settings.Settings
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.models.User
import mx.trackermap.TrackerMap.client.infrastructure.*
-const val SERVER_URL_KEY = "server_url"
-const val ACCESS_TOKEN_KEY = "access_token"
-
-class SessionApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
+class SessionApi(sessionManager: SessionManager) : ApiClient(sessionManager), Injectable {
/**
* Close the Session
@@ -36,8 +33,7 @@ class SessionApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
return when (response.responseType) {
ResponseType.Success -> {
- val settings = Settings()
- settings.remove(ACCESS_TOKEN_KEY)
+ sessionManager.clearSession()
}
ResponseType.Informational -> TODO()
ResponseType.Redirection -> TODO()
@@ -102,14 +98,13 @@ class SessionApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
return when (response.responseType) {
ResponseType.Success -> {
+ print("Response headers = ${response.headers.values}\n")
val cookie = response.headers
.values
.flatten()
.find { it.contains("JSESSIONID") }!!
.replace("; Path=/", "")
- this.token = cookie
- val settings = Settings()
- settings.putString(ACCESS_TOKEN_KEY, cookie)
+ this.sessionManager.token = cookie
(response as Success<*>).data as User
}
ResponseType.Informational -> TODO()
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/StatisticsApi.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/StatisticsApi.kt
index 296e589..0b9c766 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/StatisticsApi.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/StatisticsApi.kt
@@ -12,11 +12,12 @@
package mx.trackermap.TrackerMap.client.apis
import kotlinx.datetime.LocalDateTime
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.models.Statistics
import mx.trackermap.TrackerMap.client.infrastructure.*
-class StatisticsApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
+class StatisticsApi(sessionManager: SessionManager) : ApiClient(sessionManager), Injectable {
/**
* Fetch server Statistics
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/UsersApi.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/UsersApi.kt
index 51f2138..90dd9f6 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/UsersApi.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/apis/UsersApi.kt
@@ -11,11 +11,12 @@
*/
package mx.trackermap.TrackerMap.client.apis
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.models.User
import mx.trackermap.TrackerMap.client.infrastructure.*
-class UsersApi(defaultBaseUrl: String) : ApiClient(defaultBaseUrl) {
+class UsersApi(sessionManager: SessionManager) : ApiClient(sessionManager), Injectable {
/**
* Fetch a list of Users
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/infrastructure/ApiClient.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/infrastructure/ApiClient.kt
index dd61893..e9865e8 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/infrastructure/ApiClient.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/infrastructure/ApiClient.kt
@@ -17,7 +17,6 @@
*/
package mx.trackermap.TrackerMap.client.infrastructure
-import com.russhwolf.settings.Settings
import io.ktor.client.*
import io.ktor.client.call.*
import io.ktor.client.features.*
@@ -32,12 +31,10 @@ import io.ktor.client.request.forms.FormDataContent
import io.ktor.client.statement.*
import io.ktor.http.*
import io.ktor.util.*
-import mx.trackermap.TrackerMap.client.apis.ACCESS_TOKEN_KEY
-import mx.trackermap.TrackerMap.client.apis.SERVER_URL_KEY
import kotlinx.serialization.json.Json as KotlinJson
open class ApiClient(
- defaultBaseUrl: String = "",
+ val sessionManager: SessionManager
) {
companion object {
protected const val ApiContentType = "Content-Type"
@@ -47,7 +44,7 @@ open class ApiClient(
protected const val ApiFormURLType = "application/x-www-form-urlencoded"
protected const val ApiXmlMediaType = "application/xml"
- val client: HttpClient = HttpClient {
+ val client: HttpClient = HttpClientProvider().getHttpClient().config {
install(HttpTimeout) {
connectTimeoutMillis = 20_000
requestTimeoutMillis = 20_000
@@ -56,12 +53,13 @@ open class ApiClient(
serializer = KotlinxSerializer(
KotlinJson {
ignoreUnknownKeys = true
+ useAlternativeNames = false
}
)
}
install(Logging) {
logger = Logger.DEFAULT
- level = LogLevel.ALL
+ level = LogLevel.INFO
}
}
@@ -70,21 +68,6 @@ open class ApiClient(
ApiContentType to ApiJsonMediaType,
ApiAccept to ApiJsonMediaType
)
-
- val jsonHeaders: Map<String, String> =
- mapOf(
- ApiContentType to ApiJsonMediaType,
- ApiAccept to ApiJsonMediaType
- )
- }
-
- var baseUrl: String = ""
- var token: String = ""
-
- init {
- val settings = Settings()
- baseUrl = settings.getString(SERVER_URL_KEY, defaultBaseUrl)
- token = settings.getString(ACCESS_TOKEN_KEY, "")
}
protected inline fun <reified T> fillRequest(
@@ -130,7 +113,7 @@ open class ApiClient(
): ApiInfrastructureResponse<T?> {
val httpUrl: Url
try {
- httpUrl = Url(baseUrl)
+ httpUrl = Url(sessionManager.baseUrl)
} catch (e: URLDecodeException) {
throw IllegalStateException("baseUrl is invalid.")
}
@@ -147,11 +130,11 @@ open class ApiClient(
val url = urlBuilder.build()
val headers = defaultHeaders + requestConfig.headers
- if (headers[ApiContentType] ?: "" == "") {
+ if ((headers[ApiContentType] ?: "") == "") {
throw IllegalStateException("Missing Content-Type header. This is required.")
}
- if (headers[ApiAccept] ?: "" == "") {
+ if ((headers[ApiAccept] ?: "") == "") {
throw IllegalStateException("Missing Accept header. This is required.")
}
@@ -190,8 +173,8 @@ open class ApiClient(
}
}
- if (token.isNotEmpty()) {
- request.headers["Cookie"] = token
+ if (sessionManager.token.isNotEmpty()) {
+ request.headers["Cookie"] = sessionManager.token
}
val response: HttpResponse = client.request(request)
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/infrastructure/HttpClientProvider.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/infrastructure/HttpClientProvider.kt
new file mode 100644
index 0000000..873722f
--- /dev/null
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/infrastructure/HttpClientProvider.kt
@@ -0,0 +1,7 @@
+package mx.trackermap.TrackerMap.client.infrastructure
+
+import io.ktor.client.*
+
+expect class HttpClientProvider() {
+ fun getHttpClient(): HttpClient
+} \ No newline at end of file
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/infrastructure/SessionManager.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/infrastructure/SessionManager.kt
new file mode 100644
index 0000000..caf2da1
--- /dev/null
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/infrastructure/SessionManager.kt
@@ -0,0 +1,35 @@
+package mx.trackermap.TrackerMap.client.infrastructure
+
+import com.russhwolf.settings.Settings
+import com.russhwolf.settings.get
+import com.russhwolf.settings.set
+import mx.trackermap.TrackerMap.Injectable
+
+class SessionManager(
+ private val defaultBaseUrl: String
+): Injectable {
+
+ companion object {
+ const val SERVER_URL_KEY = "server_url"
+ const val ACCESS_TOKEN_KEY = "access_token"
+ }
+
+ private val settings = Settings()
+
+ var baseUrl: String
+ get() = settings[SERVER_URL_KEY] ?: defaultBaseUrl
+ set(baseUrl) {
+ settings[SERVER_URL_KEY] = baseUrl
+ }
+
+ var token: String
+ get() = settings[ACCESS_TOKEN_KEY] ?: ""
+ set(token) {
+ settings[ACCESS_TOKEN_KEY] = token
+ }
+
+ fun clearSession() {
+ settings.remove(ACCESS_TOKEN_KEY)
+ settings.remove(SERVER_URL_KEY)
+ }
+} \ No newline at end of file
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/EventInformation.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/EventInformation.kt
index a008fa8..17682b8 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/EventInformation.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/EventInformation.kt
@@ -1,3 +1,20 @@
+/**
+ * TrackerMap
+ * Copyright (C) 2021-2022 Iván Ávalos <avalos@disroot.org>, Henoch Ojeda <imhenoch@protonmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
package mx.trackermap.TrackerMap.client.models
import kotlinx.serialization.Serializable
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/MapLayer.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/MapLayer.kt
index 4a48952..7bb41ae 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/MapLayer.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/MapLayer.kt
@@ -1,3 +1,20 @@
+/**
+ * TrackerMap
+ * Copyright (C) 2021-2022 Iván Ávalos <avalos@disroot.org>, Henoch Ojeda <imhenoch@protonmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
package mx.trackermap.TrackerMap.client.models
data class MapLayer(
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/Marker.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/Marker.kt
new file mode 100644
index 0000000..ff3fb29
--- /dev/null
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/Marker.kt
@@ -0,0 +1,102 @@
+/**
+ * TrackerMap
+ * Copyright (C) 2021-2022 Iván Ávalos <avalos@disroot.org>, Henoch Ojeda <imhenoch@protonmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package mx.trackermap.TrackerMap.client.models
+
+
+data class Marker(
+ val id: Int,
+ val name: String,
+ val latitude: Double,
+ val longitude: Double,
+ val type: Type = Type.DEFAULT
+) {
+ enum class Type {
+ ANIMAL, BICYCLE, BOAT, BUS, CAR, CRANE, DEFAULT, HELICOPTER, MOTORCYCLE, OFFROAD, PERSON,
+ PICKUP, PLANE, SCOOTER, SHIP, TRACTOR, TRAIN, TRAM, TROLLEYBUS, TRUCK, VAN,
+
+ REPORT_POSITION, REPORT_START, REPORT_END
+ }
+
+ companion object {
+ fun fromUnit(unit: UnitInformation): Marker? {
+ if (unit.position?.latitude == null || unit.position.longitude == null) {
+ return null
+ }
+
+ return Marker(
+ unit.position.id!!,
+ unit.device.name,
+ unit.position.latitude,
+ unit.position.longitude,
+ categoryToMarkerType(unit.device.category ?: "")
+ )
+ }
+
+ fun fromPosition(position: Position): Marker? {
+ if (position.latitude == null || position.longitude == null) {
+ return null
+ }
+
+ return Marker(
+ position.id!!,
+ "",
+ position.latitude,
+ position.longitude
+ )
+ }
+
+ fun fromStop(stop: Stop): Marker? {
+ if (stop.latitude == null || stop.longitude == null) {
+ return null
+ }
+
+ return Marker(
+ stop.deviceId!!,
+ stop.deviceName!!,
+ stop.latitude,
+ stop.longitude
+ )
+ }
+
+ fun categoryToMarkerType(category: String?): Type {
+ return when (category?.lowercase()) {
+ "animal" -> Type.ANIMAL
+ "bicycle" -> Type.BICYCLE
+ "boat" -> Type.BOAT
+ "bus" -> Type.BUS
+ "car" -> Type.CAR
+ "crane" -> Type.CRANE
+ "helicopter" -> Type.HELICOPTER
+ "motorcycle" -> Type.MOTORCYCLE
+ "offroad" -> Type.OFFROAD
+ "person" -> Type.PERSON
+ "pickup" -> Type.PICKUP
+ "plane" -> Type.PLANE
+ "scooter" -> Type.SCOOTER
+ "ship" -> Type.SHIP
+ "tractor" -> Type.TRACTOR
+ "train" -> Type.TRAIN
+ "tram" -> Type.TRAM
+ "trolleybus" -> Type.TROLLEYBUS
+ "truck" -> Type.TRUCK
+ "van" -> Type.VAN
+ else -> Type.DEFAULT
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/UnitInformation.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/UnitInformation.kt
index edebff0..1e23396 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/UnitInformation.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/client/models/UnitInformation.kt
@@ -1,6 +1,58 @@
+/**
+ * TrackerMap
+ * Copyright (C) 2021-2022 Iván Ávalos <avalos@disroot.org>, Henoch Ojeda <imhenoch@protonmail.com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
package mx.trackermap.TrackerMap.client.models
+import kotlinx.serialization.json.longOrNull
+
data class UnitInformation(
val device: Device,
val position: Position?
-) \ No newline at end of file
+) {
+ enum class Status {
+ ONLINE, OFFLINE, UNKNOWN
+ }
+
+ enum class EngineStop {
+ ON, OFF, UNKNOWN
+ }
+
+ /**
+ * Status is calculated from speed, because status based on
+ * the actual connection to the server is useless for our clients.
+ */
+ fun getStatus() = position?.speed?.let {
+ if (it >= 2) {
+ Status.ONLINE
+ } else {
+ Status.OFFLINE
+ }
+ } ?: Status.UNKNOWN
+
+ /* Many GPS devices reserve pin 1 for engine stop */
+ fun getEngineStop() = if (position?.attributes?.containsKey("out1") == true) {
+ position.attributes["out1"]?.toString()?.let {
+ when (it) {
+ "true" -> EngineStop.ON
+ "false" -> EngineStop.OFF
+ else -> EngineStop.UNKNOWN
+ }
+ } ?: EngineStop.UNKNOWN
+ } else EngineStop.UNKNOWN
+
+ fun getHourmeter() = position?.attributes?.get("hours")?.longOrNull
+} \ No newline at end of file