diff options
| author | Claude <noreply@anthropic.com> | 2026-05-20 23:59:20 +0000 |
|---|---|---|
| committer | Claude <noreply@anthropic.com> | 2026-05-20 23:59:20 +0000 |
| commit | e4fb66791269d761a96a97213b3fd6aaeb151772 (patch) | |
| tree | c03a34f8cf5ba5138ca22ae4faa0a42696a0e9a1 /android-app/app/src/main | |
| parent | f12e64422cc6157bf8dbcec272f4dd1f6e74b4f9 (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/main')
| -rw-r--r-- | android-app/app/src/main/kotlin/org/terst/nav/track/TrackRepository.kt | 6 | ||||
| -rw-r--r-- | android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt | 20 |
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 -> |
