Fuenf P0-Fehler behoben: Benachrichtigung, Offline, Cover, Warteschlange
Ergebnis einer Durchsicht der App gegen den Massstab "Apple Music". Alle fuenf Punkte waren keine fehlenden Funktionen, sondern Versprechen, die die Oberflaeche gab und der Code nicht hielt. - POST_NOTIFICATIONS fehlte im Manifest. Auf Android 13+ blieb die Wiedergabe-Benachrichtigung dadurch unsichtbar. Das Recht wird erst erfragt, wenn wirklich ein Titel laeuft. - Der Offline-Schalter wurde nirgends gelesen. Er greift jetzt an allen drei Wegen in die Warteschlange; uebersprungene Titel werden benannt. - CoverImage kannte nur file://, und der Server-Browser gab die Cover-Adresse gar nicht erst mit. Server-Titel waren deshalb immer ein graues Notensymbol. - Warteschlange entfernen/umsortieren baute die ganze Queue neu auf: hoerbarer Aussetzer und doppelte Wiedergabe-Zaehlung. Jetzt mutiert nur der betroffene Eintrag, die Buchfuehrung steht vor dem Player. - Das Herz bei Server-Titeln legte einen Favoriten mit leerer Kennung an, der nie in der Liste auftauchte. Es ist jetzt ausgegraut. Nachgebessert aus dem Code-Review: Offline-Meldung an die Stelle geholt, wo sie greifen kann; Queue-Buchfuehrung vor den Player gezogen; Fehlerpfad fuer die Berechtigungs-Abfrage ergaenzt. 360 Tests gruen (vorher 328), flutter analyze ohne Befund, Release-APK gebaut und POST_NOTIFICATIONS darin nachgeprueft. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013xAHJTJM6UUqmjUgk1PUEd
This commit is contained in:
co-authored by
Claude Opus 5
parent
34d6d8e52a
commit
e6d5f1c9ee
@@ -1,3 +1,4 @@
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:audio_service/audio_service.dart';
|
||||
@@ -12,6 +13,7 @@ import 'library/database.dart';
|
||||
import 'library/favorites_screen.dart';
|
||||
import 'library/library_service.dart';
|
||||
import 'library/my_music_screen.dart';
|
||||
import 'library/permissions.dart';
|
||||
import 'library/playlist_service.dart';
|
||||
import 'library/search_screen.dart';
|
||||
import 'player/audio_effects.dart';
|
||||
@@ -81,6 +83,12 @@ Future<void> main() async {
|
||||
uebernehmeEinstellungen();
|
||||
_settings.addListener(uebernehmeEinstellungen);
|
||||
|
||||
// Der Offline-Schalter liegt in einem eigenen Dienst, wirkt aber genauso:
|
||||
// ohne diese Weitergabe war er nur gespeichert und die App streamte weiter.
|
||||
void uebernehmeOfflineModus() => _handler.offlineOnly = _offlineMode.enabled;
|
||||
uebernehmeOfflineModus();
|
||||
_offlineMode.addListener(uebernehmeOfflineModus);
|
||||
|
||||
runApp(const MeloApp());
|
||||
}
|
||||
|
||||
@@ -140,6 +148,24 @@ class _HomeShellState extends State<HomeShell> with WidgetsBindingObserver {
|
||||
// Beim Start einmal mit dem Server abgleichen — neue Titel von anderen
|
||||
// Geräten sind dann sofort da.
|
||||
context.read<SyncService>().automatisch();
|
||||
unawaited(_frageBenachrichtigungsRecht(context.read<MeloAudioHandler>()));
|
||||
}
|
||||
|
||||
/// Fragt das Recht auf die Wiedergabe-Benachrichtigung, sobald der erste
|
||||
/// Titel läuft. Beim kalten Start käme die Frage ohne Zusammenhang — und
|
||||
/// zweimal weggetippt sperrt Android sie dauerhaft.
|
||||
///
|
||||
/// Scheitern darf das folgenlos: `permission_handler` wirft, wenn beim
|
||||
/// Start noch die Abfrage der Musik-Berechtigung offen ist. Die Wiedergabe
|
||||
/// läuft dann trotzdem, nur ohne Benachrichtigung — daraus einen
|
||||
/// unbehandelten Fehler zu machen, wäre die schlechtere Antwort.
|
||||
Future<void> _frageBenachrichtigungsRecht(MeloAudioHandler handler) async {
|
||||
try {
|
||||
await handler.mediaItem.firstWhere((item) => item != null);
|
||||
await ensureNotificationPermission();
|
||||
} catch (e) {
|
||||
logger.warning('Benachrichtigungs-Recht nicht erfragt: $e');
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
Reference in New Issue
Block a user