aboutsummaryrefslogtreecommitdiff
path: root/shared/src/commonMain/kotlin/mx
diff options
context:
space:
mode:
Diffstat (limited to 'shared/src/commonMain/kotlin/mx')
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/Injectable.kt (renamed from shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/utils/MarkerType.kt)9
-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
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/CommandsController.kt17
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/GeofencesController.kt3
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/ReportController.kt15
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/SessionController.kt9
-rw-r--r--shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/UnitsController.kt3
30 files changed, 313 insertions, 73 deletions
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/utils/MarkerType.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/Injectable.kt
index cb2d159..6dda226 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/utils/MarkerType.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/Injectable.kt
@@ -15,11 +15,6 @@
* 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.utils
+package mx.trackermap.TrackerMap
-enum class MarkerType {
- ANIMAL, BACKHOE, 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
-} \ No newline at end of file
+interface Injectable \ No newline at end of file
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
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/CommandsController.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/CommandsController.kt
new file mode 100644
index 0000000..03ba5ab
--- /dev/null
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/CommandsController.kt
@@ -0,0 +1,17 @@
+package mx.trackermap.TrackerMap.controllers
+
+import mx.trackermap.TrackerMap.Injectable
+import mx.trackermap.TrackerMap.client.apis.CommandsApi
+import mx.trackermap.TrackerMap.client.models.Command
+
+class CommandsController(
+ private val commandsApi: CommandsApi
+): Injectable {
+ suspend fun fetchCommands(deviceId: Int): List<Command> {
+ return commandsApi.commandsGet(deviceId = deviceId).toList()
+ }
+
+ suspend fun sendCommand(command: Command) {
+ commandsApi.commandsSendPost(command)
+ }
+} \ No newline at end of file
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/GeofencesController.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/GeofencesController.kt
index 0e4c5c9..e16bb72 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/GeofencesController.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/GeofencesController.kt
@@ -21,13 +21,14 @@ import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.launch
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.apis.GeofencesApi
import mx.trackermap.TrackerMap.client.models.Geofence
@DelicateCoroutinesApi
class GeofencesController(
private val geofencesApi: GeofencesApi
-) {
+): Injectable {
val geofencesFlow = MutableStateFlow<Map<Int,Geofence>>(emptyMap())
init {
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/ReportController.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/ReportController.kt
index b60a034..b2e97e6 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/ReportController.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/ReportController.kt
@@ -21,6 +21,7 @@ import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.launch
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.apis.GeofencesApi
import mx.trackermap.TrackerMap.client.apis.ReportsApi
import mx.trackermap.TrackerMap.client.models.EventInformation
@@ -32,12 +33,12 @@ import mx.trackermap.TrackerMap.utils.ReportDates
class ReportController(
private val reportsApi: ReportsApi,
private val geofencesApi: GeofencesApi
-) {
+): Injectable {
sealed class Report {
- class PositionsReport(val positions: Array<Position>) : Report()
- class EventsReport(val events: Array<EventInformation>) : Report()
- class StopsReport(val stops: Array<Stop>) : Report()
+ class PositionsReport(val positions: List<Position>) : Report()
+ class EventsReport(val events: List<EventInformation>) : Report()
+ class StopsReport(val stops: List<Stop>) : Report()
class XlsxReport(val data: ByteArray) : Report()
object LoadingReport: Report()
}
@@ -81,7 +82,7 @@ class ReportController(
) {
if (!xlsx) {
val result = reportsApi.reportsRouteGet(from, to, deviceId)
- reportFlow.value = Report.PositionsReport(result)
+ reportFlow.value = Report.PositionsReport(result.toList())
} else {
val result = reportsApi.reportsRouteGetXlsx(from, to, deviceId)
reportFlow.value = Report.XlsxReport(result)
@@ -113,7 +114,7 @@ class ReportController(
))
}
- reportFlow.value = Report.EventsReport(result.toTypedArray())
+ reportFlow.value = Report.EventsReport(result)
} else {
val result = reportsApi.reportsEventsGetXlsx(
from, to, EventInformation.reportTypesToStrings(types), deviceId
@@ -131,7 +132,7 @@ class ReportController(
) {
if (!xlsx) {
val result = reportsApi.reportsStopsGet(from, to, deviceId)
- reportFlow.value = Report.StopsReport(result)
+ reportFlow.value = Report.StopsReport(result.toList())
} else {
val result = reportsApi.reportsStopsGetXlsx(from, to, deviceId)
reportFlow.value = Report.XlsxReport(result)
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/SessionController.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/SessionController.kt
index a945ee9..d3deca1 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/SessionController.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/SessionController.kt
@@ -22,6 +22,7 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.launch
import kotlinx.serialization.json.JsonPrimitive
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.apis.SessionApi
import mx.trackermap.TrackerMap.client.apis.UsersApi
import mx.trackermap.TrackerMap.client.models.SessionBody
@@ -31,7 +32,7 @@ import mx.trackermap.TrackerMap.client.models.User
class SessionController(
private val sessionApi: SessionApi,
private val usersApi: UsersApi
-) {
+): Injectable {
sealed class LoginState {
object Nothing: LoginState()
object Loading: LoginState()
@@ -65,6 +66,7 @@ class SessionController(
userFlow.value = sessionApi.sessionGet()
loginStateFlow.value = LoginState.Success
} catch (e: Exception) {
+ e.printStackTrace()
loginStateFlow.value = LoginState.Nothing
}
}
@@ -94,14 +96,13 @@ class SessionController(
loginStateFlow.value = LoginState.Loading
GlobalScope.launch {
try {
- sessionApi.baseUrl = url
- usersApi.baseUrl = sessionApi.baseUrl
+ sessionApi.sessionManager.baseUrl = url
val session = sessionApi.sessionPost(email, password)
userFlow.value = session
- usersApi.token = sessionApi.token
token?.let { registerFcmToken(it) }
loginStateFlow.value = LoginState.Success
} catch (e: Exception) {
+ e.printStackTrace()
loginStateFlow.value = LoginState.Failure
}
}
diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/UnitsController.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/UnitsController.kt
index a5d5bd7..8c36d50 100644
--- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/UnitsController.kt
+++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/controllers/UnitsController.kt
@@ -25,6 +25,7 @@ import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch
+import mx.trackermap.TrackerMap.Injectable
import mx.trackermap.TrackerMap.client.apis.DevicesApi
import mx.trackermap.TrackerMap.client.apis.PositionsApi
import mx.trackermap.TrackerMap.client.models.Position
@@ -39,7 +40,7 @@ import kotlinx.coroutines.Job
class UnitsController(
private val devicesApi: DevicesApi,
private val positionsApi: PositionsApi
-) {
+): Injectable {
private companion object {
const val UPDATE_TIME = 20
}