summaryrefslogtreecommitdiff
path: root/android-app/app/src
diff options
context:
space:
mode:
authorClaude <noreply@anthropic.com>2026-05-20 23:59:20 +0000
committerClaude <noreply@anthropic.com>2026-05-20 23:59:20 +0000
commite4fb66791269d761a96a97213b3fd6aaeb151772 (patch)
treec03a34f8cf5ba5138ca22ae4faa0a42696a0e9a1 /android-app/app/src
parentf12e64422cc6157bf8dbcec272f4dd1f6e74b4f9 (diff)
Fix savedTracks silently empty when getSavedTracks() throws
getSavedTracks() was called inside .onSuccess{} with no error boundary; any exception from toSavedTrack() crashed the coroutine silently after _pastTracks was already set, leaving _savedTracks empty (tracks visible on the main map dim layer but missing from the Log tab list). Wrap every getSavedTracks() call in runCatching, and make toSavedTrack() inside getSavedTracks() skip individual bad tracks via mapNotNull so one corrupt GPX can't blank the whole list. https://claude.ai/code/session_01YUbuZNDAoLea4cf9UGQ9qn
Diffstat (limited to 'android-app/app/src')
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/track/TrackRepository.kt6
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt20
2 files changed, 20 insertions, 6 deletions
diff --git a/android-app/app/src/main/kotlin/org/terst/nav/track/TrackRepository.kt b/android-app/app/src/main/kotlin/org/terst/nav/track/TrackRepository.kt
index 0cc098b..0bf1dff 100644
--- a/android-app/app/src/main/kotlin/org/terst/nav/track/TrackRepository.kt
+++ b/android-app/app/src/main/kotlin/org/terst/nav/track/TrackRepository.kt
@@ -148,7 +148,11 @@ class TrackRepository(context: Context) {
suspend fun getSavedTracks(): List<SavedTrack> =
getPastTracks()
.filter { it.isNotEmpty() }
- .map { it.toSavedTrack() }
+ .mapNotNull { points ->
+ runCatching { points.toSavedTrack() }
+ .onFailure { e -> NavLogger.e("track", "toSavedTrack failed: ${e.javaClass.simpleName}: ${e.message}") }
+ .getOrNull()
+ }
fun safState(): SafState = storage.safState()
diff --git a/android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt b/android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt
index 01cec43..3d022e8 100644
--- a/android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt
+++ b/android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt
@@ -103,7 +103,9 @@ class MainViewModel(
runCatching { trackRepository.getPastTracks() }
.onSuccess {
_pastTracks.value = it
- _savedTracks.value = trackRepository.getSavedTracks()
+ runCatching { trackRepository.getSavedTracks() }
+ .onSuccess { saved -> _savedTracks.value = saved }
+ .onFailure { e -> NavLogger.e("track", "init: getSavedTracks failed: ${e.javaClass.simpleName}: ${e.message}") }
}
.onFailure { e -> NavLogger.e("track", "init: failed to load past tracks: ${e.javaClass.simpleName}: ${e.message}") }
}
@@ -167,7 +169,9 @@ class MainViewModel(
viewModelScope.launch {
val summary = trackRepository.stopTrack()
_pastTracks.value = trackRepository.getPastTracks()
- _savedTracks.value = trackRepository.getSavedTracks()
+ runCatching { trackRepository.getSavedTracks() }
+ .onSuccess { _savedTracks.value = it }
+ .onFailure { e -> NavLogger.e("track", "stopTrack: getSavedTracks failed: ${e.javaClass.simpleName}: ${e.message}") }
_trackPoints.value = emptyList()
_isRecording.value = false
_trackStats.value = null
@@ -184,7 +188,9 @@ class MainViewModel(
points.forEach { trackRepository.addPoint(it) }
val summary = trackRepository.stopTrack()
_pastTracks.value = trackRepository.getPastTracks()
- _savedTracks.value = trackRepository.getSavedTracks()
+ runCatching { trackRepository.getSavedTracks() }
+ .onSuccess { _savedTracks.value = it }
+ .onFailure { e -> NavLogger.e("track", "injectTestTrack: getSavedTracks failed: ${e.javaClass.simpleName}: ${e.message}") }
_trackPoints.value = emptyList()
_isRecording.value = false
_trackStats.value = null
@@ -426,7 +432,9 @@ class MainViewModel(
viewModelScope.launch {
trackRepository.importTrack(points)
_pastTracks.value = trackRepository.getPastTracks()
- _savedTracks.value = trackRepository.getSavedTracks()
+ runCatching { trackRepository.getSavedTracks() }
+ .onSuccess { _savedTracks.value = it }
+ .onFailure { e -> NavLogger.e("track", "addImportedTrack: getSavedTracks failed: ${e.javaClass.simpleName}: ${e.message}") }
}
}
@@ -440,7 +448,9 @@ class MainViewModel(
runCatching { trackRepository.reloadTracks() }
.onSuccess { tracks ->
_pastTracks.value = tracks
- _savedTracks.value = trackRepository.getSavedTracks()
+ runCatching { trackRepository.getSavedTracks() }
+ .onSuccess { saved -> _savedTracks.value = saved }
+ .onFailure { e -> NavLogger.e("track", "reloadPastTracks: getSavedTracks failed: ${e.javaClass.simpleName}: ${e.message}") }
NavLogger.i("track", "reloadPastTracks: ${tracks.size} tracks loaded")
}
.onFailure { e ->