diff --git a/lib/services/navidrome_service.dart b/lib/services/navidrome_service.dart index 19663b9..b4d2a7e 100644 --- a/lib/services/navidrome_service.dart +++ b/lib/services/navidrome_service.dart @@ -1,4 +1,6 @@ +import 'dart:async'; import 'dart:convert'; +import 'dart:io'; import 'dart:math'; import 'package:flutter/foundation.dart'; import 'package:crypto/crypto.dart'; @@ -148,8 +150,31 @@ class NavidromeService { return false; } } catch (e) { - logger.error('Navidrome Ping Fehler', e, StackTrace.current); - debugPrint('Navidrome Ping Fehler: $e'); + // Details für die Diagnose: ohne URL/Exception-Typ ist im Log nicht + // erkennbar, ob DNS, IPv6, TLS oder eine falsche URL die Ursache ist. + // Bewusst NICHT die volle Ping-URI loggen — die enthält Token + Salt. + final ziel = Uri.tryParse(_serverUrl); + final art = switch (e) { + TimeoutException() => 'TIMEOUT (10s überschritten)', + SocketException(:final osError, :final address) => + 'SOCKET (os=${osError?.message ?? '-'} code=${osError?.errorCode ?? '-'} ' + 'addr=${address?.address ?? '-'} typ=${address?.type.name ?? '-'})', + HandshakeException() => 'TLS-HANDSHAKE', + HttpException() => 'HTTP', + FormatException() => 'FORMAT (URL unparsbar?)', + _ => 'SONSTIGE', + }; + logger.error( + 'Navidrome Ping Fehler [$art] ' + 'url=$_serverUrl ' + 'scheme=${ziel?.scheme ?? '-'} host=${ziel?.host ?? '-'} ' + 'port=${ziel?.hasPort == true ? ziel?.port : '(default)'} ' + 'typ=${e.runtimeType} ' + 'msg=$e', + e, + StackTrace.current, + ); + debugPrint('Navidrome Ping Fehler [$art] $_serverUrl: $e'); return false; } }