diff --git a/lib/connector/meshcore_connector.dart b/lib/connector/meshcore_connector.dart index 606b870..95bce3b 100644 --- a/lib/connector/meshcore_connector.dart +++ b/lib/connector/meshcore_connector.dart @@ -748,7 +748,10 @@ class MeshCoreConnector extends ChangeNotifier { try { await FlutterBluePlus.stopScan(); } catch (e) { - debugPrint('[FBP] stopScan error in startScan (ignored): $e'); + _appDebugLogService?.warn( + 'stopScan error in startScan (ignored): $e', + tag: 'BLE Scan', + ); } } await _scanSubscription?.cancel(); @@ -808,7 +811,10 @@ class MeshCoreConnector extends ChangeNotifier { try { await FlutterBluePlus.stopScan(); } catch (e) { - debugPrint('[FBP] stopScan error (ignored): $e'); + _appDebugLogService?.warn( + 'stopScan error (ignored): $e', + tag: 'BLE Scan', + ); } } await _scanSubscription?.cancel(); diff --git a/lib/l10n/app_bg.arb b/lib/l10n/app_bg.arb index f71dfdd..379dd47 100644 --- a/lib/l10n/app_bg.arb +++ b/lib/l10n/app_bg.arb @@ -1809,7 +1809,7 @@ "usbScreenEmptyState": "Няма открити USB устройства. Включете едно и опитайте отново.", "usbErrorPermissionDenied": "Не беше разрешено достъпът през USB.", "usbErrorDeviceMissing": "Избраното USB устройство вече не е налично.", - "usbErrorInvalidPort": "Изберете валитно USB устройство.", + "usbErrorInvalidPort": "Изберете валидно USB устройство.", "usbErrorBusy": "Друг мол за свързване през USB вече е в процес на изпълнение.", "usbErrorNotConnected": "Няма свързано USB устройство.", "usbErrorOpenFailed": "Не успях да отворя избраното USB устройство.", diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 315c88c..87aa1e1 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -190,20 +190,20 @@ "appSettings_language": "Language", "appSettings_languageSystem": "System default", "appSettings_languageEn": "English", - "appSettings_languageFr": "Français", - "appSettings_languageEs": "Español", + "appSettings_languageFr": "Français", + "appSettings_languageEs": "Español", "appSettings_languageDe": "Deutsch", "appSettings_languagePl": "Polski", - "appSettings_languageSl": "Slovenščina", - "appSettings_languagePt": "Português", + "appSettings_languageSl": "Slovenščina", + "appSettings_languagePt": "Português", "appSettings_languageIt": "Italiano", - "appSettings_languageZh": "中文", + "appSettings_languageZh": "中文", "appSettings_languageSv": "Svenska", "appSettings_languageNl": "Nederlands", - "appSettings_languageSk": "Slovenčina", - "appSettings_languageBg": "Български", - "appSettings_languageRu": "Русский", - "appSettings_languageUk": "Українська", + "appSettings_languageSk": "Slovenčina", + "appSettings_languageBg": "Български", + "appSettings_languageRu": "Русский", + "appSettings_languageUk": "Українська", "appSettings_enableMessageTracing": "Enable Message Tracing", "appSettings_enableMessageTracingSubtitle": "Show detailed routing and timing metadata for messages", "appSettings_notifications": "Notifications", @@ -1351,7 +1351,7 @@ } } }, - "telemetry_temperatureValue": "{celsius}°C / {fahrenheit}°F", + "telemetry_temperatureValue": "{celsius}°C / {fahrenheit}°F", "@telemetry_temperatureValue": { "placeholders": { "celsius": { @@ -1401,7 +1401,7 @@ "channelPath_repeatsLabel": "Repeats", "channelPath_pathLabel": "Path {index}", "channelPath_observedLabel": "Observed", - "channelPath_observedPathTitle": "Observed path {index} • {hops}", + "channelPath_observedPathTitle": "Observed path {index} • {hops}", "@channelPath_observedPathTitle": { "placeholders": { "index": { @@ -1476,7 +1476,7 @@ }, "channelPath_pathLabelTitle": "Path", "channelPath_observedPathHeader": "Observed Path", - "channelPath_selectedPathLabel": "{label} • {prefixes}", + "channelPath_selectedPathLabel": "{label} • {prefixes}", "@channelPath_selectedPathLabel": { "placeholders": { "label": { diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index f29ef1d..a679063 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -1015,13 +1015,13 @@ abstract class AppLocalizations { /// No description provided for @appSettings_languageFr. /// /// In en, this message translates to: - /// **'Français'** + /// **'Français'** String get appSettings_languageFr; /// No description provided for @appSettings_languageEs. /// /// In en, this message translates to: - /// **'Español'** + /// **'Español'** String get appSettings_languageEs; /// No description provided for @appSettings_languageDe. @@ -1039,13 +1039,13 @@ abstract class AppLocalizations { /// No description provided for @appSettings_languageSl. /// /// In en, this message translates to: - /// **'Slovenščina'** + /// **'Slovenščina'** String get appSettings_languageSl; /// No description provided for @appSettings_languagePt. /// /// In en, this message translates to: - /// **'Português'** + /// **'Português'** String get appSettings_languagePt; /// No description provided for @appSettings_languageIt. @@ -1057,7 +1057,7 @@ abstract class AppLocalizations { /// No description provided for @appSettings_languageZh. /// /// In en, this message translates to: - /// **'中文'** + /// **'中文'** String get appSettings_languageZh; /// No description provided for @appSettings_languageSv. @@ -1075,25 +1075,25 @@ abstract class AppLocalizations { /// No description provided for @appSettings_languageSk. /// /// In en, this message translates to: - /// **'Slovenčina'** + /// **'Slovenčina'** String get appSettings_languageSk; /// No description provided for @appSettings_languageBg. /// /// In en, this message translates to: - /// **'Български'** + /// **'Български'** String get appSettings_languageBg; /// No description provided for @appSettings_languageRu. /// /// In en, this message translates to: - /// **'Русский'** + /// **'Русский'** String get appSettings_languageRu; /// No description provided for @appSettings_languageUk. /// /// In en, this message translates to: - /// **'Українська'** + /// **'Українська'** String get appSettings_languageUk; /// No description provided for @appSettings_enableMessageTracing. @@ -4409,7 +4409,7 @@ abstract class AppLocalizations { /// No description provided for @telemetry_temperatureValue. /// /// In en, this message translates to: - /// **'{celsius}°C / {fahrenheit}°F'** + /// **'{celsius}°C / {fahrenheit}°F'** String telemetry_temperatureValue(String celsius, String fahrenheit); /// No description provided for @neighbors_receivedData. @@ -4523,7 +4523,7 @@ abstract class AppLocalizations { /// No description provided for @channelPath_observedPathTitle. /// /// In en, this message translates to: - /// **'Observed path {index} • {hops}'** + /// **'Observed path {index} • {hops}'** String channelPath_observedPathTitle(int index, String hops); /// No description provided for @channelPath_noLocationData. @@ -4607,7 +4607,7 @@ abstract class AppLocalizations { /// No description provided for @channelPath_selectedPathLabel. /// /// In en, this message translates to: - /// **'{label} • {prefixes}'** + /// **'{label} • {prefixes}'** String channelPath_selectedPathLabel(String label, String prefixes); /// No description provided for @channelPath_noHopDetailsAvailable. diff --git a/lib/l10n/app_localizations_bg.dart b/lib/l10n/app_localizations_bg.dart index 39f827b..b964966 100644 --- a/lib/l10n/app_localizations_bg.dart +++ b/lib/l10n/app_localizations_bg.dart @@ -140,7 +140,7 @@ class AppLocalizationsBg extends AppLocalizations { 'Избраното USB устройство вече не е налично.'; @override - String get usbErrorInvalidPort => 'Изберете валитно USB устройство.'; + String get usbErrorInvalidPort => 'Изберете валидно USB устройство.'; @override String get usbErrorBusy => diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index 0ecff06..05ed0b9 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -489,10 +489,10 @@ class AppLocalizationsEn extends AppLocalizations { String get appSettings_languageEn => 'English'; @override - String get appSettings_languageFr => 'Français'; + String get appSettings_languageFr => 'Français'; @override - String get appSettings_languageEs => 'Español'; + String get appSettings_languageEs => 'Español'; @override String get appSettings_languageDe => 'Deutsch'; @@ -501,16 +501,16 @@ class AppLocalizationsEn extends AppLocalizations { String get appSettings_languagePl => 'Polski'; @override - String get appSettings_languageSl => 'Slovenščina'; + String get appSettings_languageSl => 'Slovenščina'; @override - String get appSettings_languagePt => 'Português'; + String get appSettings_languagePt => 'Português'; @override String get appSettings_languageIt => 'Italiano'; @override - String get appSettings_languageZh => '中文'; + String get appSettings_languageZh => '中文'; @override String get appSettings_languageSv => 'Svenska'; @@ -519,16 +519,16 @@ class AppLocalizationsEn extends AppLocalizations { String get appSettings_languageNl => 'Nederlands'; @override - String get appSettings_languageSk => 'Slovenčina'; + String get appSettings_languageSk => 'Slovenčina'; @override - String get appSettings_languageBg => 'Български'; + String get appSettings_languageBg => 'Български'; @override - String get appSettings_languageRu => 'Русский'; + String get appSettings_languageRu => 'Русский'; @override - String get appSettings_languageUk => 'Українська'; + String get appSettings_languageUk => 'Українська'; @override String get appSettings_enableMessageTracing => 'Enable Message Tracing'; @@ -2465,7 +2465,7 @@ class AppLocalizationsEn extends AppLocalizations { @override String telemetry_temperatureValue(String celsius, String fahrenheit) { - return '$celsius°C / $fahrenheit°F'; + return '$celsius°C / $fahrenheit°F'; } @override @@ -2533,7 +2533,7 @@ class AppLocalizationsEn extends AppLocalizations { @override String channelPath_observedPathTitle(int index, String hops) { - return 'Observed path $index • $hops'; + return 'Observed path $index • $hops'; } @override @@ -2588,7 +2588,7 @@ class AppLocalizationsEn extends AppLocalizations { @override String channelPath_selectedPathLabel(String label, String prefixes) { - return '$label • $prefixes'; + return '$label • $prefixes'; } @override diff --git a/lib/l10n/app_localizations_sv.dart b/lib/l10n/app_localizations_sv.dart index c68faf5..e36fc2a 100644 --- a/lib/l10n/app_localizations_sv.dart +++ b/lib/l10n/app_localizations_sv.dart @@ -126,7 +126,7 @@ class AppLocalizationsSv extends AppLocalizations { @override String get usbScreenNote => - 'USB-seriell kommunikation är aktiv på stöderdade Android-enheter och skrivbordsplattformar.'; + 'USB-seriell kommunikation är aktiv på stödda Android-enheter och skrivbordsplattformar.'; @override String get usbScreenEmptyState => diff --git a/lib/l10n/app_sv.arb b/lib/l10n/app_sv.arb index 025294a..836bef0 100644 --- a/lib/l10n/app_sv.arb +++ b/lib/l10n/app_sv.arb @@ -1802,7 +1802,7 @@ "contacts_searchFavorites": "Sök {number}{str} Favoriter...", "contacts_searchUsers": "Sök {number}{str} användare...", "contacts_searchRoomServers": "Sök {number}{str} Room-servrar...", - "usbScreenNote": "USB-seriell kommunikation är aktiv på stöderdade Android-enheter och skrivbordsplattformar.", + "usbScreenNote": "USB-seriell kommunikation är aktiv på stödda Android-enheter och skrivbordsplattformar.", "usbScreenStatus": "Välj en USB-enhet", "usbScreenSubtitle": "Välj en detekterad seriell enhet och anslut direkt till din MeshCore-nod.", "usbScreenTitle": "Anslut via USB", diff --git a/lib/screens/scanner_screen.dart b/lib/screens/scanner_screen.dart index f7966e9..5d7695c 100644 --- a/lib/screens/scanner_screen.dart +++ b/lib/screens/scanner_screen.dart @@ -6,6 +6,7 @@ import 'package:provider/provider.dart'; import '../connector/meshcore_connector.dart'; import '../l10n/l10n.dart'; +import '../utils/app_logger.dart'; import '../widgets/adaptive_app_bar_title.dart'; import '../widgets/device_tile.dart'; import 'contacts_screen.dart'; @@ -60,7 +61,7 @@ class _ScannerScreenState extends State { } }, onError: (Object e) { - debugPrint("Scanner adapterState stream error: $e"); + appLogger.warn('Adapter state stream error: $e', tag: 'ScannerScreen'); }, ); } @@ -86,7 +87,7 @@ class _ScannerScreenState extends State { ? IconButton( icon: const Icon(Icons.arrow_back), onPressed: () { - debugPrint('ScannerScreen: back button pressed'); + appLogger.info('Back button pressed', tag: 'ScannerScreen'); Navigator.of(context).maybePop(); }, ) @@ -131,8 +132,9 @@ class _ScannerScreenState extends State { if (usbSupported) FloatingActionButton.extended( onPressed: () { - debugPrint( - 'ScannerScreen: USB selected, opening UsbScreen', + appLogger.info( + 'USB selected, opening UsbScreen', + tag: 'ScannerScreen', ); Navigator.of(context).push( MaterialPageRoute(builder: (_) => const UsbScreen()), @@ -153,8 +155,9 @@ class _ScannerScreenState extends State { } else { unawaited( connector.startScan().catchError((e) { - debugPrint( - "Scanner screen startScan error: $e", + appLogger.warn( + 'startScan error: $e', + tag: 'ScannerScreen', ); }), ); diff --git a/lib/screens/usb_screen.dart b/lib/screens/usb_screen.dart index 8ee739b..5c4dfb1 100644 --- a/lib/screens/usb_screen.dart +++ b/lib/screens/usb_screen.dart @@ -8,6 +8,7 @@ import 'package:provider/provider.dart'; import '../connector/meshcore_connector.dart'; import '../connector/meshcore_connector_usb.dart'; import '../l10n/l10n.dart'; +import '../utils/app_logger.dart'; import '../utils/platform_info.dart'; import '../utils/usb_port_labels.dart'; import 'contacts_screen.dart'; @@ -109,7 +110,7 @@ class _UsbScreenState extends State { leading: IconButton( icon: const Icon(Icons.arrow_back), onPressed: () { - debugPrint('UsbScreen: back button pressed'); + appLogger.info('Back button pressed', tag: 'UsbScreen'); Navigator.of(context).maybePop(); }, ), @@ -124,8 +125,9 @@ class _UsbScreenState extends State { PlatformInfo.isIOS) TextButton.icon( onPressed: () { - debugPrint( - 'UsbScreen: Bluetooth selected, opening ScannerScreen', + appLogger.info( + 'Bluetooth selected, opening ScannerScreen', + tag: 'UsbScreen', ); Navigator.of(context).pushReplacement( MaterialPageRoute(builder: (_) => const ScannerScreen()), @@ -218,8 +220,9 @@ class _UsbScreenState extends State { onPressed: _isLoadingPorts || _isConnecting ? null : () { - debugPrint( - 'UsbScreen: refresh ports pressed', + appLogger.info( + 'Refresh ports pressed', + tag: 'UsbScreen', ); _loadPorts(); }, @@ -234,8 +237,9 @@ class _UsbScreenState extends State { final rawPortName = normalizeUsbPortName( _selectedPort!, ); - debugPrint( - 'UsbScreen: connect pressed for $_selectedPort (raw: $rawPortName)', + appLogger.info( + 'Connect pressed for $_selectedPort (raw: $rawPortName)', + tag: 'UsbScreen', ); _connectSelectedPort(); } @@ -262,8 +266,9 @@ class _UsbScreenState extends State { onPressed: _isLoadingPorts || _isConnecting ? null : () { - debugPrint( - 'UsbScreen: refresh ports pressed', + appLogger.info( + 'Refresh ports pressed', + tag: 'UsbScreen', ); _loadPorts(); }, @@ -280,8 +285,9 @@ class _UsbScreenState extends State { final rawPortName = normalizeUsbPortName( _selectedPort!, ); - debugPrint( - 'UsbScreen: connect pressed for $_selectedPort (raw: $rawPortName)', + appLogger.info( + 'Connect pressed for $_selectedPort (raw: $rawPortName)', + tag: 'UsbScreen', ); _connectSelectedPort(); } @@ -413,7 +419,7 @@ class _UsbScreenState extends State { _selectedPort = port; _errorText = null; }); - debugPrint('UsbScreen: selected port $port'); + appLogger.info('Selected port $port', tag: 'UsbScreen'); }, leading: Icon( Icons.usb, @@ -511,8 +517,9 @@ class _UsbScreenState extends State { try { await _usbConnector.connect(portName: rawPortName); } catch (error, stackTrace) { - debugPrint( - 'UsbScreen: connect failed for $rawPortName: $error\n$stackTrace', + appLogger.error( + 'Connect failed for $rawPortName: $error\n$stackTrace', + tag: 'UsbScreen', ); if (!mounted) return; setState(() { diff --git a/lib/services/usb_serial_service_native.dart b/lib/services/usb_serial_service_native.dart index 66de3ab..f758a1f 100644 --- a/lib/services/usb_serial_service_native.dart +++ b/lib/services/usb_serial_service_native.dart @@ -135,7 +135,6 @@ class UsbSerialService { } on PlatformException catch (error) { _status = UsbSerialStatus.disconnected; final msg = error.message ?? error.code; - debugPrint('[USB Serial] Android connect failed: $msg'); _debugLogService?.error( 'Android connect failed: $msg', tag: 'USB Serial', @@ -180,7 +179,6 @@ class UsbSerialService { if (openStatus != FlOpenStatus.open) { final msg = 'Failed to open USB port $candidate (status: $openStatus)'; - debugPrint('[USB Serial] $msg'); _debugLogService?.error(msg, tag: 'USB Serial'); // Not a FlSerialException — treat as terminal failure _status = UsbSerialStatus.disconnected; @@ -204,9 +202,6 @@ class UsbSerialService { } on FlSerialException catch (error) { // The native fl_open() already called fl_close() on failure // internally, so no extra cleanup is needed here for this candidate. - debugPrint( - '[USB Serial] Failed to open $candidate: ${error.msg} (code ${error.error})', - ); _debugLogService?.warn( 'Failed to open $candidate: ${error.msg} (code ${error.error})', tag: 'USB Serial', @@ -215,11 +210,8 @@ class UsbSerialService { // Try next candidate } catch (error, stackTrace) { _status = UsbSerialStatus.disconnected; - debugPrint( - '[USB Serial] Unexpected error opening $candidate: $error\n$stackTrace', - ); _debugLogService?.error( - 'Unexpected error opening $candidate: $error', + 'Unexpected error opening $candidate: $error\n$stackTrace', tag: 'USB Serial', ); rethrow; @@ -232,7 +224,6 @@ class UsbSerialService { final msg = lastError != null ? 'Failed to open USB port $primary: ${lastError.msg} (code ${lastError.error})' : 'Failed to open USB port $primary'; - debugPrint('[USB Serial] $msg'); _debugLogService?.error(msg, tag: 'USB Serial'); throw StateError(msg); }