From 3d926c76f41f9fb40a4a17322d53eb2fd3383b69 Mon Sep 17 00:00:00 2001 From: Iván Ávalos Date: Mon, 31 Jan 2022 23:41:31 -0600 Subject: - Adapter iOS app to changes in UnitsController - Added getHourmeter() method to UnitInformation - Added missing license headers --- iosApp/iosApp/Devices/DeviceRow.swift | 16 +++++----- iosApp/iosApp/Units/UnitsViewModel.swift | 8 +++++ .../kotlin/mx/trackermap/TrackerMap/Injectable.kt | 17 +++++++++++ .../TrackerMap/client/models/UnitInformation.kt | 4 +++ .../client/infrastructure/HttpClientProvider.kt | 17 +++++++++++ .../mx/trackermap/TrackerMap/utils/MainScope.kt | 34 ++++++++++++++++++++++ .../trackermap/TrackerMap/utils/Serialization.kt | 12 -------- 7 files changed, 87 insertions(+), 21 deletions(-) create mode 100644 shared/src/iosMain/kotlin/mx/trackermap/TrackerMap/utils/MainScope.kt delete mode 100644 shared/src/iosMain/kotlin/mx/trackermap/TrackerMap/utils/Serialization.kt diff --git a/iosApp/iosApp/Devices/DeviceRow.swift b/iosApp/iosApp/Devices/DeviceRow.swift index 9873c8e..e7966d2 100644 --- a/iosApp/iosApp/Devices/DeviceRow.swift +++ b/iosApp/iosApp/Devices/DeviceRow.swift @@ -104,15 +104,13 @@ struct DeviceRow: View { } /* Hourmeter */ - if let hourmeter = unit.position?.attributes["hours"] { - if let hourmeter = Serialization.companion.longOrNull(json: hourmeter) { - HStack { - Label(Formatter.companion.formatHours( - millis: Int64(truncating: hourmeter)), - systemImage: "timer") - .labelStyle(SmallLabelStyle()) - Spacer() - } + if let hourmeter = unit.getHourmeter() { + HStack { + Label(Formatter.companion.formatHours( + millis: Int64(truncating: hourmeter)), + systemImage: "timer") + .labelStyle(SmallLabelStyle()) + Spacer() } } diff --git a/iosApp/iosApp/Units/UnitsViewModel.swift b/iosApp/iosApp/Units/UnitsViewModel.swift index 33f9729..04c0436 100644 --- a/iosApp/iosApp/Units/UnitsViewModel.swift +++ b/iosApp/iosApp/Units/UnitsViewModel.swift @@ -23,6 +23,8 @@ class UnitsViewModel: ObservableObject { @Inject var unitsController: UnitsController @Inject var geofenceController: GeofencesController + let mainScope = MainScope.companion.createMainScope() + enum UnitsDisplayMode { case map case list @@ -54,9 +56,14 @@ class UnitsViewModel: ObservableObject { @Published var camera: Camera = Camera() init() { + unitsController.fetchUnits(scope: mainScope) setupObservers() } + deinit { + MainScope.companion.cancelScope(scope: mainScope) + } + private func setupObservers() { let unitsCollector = Collector<[UnitInformation]>(callback: setUnits) unitsController.displayedUnitsFlow.collect(collector: unitsCollector) { unit, error in } @@ -66,6 +73,7 @@ class UnitsViewModel: ObservableObject { } private func setUnits(units: [UnitInformation]) { + print("Positions") self.units = units } diff --git a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/Injectable.kt b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/Injectable.kt index a7467d6..6dda226 100644 --- a/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/Injectable.kt +++ b/shared/src/commonMain/kotlin/mx/trackermap/TrackerMap/Injectable.kt @@ -1,3 +1,20 @@ +/** + * TrackerMap + * Copyright (C) 2021-2022 Iván Ávalos , Henoch Ojeda + * + * 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 . + */ package mx.trackermap.TrackerMap interface Injectable \ 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 a276fda..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 @@ -17,6 +17,8 @@ */ package mx.trackermap.TrackerMap.client.models +import kotlinx.serialization.json.longOrNull + data class UnitInformation( val device: Device, val position: Position? @@ -51,4 +53,6 @@ data class UnitInformation( } } ?: EngineStop.UNKNOWN } else EngineStop.UNKNOWN + + fun getHourmeter() = position?.attributes?.get("hours")?.longOrNull } \ No newline at end of file diff --git a/shared/src/iosMain/kotlin/mx/trackermap/TrackerMap/client/infrastructure/HttpClientProvider.kt b/shared/src/iosMain/kotlin/mx/trackermap/TrackerMap/client/infrastructure/HttpClientProvider.kt index 1ccb2e6..e95e964 100644 --- a/shared/src/iosMain/kotlin/mx/trackermap/TrackerMap/client/infrastructure/HttpClientProvider.kt +++ b/shared/src/iosMain/kotlin/mx/trackermap/TrackerMap/client/infrastructure/HttpClientProvider.kt @@ -1,3 +1,20 @@ +/** + * TrackerMap + * Copyright (C) 2021-2022 Iván Ávalos , Henoch Ojeda + * + * 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 . + */ package mx.trackermap.TrackerMap.client.infrastructure import io.ktor.client.* diff --git a/shared/src/iosMain/kotlin/mx/trackermap/TrackerMap/utils/MainScope.kt b/shared/src/iosMain/kotlin/mx/trackermap/TrackerMap/utils/MainScope.kt new file mode 100644 index 0000000..b992524 --- /dev/null +++ b/shared/src/iosMain/kotlin/mx/trackermap/TrackerMap/utils/MainScope.kt @@ -0,0 +1,34 @@ +/** + * TrackerMap + * Copyright (C) 2021-2022 Iván Ávalos , Henoch Ojeda + * + * 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 . + */ +package mx.trackermap.TrackerMap.utils + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.MainScope +import kotlinx.coroutines.cancel + +class MainScope { + companion object { + fun createMainScope(): CoroutineScope { + return MainScope() + } + + fun cancelScope(scope: CoroutineScope) { + scope.cancel() + } + } +} \ No newline at end of file diff --git a/shared/src/iosMain/kotlin/mx/trackermap/TrackerMap/utils/Serialization.kt b/shared/src/iosMain/kotlin/mx/trackermap/TrackerMap/utils/Serialization.kt deleted file mode 100644 index be26416..0000000 --- a/shared/src/iosMain/kotlin/mx/trackermap/TrackerMap/utils/Serialization.kt +++ /dev/null @@ -1,12 +0,0 @@ -package mx.trackermap.TrackerMap.utils - -import kotlinx.serialization.json.JsonPrimitive -import kotlinx.serialization.json.longOrNull - -class Serialization { - companion object { - fun longOrNull(json: JsonPrimitive) = json.longOrNull - - fun toString(json: JsonPrimitive) = json.toString() - } -} \ No newline at end of file -- cgit v1.2.3