Release GPS2Audio v2.7.38 Samsung audio fix
This commit is contained in:
@@ -175,8 +175,45 @@ class WaypointStore(private val context: Context) {
|
||||
}
|
||||
}
|
||||
|
||||
/** Speichert die gesamte Wegpunktliste. */
|
||||
/**
|
||||
* Speichert die gesamte Wegpunktliste.
|
||||
*
|
||||
* v2.7.21 — Waypoint-Preservation-Guard:
|
||||
* Wenn [waypoints] leer ist, aber im DataStore bereits Wegpunkte vorhanden
|
||||
* sind, wird der Schreibvorgang NICHT ausgeführt. Das verhindert, dass eine
|
||||
* versehentlich leere oder veraltete In-Memory-Liste (`_waypoints.value`
|
||||
* aus einem Race-Condition-Fenster) bestehende Wegpunkte überschreibt.
|
||||
*
|
||||
* Explizites Leeren (Tour-Löschung, Migration) muss [saveAllForced] verwenden.
|
||||
*/
|
||||
suspend fun saveAll(waypoints: List<Waypoint>) {
|
||||
context.dataStore.edit { prefs ->
|
||||
// v2.7.21 — Preservation Guard: nie eine leere Liste über eine
|
||||
// nicht-leere Liste schreiben. Schutz gegen Race-Condition-Verlust.
|
||||
if (waypoints.isEmpty()) {
|
||||
val existingJson = prefs[KEY_WAYPOINTS] ?: "[]"
|
||||
val existingList = runCatching {
|
||||
gson.fromJson<List<Waypoint>>(existingJson, waypointListType)
|
||||
}.getOrNull()
|
||||
if (!existingList.isNullOrEmpty()) {
|
||||
// Vorhandene Wegpunkte schützen — leere Liste wird NICHT geschrieben.
|
||||
android.util.Log.w(
|
||||
"WaypointStore",
|
||||
"saveAll() mit leerer Liste blockiert: ${existingList.size} bestehende Wegpunkte bleiben erhalten."
|
||||
)
|
||||
return@edit
|
||||
}
|
||||
}
|
||||
prefs[KEY_WAYPOINTS] = gson.toJson(waypoints)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* v2.7.21 — Forciertes Speichern ohne Preservation-Guard.
|
||||
* Nur für explizite Lösch- und Migrationsoperationen verwenden,
|
||||
* bei denen eine leere Liste das gewünschte Ergebnis ist.
|
||||
*/
|
||||
suspend fun saveAllForced(waypoints: List<Waypoint>) {
|
||||
context.dataStore.edit { prefs ->
|
||||
prefs[KEY_WAYPOINTS] = gson.toJson(waypoints)
|
||||
}
|
||||
@@ -228,6 +265,12 @@ class WaypointStore(private val context: Context) {
|
||||
* v2.4.6 — Speichert (oder ersetzt) die gespeicherte Route einer Tour.
|
||||
* Setzt [TourRoute.updatedAtMillis] auf die aktuelle Zeit, sofern das
|
||||
* übergebene Objekt nicht selbst einen neueren Zeitstempel mitbringt.
|
||||
*
|
||||
* v2.7.21 — Waypoint-Preservation-Invariante:
|
||||
* Diese Funktion schreibt AUSSCHLIESSLICH in [KEY_TOUR_ROUTES].
|
||||
* [KEY_WAYPOINTS] (Audio-Wegpunkte) wird durch diesen Aufruf NIEMALS
|
||||
* verändert. Tourrouten und Audio-Wegpunkte sind vollständig getrennte
|
||||
* Speicherbereiche.
|
||||
*/
|
||||
suspend fun saveTourRoute(tourName: String, route: TourRoute) {
|
||||
context.dataStore.edit { prefs ->
|
||||
|
||||
Reference in New Issue
Block a user