Auswahl-Modus: Auf den Server laden (nur in Meine Musik)
This commit is contained in:
@@ -7,6 +7,7 @@ import '../library/playlist_service.dart';
|
||||
import '../library/song_media.dart';
|
||||
import '../player/audio_handler.dart';
|
||||
import '../playlists/create_playlist_dialog.dart';
|
||||
import '../services/sync_service.dart';
|
||||
import '../settings/app_settings.dart';
|
||||
import 'auswahl.dart';
|
||||
import 'theme.dart';
|
||||
@@ -22,6 +23,7 @@ class AuswahlLeiste extends StatelessWidget {
|
||||
required this.onAbbrechen,
|
||||
required this.onWiedergabeliste,
|
||||
required this.onWarteschlange,
|
||||
this.onServerLaden,
|
||||
});
|
||||
|
||||
final int anzahl;
|
||||
@@ -29,6 +31,10 @@ class AuswahlLeiste extends StatelessWidget {
|
||||
final VoidCallback onWiedergabeliste;
|
||||
final VoidCallback onWarteschlange;
|
||||
|
||||
/// Nur gesetzt, wo der Upload hingehört („Meine Musik"). Sonst erschiene
|
||||
/// die Aktion in allen fünf Ansichten, die diese Leiste benutzen.
|
||||
final VoidCallback? onServerLaden;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Padding(
|
||||
@@ -49,6 +55,12 @@ class AuswahlLeiste extends StatelessWidget {
|
||||
style: const TextStyle(fontWeight: FontWeight.w600),
|
||||
),
|
||||
),
|
||||
if (onServerLaden != null)
|
||||
IconButton(
|
||||
tooltip: 'Auf den Server laden',
|
||||
icon: const Icon(Icons.cloud_upload),
|
||||
onPressed: onServerLaden,
|
||||
),
|
||||
IconButton(
|
||||
tooltip: 'Zur Warteschlange hinzufügen',
|
||||
icon: const Icon(Icons.queue),
|
||||
@@ -159,3 +171,18 @@ Future<void> fuegeZuWarteschlangeHinzu(
|
||||
: '$angehaengt von ${gewaehlte.length} Titeln angehängt'),
|
||||
));
|
||||
}
|
||||
|
||||
/// Lädt [gewaehlte] zum Melo-Server und meldet das Ergebnis.
|
||||
///
|
||||
/// Wohnt neben [fuegeZuWiedergabelisteHinzu]: dieselbe Bauart, dieselbe Art
|
||||
/// Rückmeldung.
|
||||
Future<void> ladeAufServer(
|
||||
BuildContext context, List<Song> gewaehlte) async {
|
||||
final sync = context.read<SyncService>();
|
||||
final messenger = ScaffoldMessenger.of(context);
|
||||
final ergebnis = await sync.ladeAusgewaehlteHoch(gewaehlte);
|
||||
if (!context.mounted) return;
|
||||
messenger.showSnackBar(
|
||||
SnackBar(content: Text(sync.fehler ?? ergebnis.meldung)),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ class SortableSongList extends StatefulWidget {
|
||||
required this.songs,
|
||||
required this.storeKey,
|
||||
this.empty,
|
||||
this.serverUpload = false,
|
||||
});
|
||||
|
||||
final List<Song> songs;
|
||||
@@ -31,6 +32,10 @@ class SortableSongList extends StatefulWidget {
|
||||
/// Wird statt der Liste gezeigt, wenn [songs] leer ist.
|
||||
final Widget? empty;
|
||||
|
||||
/// Ob der Auswahl-Modus „Auf den Server laden" anbietet. Standard `false`:
|
||||
/// dieses Widget steckt in fünf Ansichten, gemeint ist nur „Meine Musik".
|
||||
final bool serverUpload;
|
||||
|
||||
@override
|
||||
State<SortableSongList> createState() => _SortableSongListState();
|
||||
}
|
||||
@@ -67,6 +72,11 @@ class _SortableSongListState extends State<SortableSongList> {
|
||||
if (mounted) _beendeAuswahl();
|
||||
}
|
||||
|
||||
Future<void> _aufServer(List<Song> gewaehlte) async {
|
||||
await ladeAufServer(context, gewaehlte);
|
||||
if (mounted) _beendeAuswahl();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_scroll.dispose();
|
||||
@@ -196,6 +206,9 @@ class _SortableSongListState extends State<SortableSongList> {
|
||||
onAbbrechen: _beendeAuswahl,
|
||||
onWiedergabeliste: () => _inWiedergabeliste(_gewaehlte(sorted)),
|
||||
onWarteschlange: () => _inWarteschlange(_gewaehlte(sorted)),
|
||||
onServerLaden: widget.serverUpload
|
||||
? () => _aufServer(_gewaehlte(sorted))
|
||||
: null,
|
||||
)
|
||||
else
|
||||
Padding(
|
||||
|
||||
Reference in New Issue
Block a user