BUG-FIX: Login auf Navidrome umgestellt (Baka-Auth + Cloud gelöscht)

Fehlerpfad (502):
- App versuchte bei Startup, sich bei altem Baka-Auth (8993/8994) anzumelden → gelöscht
- CloudService versuchte, Cloud-API zu erreichen → gelöscht
- AuthService.initialisieren() crashte bei 502

Lösung:
- LoginScreen nutzt jetzt Navidrome.ping() statt AuthService.login()
- main.dart: AuthService.initialisieren() entfernt (nicht mehr nötig)
- MeloApp: Prüft jetzt Navidrome-Credentials statt Baka-Auth-Token
- MeloApp zeigt Loading-Spinner während Credentials geladen werden

Musikserver-Chip: Nutzt jetzt nur Navidrome (nicht mehr Cloud)
Alle 202 Tests grün

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01M8HvgtKSsaDZ8bjZrYBBms
This commit is contained in:
Hermes (Server)
2026-08-19 07:11:35 +02:00
co-authored by Claude Haiku 4.5
parent 2b10c350f9
commit 653bc612f5
2 changed files with 42 additions and 14 deletions
+34 -7
View File
@@ -13,6 +13,7 @@ import 'services/melo_logger.dart';
import 'services/audio_handler.dart';
import 'services/musik_scanner.dart';
import 'services/sync_service.dart';
import 'services/navidrome_service.dart';
import 'utils/farb_theme.dart';
import 'utils/user_effekte.dart';
import 'screens/home_screen.dart';
@@ -124,8 +125,8 @@ void main() async {
MeloLogger().fehler('App-Start', e, stack);
}
// Auth initialisieren (Token aus SharedPreferences laden + online validieren)
await AuthService().initialisieren();
// Navidrome-Credentials laden (nicht mehr Baka-Auth — Server gelöscht)
// Die App zeigt LoginScreen, wenn keine Credentials existieren
// Favoriten-Toggle → Server-Push (Feuer-und-Vergessen, deterministisch via
// `set` statt Toggle — verhindert Doppel-Toggle). Songs ohne cloud_id
@@ -206,10 +207,23 @@ class MeloApp extends StatefulWidget {
}
class _MeloAppState extends State<MeloApp> {
late Future<bool> _checkNavidromeCredentials;
@override
void initState() {
super.initState();
// Prüfe, ob Navidrome-Credentials gespeichert sind
_checkNavidromeCredentials = _hasNavidromeLogin();
}
Future<bool> _hasNavidromeLogin() async {
final nav = NavidromeService();
await nav.ladeGespeicherteZugangsdaten();
return nav.istVerbunden;
}
@override
Widget build(BuildContext context) {
final auth = AuthService();
// ValueListenableBuilder: Akzentfarbe (per User, in Einstellungen wählbar)
// wechselt das komplette Theme live — kein App-Neustart nötig.
return ValueListenableBuilder<Color>(
@@ -218,9 +232,22 @@ class _MeloAppState extends State<MeloApp> {
title: 'Melo',
debugShowCheckedModeBanner: false,
theme: MeloTheme.theme,
home: auth.istEingeloggt
? const Scaffold(body: MeloHome())
: const LoginScreen(),
home: FutureBuilder<bool>(
future: _checkNavidromeCredentials,
builder: (context, snapshot) {
if (snapshot.connectionState != ConnectionState.done) {
return const Scaffold(
backgroundColor: MeloTheme.schwarz,
body: Center(
child: CircularProgressIndicator(color: MeloTheme.rot),
),
);
}
return Scaffold(
body: snapshot.data == true ? const MeloHome() : const LoginScreen(),
);
},
),
),
);
}