Sync-Ausbau: Favoriten-Fix, Auswahl-Upload, Einzel-Offline, Playlist-Sicherung #5
+3
-4
@@ -30,10 +30,9 @@ Format angelehnt an [Keep a Changelog](https://keepachangelog.com/de/1.0.0/).
|
||||
stillschweigend „keine Favoriten".
|
||||
- ☁️ **Neu: „Auf den Server laden".** Im Auswahl-Modus von „Meine Musik"
|
||||
(langes Drücken) lassen sich einzelne Titel markieren und gezielt
|
||||
hochladen — mit Fortschritt und **Abbrechen**. Titel, die schon oben sind,
|
||||
werden übersprungen; einzelne Fehlschläge stoppen den Rest nicht. Die
|
||||
Aktion erscheint bewusst nur dort und nicht bei Favoriten,
|
||||
Wiedergabelisten oder Titellisten.
|
||||
hochladen. Titel, die schon oben sind, werden übersprungen; einzelne
|
||||
Fehlschläge stoppen den Rest nicht. Die Aktion erscheint bewusst nur dort
|
||||
und nicht bei Favoriten, Wiedergabelisten oder Titellisten.
|
||||
- ⬇️ **Neu: einzelne Server-Titel offline nehmen.** In der Album- und
|
||||
Künstler-Ansicht hat jede Zeile jetzt einen Knopf — bisher ging nur „ganzes
|
||||
Album". Schon geladene Titel lassen sich dort auch wieder entfernen.
|
||||
|
||||
@@ -546,9 +546,13 @@ class MeloDb extends _$MeloDb {
|
||||
.write(SongsCompanion(cloudId: Value(cloudId)));
|
||||
}
|
||||
|
||||
Future<Song?> songByCloudId(String cloudId) =>
|
||||
(select(songs)..where((s) => s.cloudId.equals(cloudId)))
|
||||
.getSingleOrNull();
|
||||
Future<Song?> songByCloudId(String cloudId) async {
|
||||
final treffer = await (select(songs)
|
||||
..where((s) => s.cloudId.equals(cloudId))
|
||||
..limit(1))
|
||||
.get();
|
||||
return treffer.isEmpty ? null : treffer.single;
|
||||
}
|
||||
|
||||
/// Titel, die am Server gelöscht wurden, auch auf dem Gerät als gelöscht
|
||||
/// markieren. Grabstein statt echtem Löschen — sonst legt der nächste Scan
|
||||
|
||||
+7
-3
@@ -89,9 +89,6 @@ Future<void> main() async {
|
||||
_db,
|
||||
cloud: MeloCloudService(auth: _bakaAuth),
|
||||
);
|
||||
// Nur auf einem Gerät ohne eigene Playlisten: nach Neuinstallation oder
|
||||
// Zurücksetzen holt das die gesicherten Listen zurück.
|
||||
unawaited(_playlists.stelleWiederHer());
|
||||
final navidrome = NavidromeService();
|
||||
await navidrome.ladeGespeicherteZugangsdaten();
|
||||
_downloads = DownloadService(db: _db, navidrome: navidrome);
|
||||
@@ -219,7 +216,14 @@ class _HomeShellState extends State<HomeShell> with WidgetsBindingObserver {
|
||||
/// Gleicht ab und zeigt danach höchstens einmal den „Was ist neu"-Bericht.
|
||||
Future<void> _gleicheAbUndZeigeBericht() async {
|
||||
final sync = context.read<SyncService>();
|
||||
final playlists = context.read<PlaylistService>();
|
||||
await sync.automatisch();
|
||||
// Nur auf einem Gerät ohne eigene Playlisten: nach dem ersten Abgleich
|
||||
// (der Songs erst cloudIds zuweist) holt das die gesicherten Listen
|
||||
// zurück. Vor dem Sync liefe jede songByCloudId-Suche ins Leere und
|
||||
// legte leere Playlisten an, die der countPlaylists()-Riegel dann für
|
||||
// immer blockierte.
|
||||
unawaited(playlists.stelleWiederHer());
|
||||
if (!mounted) return;
|
||||
final bericht = sync.bericht;
|
||||
if (bericht == null) return;
|
||||
|
||||
Reference in New Issue
Block a user