Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
653bc612f5 |
+34
-7
@@ -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(),
|
||||
);
|
||||
},
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -65,17 +65,18 @@ class _LoginScreenState extends State<LoginScreen>
|
||||
}
|
||||
|
||||
setState(() => _ladt = true);
|
||||
_setzeStatus('Verbinde mit Baka-Auth...');
|
||||
_setzeStatus('Verbinde mit Navidrome...');
|
||||
|
||||
final result = await _auth.login(user, pass);
|
||||
final nav = NavidromeService();
|
||||
nav.setCredentials(AppConfig.navidromeUrl, user, pass);
|
||||
final ok = await nav.ping();
|
||||
|
||||
if (!mounted) return;
|
||||
|
||||
if (result.erfolg) {
|
||||
if (ok) {
|
||||
_setzeStatus('✅ Login erfolgreich!', ok: true);
|
||||
await UserEffekt.anwenden(user);
|
||||
await NavidromeService().speichereZugangsdaten(
|
||||
AppConfig.navidromeUrl, user, pass);
|
||||
await nav.speichereZugangsdaten(AppConfig.navidromeUrl, user, pass);
|
||||
await Future.delayed(const Duration(milliseconds: 600));
|
||||
if (mounted) {
|
||||
Navigator.of(context).pushReplacement(
|
||||
@@ -83,7 +84,7 @@ class _LoginScreenState extends State<LoginScreen>
|
||||
);
|
||||
}
|
||||
} else {
|
||||
_setzeStatus('❌ ${result.fehler ?? "Login fehlgeschlagen"}');
|
||||
_setzeStatus('❌ Keine Verbindung zum Musikserver');
|
||||
setState(() => _ladt = false);
|
||||
}
|
||||
}
|
||||
@@ -146,7 +147,7 @@ class _LoginScreenState extends State<LoginScreen>
|
||||
),
|
||||
const SizedBox(height: 4),
|
||||
const Text(
|
||||
'Mit deinem Baka-Account',
|
||||
'Mit deinem Navidrome-Account',
|
||||
style: TextStyle(color: MeloTheme.textSekundaer, fontSize: 13),
|
||||
),
|
||||
const SizedBox(height: 24),
|
||||
|
||||
Reference in New Issue
Block a user