summaryrefslogtreecommitdiff
path: root/android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt
blob: c5b90c3625ae11648a672bf4f444fc357d6aecdc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package org.terst.nav.ui

import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import org.terst.nav.sensors.WindData
import org.terst.nav.track.TrackPoint
import org.terst.nav.track.TrackRepository

class MainViewModel {

    private val trackRepository = TrackRepository()
    private var latestWind: WindData? = null

    private val _trackPoints = MutableStateFlow<List<TrackPoint>>(emptyList())
    val trackPoints: StateFlow<List<TrackPoint>> = _trackPoints

    fun startTrack() {
        trackRepository.startTrack()
        _trackPoints.value = emptyList()
    }

    fun stopTrack() {
        trackRepository.stopTrack()
    }

    fun updateWind(wind: WindData) {
        latestWind = wind
    }

    fun addGpsPoint(lat: Double, lon: Double, sogKnots: Double, cogDeg: Double) {
        val wind = latestWind
        val point = TrackPoint(
            lat = lat, lon = lon,
            sogKnots = sogKnots, cogDeg = cogDeg,
            windSpeedKnots = wind?.windSpeed ?: 0.0,
            windAngleDeg  = wind?.windAngle ?: 0.0,
            isTrueWind    = wind?.isTrueWind ?: false,
            timestampMs   = System.currentTimeMillis()
        )
        if (trackRepository.addPoint(point)) {
            _trackPoints.value = trackRepository.getPoints()
        }
    }
}