Cache-Verwaltung und Datenbankpflege in den Einstellungen (Teil 35)
Caches können veralten, Datenbanken fragmentieren, und manchmal möchte man einfach neu starten. Ohne eine Oberfläche dafür muss der Nutzer die App-Daten manuell löschen. In EchoPlay gibt es deshalb einen eigenen Verwaltungs-Tab in den Einstellungen, der dem Nutzer Kontrolle über Cache, Bibliotheks-Reset und Datenbankpflege gibt.
Cache leeren: Flag statt sofortiges Löschen
Der Cache-Clear funktioniert über ein Flag-basiertes Muster. Statt den Cache sofort zu löschen, wird nur ein Schalter in der Datenbank gesetzt:
// Flag setzen — der nächste App-Start leert den Cache
settings.ClearCacheOnNextStart = true;
await settingsService.SaveAsync(settings);
Der eigentliche Cache-Rebuild passiert erst im StartupValidator beim nächsten App-Start. Warum nicht sofort? Weil ein konsistenter Neuaufbau besser ist als ein Löschen mitten im laufenden Betrieb. Beim Start wird der Cache systematisch neu aufgebaut — mit allen Abhängigkeiten in der richtigen Reihenfolge.
Bibliothek zurücksetzen
Der Nutzer hat drei Optionen: nur Online-Serien zurücksetzen, nur lokale Serien, oder alles. Jede Option nutzt Soft-Delete — die betroffenen Serien, Episoden und PlaybackStates werden kaskadierend als gelöscht markiert. Die Daten verschwinden sofort aus der Oberfläche, bleiben aber in der Datenbank und können theoretisch wiederhergestellt werden.
Datenbankpflege: Kaskadierendes Purge
DbPurgeDays steuert, wann soft-gelöschte Einträge physisch aus der Datenbank entfernt werden. Der DatabaseMaintenanceService räumt beim App-Start auf:
public async Task PurgeDeletedAsync(int retentionDays)
{
DateTime cutoff = DateTime.UtcNow.AddDays(-retentionDays);
// Kaskadierend: erst Tracks, dann Episoden, dann Serien
await PurgeAsync<LocalTrack>(cutoff);
await PurgeAsync<Episode>(cutoff);
await PurgeAsync<Series>(cutoff);
}
Die Reihenfolge ist entscheidend: Erst die Tracks löschen, dann die Episoden, dann die Serien. Würde man Serien zuerst löschen, blieben verwaiste Episoden und Tracks zurück — wegen der Foreign-Key-Beziehungen in Entity Framework Core. Der Nutzer stellt über die Einstellungen selbst ein, nach wie vielen Tagen gelöschte Daten endgültig verschwinden sollen. So hat er die volle Kontrolle: Die App führt aus, der Nutzer bestimmt.
Die gezeigten Code-Beispiele dienen zur Veranschaulichung. Nutzung auf eigene Verantwortung. Mehr dazu