Automatische Erkennung: neue Dateien auf dem Geraet und neue Alben am Server
- AutoScan: beim Zurueckkehren in die App wird die Zahl der Musikdateien mit der Bibliothek verglichen; nur bei Abweichung laeuft ein Scan, und hoechstens alle 5 Minuten. Gleich viele Loeschungen wie Neuzugaenge bleiben unbemerkt - dafuer gibt es den Scan von Hand. - ServerNeuheiten: meldet neu auf Navidrome aufgetauchte Alben im Online-Tab. Der erste Abruf meldet bewusst nichts, sonst waere die ganze Sammlung "neu"; er nutzt die ohnehin geladenen Alben statt eines zweiten Serveraufrufs. - Neu: MeloDb.countSongs(), countAndroidMediaStoreSongs(). 189 Tests gruen, flutter analyze ohne Befund. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018NLW1q1hzEC9goDQ1dJ98d
This commit is contained in:
co-authored by
Claude Opus 5
parent
6200c77614
commit
15e3d44453
@@ -9,8 +9,10 @@ import '../player/audio_handler.dart';
|
||||
import '../services/baka_auth.dart';
|
||||
import '../services/media_store.dart';
|
||||
import '../services/navidrome_service.dart';
|
||||
import '../services/server_neuheiten.dart';
|
||||
import '../services/yt_download_service.dart';
|
||||
import '../shared/sub_tabs.dart';
|
||||
import '../shared/theme.dart';
|
||||
|
||||
/// Online-Tab: durchsucht den verbundenen Navidrome-Server. Abgespielte
|
||||
/// Titel werden vom [MeloAudioHandler] automatisch lokal zwischengespeichert
|
||||
@@ -63,6 +65,9 @@ class _ServerBrowser extends StatefulWidget {
|
||||
|
||||
class _ServerBrowserState extends State<_ServerBrowser> {
|
||||
late final NavidromeService _nav = NavidromeService();
|
||||
// Die Alben sind beim Prüfen schon geladen — kein zweiter Serveraufruf.
|
||||
late final ServerNeuheiten _neuheiten =
|
||||
ServerNeuheiten(holeAlben: () async => _albums);
|
||||
List<SubsonicAlbum> _albums = [];
|
||||
List<SubsonicArtist> _artists = [];
|
||||
bool _loading = false;
|
||||
@@ -94,6 +99,9 @@ class _ServerBrowserState extends State<_ServerBrowser> {
|
||||
_albums = alben;
|
||||
_loading = false;
|
||||
});
|
||||
// Erst jetzt prüfen — _albums ist gefüllt.
|
||||
await _neuheiten.pruefe();
|
||||
if (mounted) setState(() {});
|
||||
}
|
||||
} catch (e) {
|
||||
if (mounted) {
|
||||
@@ -187,6 +195,24 @@ class _ServerBrowserState extends State<_ServerBrowser> {
|
||||
|
||||
return Column(
|
||||
children: [
|
||||
if (_neuheiten.neue.isNotEmpty)
|
||||
MaterialBanner(
|
||||
backgroundColor: MeloTheme.surfaceHigh,
|
||||
content: Text(
|
||||
_neuheiten.neue.length == 1
|
||||
? 'Neu auf dem Server: ${_neuheiten.neue.first.name}'
|
||||
: '${_neuheiten.neue.length} neue Alben auf dem Server',
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
await _neuheiten.alsGesehenMarkieren();
|
||||
if (mounted) setState(() {});
|
||||
},
|
||||
child: const Text('Verstanden'),
|
||||
),
|
||||
],
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.all(12),
|
||||
child: Row(
|
||||
|
||||
Reference in New Issue
Block a user