From 323a67e3a29b79001d192bc5b93e1dfea589ca28 Mon Sep 17 00:00:00 2001 From: "Hermes (Server)" Date: Wed, 19 Aug 2026 22:28:36 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20Fix:=20INTERNET-Permission=20feh?= =?UTF-8?q?lte=20im=20Release-Manifest?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ROOT CAUSE für die fehlenden Logs — und für den fehlschlagenden Navidrome-Login: Flutter injiziert android.permission.INTERNET nur in debug/ und profile/AndroidManifest.xml. In main/AndroidManifest.xml stand sie nicht, das Release-APK hatte damit gar keinen Netzzugriff. Jede http-Anfrage schlug sofort mit SocketException fehl. - INTERNET + ACCESS_NETWORK_STATE in main/AndroidManifest.xml ergänzt - Login-Versuch/-Erfolg/-Fehlschlag im Settings-Dialog explizit geloggt (URL + User + ob das Passwortfeld leer war; das Passwort selbst nicht) - Batch-Schwelle 20 -> 5, damit INFO-Logs auch ohne vorherigen Fehler hochgeladen werden Nicht geaendert: der Sofort-Upload bei ERROR war bereits implementiert (error() ruft _uploadIfError -> _uploadLogs direkt auf) und war nicht die Ursache. Co-Authored-By: Claude Haiku 4.5 Claude-Session: https://claude.ai/code/session_01XJzQjUtnvYUtHdnTs3iCru --- android/app/src/main/AndroidManifest.xml | 5 +++++ lib/services/logger_service.dart | 2 +- lib/settings/settings_screen.dart | 9 +++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 3a6adeb..6b55cb6 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,4 +1,9 @@ + + + diff --git a/lib/services/logger_service.dart b/lib/services/logger_service.dart index 7d85ff9..b634d8f 100644 --- a/lib/services/logger_service.dart +++ b/lib/services/logger_service.dart @@ -34,7 +34,7 @@ class LogEntry { /// Centralized Logging Service mit Auto-Upload zu Server class LoggerService extends ChangeNotifier { static const String _logServerUrl = 'https://logs.baka-net.de/api/logs'; - static const int _batchSize = 20; + static const int _batchSize = 5; final List _logs = []; late final String _deviceModel; diff --git a/lib/settings/settings_screen.dart b/lib/settings/settings_screen.dart index 912fc1f..c41a503 100644 --- a/lib/settings/settings_screen.dart +++ b/lib/settings/settings_screen.dart @@ -5,6 +5,7 @@ import '../library/database.dart'; import '../library/permissions.dart'; import '../library/playlist_service.dart'; import '../services/cache_manager.dart'; +import '../services/logger_service.dart'; import '../services/navidrome_service.dart'; import '../services/offline_mode.dart'; import 'library_stats.dart'; @@ -261,16 +262,24 @@ class _SettingsScreenState extends State { ? null : () async { setDialogState(() => verbindet = true); + logger.info( + 'Login-Versuch: url=${urlCtrl.text} user=$selectedUser ' + 'pwLeer=${passCtrl.text.isEmpty}'); _navidrome.setCredentials( urlCtrl.text, selectedUser, passCtrl.text); final ok = await _navidrome.ping(); setDialogState(() => verbindet = false); if (ok && ctx.mounted) { + logger.info( + 'Login erfolgreich: url=${urlCtrl.text} user=$selectedUser'); await _navidrome.speichereZugangsdaten( urlCtrl.text, selectedUser, passCtrl.text); if (ctx.mounted) Navigator.pop(ctx); if (mounted) setState(() {}); } else if (ctx.mounted) { + logger.error( + 'Login fehlgeschlagen: url=${urlCtrl.text} ' + 'user=$selectedUser pwLeer=${passCtrl.text.isEmpty}'); setDialogState(() => fehler = '❌ Login fehlgeschlagen'); }