This commit is contained in:
just_stuff_tm 2026-03-03 16:44:13 -05:00 committed by just-stuff-tm
parent 367e47bb1e
commit 524558c511
11 changed files with 79 additions and 72 deletions

View file

@ -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();

View file

@ -1809,7 +1809,7 @@
"usbScreenEmptyState": "Няма открити USB устройства. Включете едно и опитайте отново.",
"usbErrorPermissionDenied": "Не беше разрешено достъпът през USB.",
"usbErrorDeviceMissing": "Избраното USB устройство вече не е налично.",
"usbErrorInvalidPort": "Изберете валитно USB устройство.",
"usbErrorInvalidPort": "Изберете валидно USB устройство.",
"usbErrorBusy": "Друг мол за свързване през USB вече е в процес на изпълнение.",
"usbErrorNotConnected": "Няма свързано USB устройство.",
"usbErrorOpenFailed": "Не успях да отворя избраното USB устройство.",

View file

@ -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": {

View file

@ -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.

View file

@ -140,7 +140,7 @@ class AppLocalizationsBg extends AppLocalizations {
'Избраното USB устройство вече не е налично.';
@override
String get usbErrorInvalidPort => 'Изберете валитно USB устройство.';
String get usbErrorInvalidPort => 'Изберете валидно USB устройство.';
@override
String get usbErrorBusy =>

View file

@ -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

View file

@ -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 =>

View file

@ -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",

View file

@ -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<ScannerScreen> {
}
},
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<ScannerScreen> {
? 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<ScannerScreen> {
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<ScannerScreen> {
} else {
unawaited(
connector.startScan().catchError((e) {
debugPrint(
"Scanner screen startScan error: $e",
appLogger.warn(
'startScan error: $e',
tag: 'ScannerScreen',
);
}),
);

View file

@ -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<UsbScreen> {
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<UsbScreen> {
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<UsbScreen> {
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<UsbScreen> {
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<UsbScreen> {
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<UsbScreen> {
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<UsbScreen> {
_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<UsbScreen> {
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(() {

View file

@ -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);
}