From 70276127687b9fc176fdebd09e9eb3963b492038 Mon Sep 17 00:00:00 2001 From: Strycher Date: Sat, 20 Jun 2026 14:28:09 -0400 Subject: [PATCH] chore(#26): apply dart format to green CI format check CI's `dart format --set-exit-if-changed .` step is repo-wide. My A/B/C commit hand-wrote the .catchError blocks without running the formatter, and 2 settings views carried pre-existing format drift from #28. dart format reflows all three (whitespace only, identical logic): - lib/connector/meshcore_connector.dart (this PR's blocks) - lib/screens/settings/app_settings_view.dart (pre-existing, #28) - lib/screens/settings/message_settings_view.dart (pre-existing, #28) Co-Authored-By: Claude Opus 4.8 --- lib/connector/meshcore_connector.dart | 177 ++++++++++-------- lib/screens/settings/app_settings_view.dart | 83 ++++++-- .../settings/message_settings_view.dart | 30 ++- 3 files changed, 185 insertions(+), 105 deletions(-) diff --git a/lib/connector/meshcore_connector.dart b/lib/connector/meshcore_connector.dart index 478fa37..2414c19 100644 --- a/lib/connector/meshcore_connector.dart +++ b/lib/connector/meshcore_connector.dart @@ -4687,46 +4687,48 @@ class MeshCoreConnector extends ChangeNotifier { if (settings.notificationsEnabled && settings.notifyOnNewMessage) { final msg = message; // capture for closure final c = contact; // capture contact reference - unawaited(() async { - final translationResult = await translateContactMessage( - msg.senderKeyHex, - msg, - ); - if (c?.type == advTypeChat) { - final resolvedText = - (translationResult != null && - translationResult.status == - MessageTranslationStatus.completed && - translationResult.translatedText.trim().isNotEmpty) - ? translationResult.translatedText.trim() - : msg.text.trim(); - await _notificationService.showMessageNotification( - contactName: c?.name ?? 'Unknown', - message: resolvedText, - contactId: msg.senderKeyHex, - badgeCount: getTotalUnreadCount(), + unawaited( + () async { + final translationResult = await translateContactMessage( + msg.senderKeyHex, + msg, ); - } else if (c?.type == advTypeRoom) { - final resolvedText = - (translationResult != null && - translationResult.status == - MessageTranslationStatus.completed && - translationResult.translatedText.trim().isNotEmpty) - ? translationResult.translatedText.trim() - : msg.text.trim(); - await _notificationService.showMessageNotification( - contactName: c?.name ?? 'Unknown Room', - message: resolvedText, - contactId: msg.senderKeyHex, - badgeCount: getTotalUnreadCount(), + if (c?.type == advTypeChat) { + final resolvedText = + (translationResult != null && + translationResult.status == + MessageTranslationStatus.completed && + translationResult.translatedText.trim().isNotEmpty) + ? translationResult.translatedText.trim() + : msg.text.trim(); + await _notificationService.showMessageNotification( + contactName: c?.name ?? 'Unknown', + message: resolvedText, + contactId: msg.senderKeyHex, + badgeCount: getTotalUnreadCount(), + ); + } else if (c?.type == advTypeRoom) { + final resolvedText = + (translationResult != null && + translationResult.status == + MessageTranslationStatus.completed && + translationResult.translatedText.trim().isNotEmpty) + ? translationResult.translatedText.trim() + : msg.text.trim(); + await _notificationService.showMessageNotification( + contactName: c?.name ?? 'Unknown Room', + message: resolvedText, + contactId: msg.senderKeyHex, + badgeCount: getTotalUnreadCount(), + ); + } + }().catchError((Object e) { + _appDebugLogService?.error( + 'Failed to translate/notify incoming message: $e', + tag: 'Notification', ); - } - }().catchError((Object e) { - _appDebugLogService?.error( - 'Failed to translate/notify incoming message: $e', - tag: 'Notification', - ); - })); + }), + ); } } _handleQueuedMessageReceived(); @@ -5021,20 +5023,22 @@ class MeshCoreConnector extends ChangeNotifier { translationResult.translatedText.trim().isNotEmpty) ? translationResult.translatedText.trim() : message.text.trim(); - unawaited(() async { - await _notificationService.showChannelMessageNotification( - channelName: label, - senderName: message.senderName, - message: resolvedText, - channelIndex: message.channelIndex, - badgeCount: getTotalUnreadCount(), - ); - }().catchError((Object e) { - _appDebugLogService?.error( - 'Failed to notify channel message: $e', - tag: 'Notification', - ); - })); + unawaited( + () async { + await _notificationService.showChannelMessageNotification( + channelName: label, + senderName: message.senderName, + message: resolvedText, + channelIndex: message.channelIndex, + badgeCount: getTotalUnreadCount(), + ); + }().catchError((Object e) { + _appDebugLogService?.error( + 'Failed to notify channel message: $e', + tag: 'Notification', + ); + }), + ); } void _handleIncomingChannelMessage(Uint8List frame) async { @@ -5065,18 +5069,23 @@ class MeshCoreConnector extends ChangeNotifier { notifyListeners(); if (isNew && !message.isOutgoing) { final msg = message; // capture for closure - unawaited(() async { - final translationResult = await translateChannelMessage( - msg.channelIndex!, - msg, - ); - _maybeNotifyChannelMessage(msg, translationResult: translationResult); - }().catchError((Object e) { - _appDebugLogService?.error( - 'Failed to translate/notify channel message: $e', - tag: 'Notification', - ); - })); + unawaited( + () async { + final translationResult = await translateChannelMessage( + msg.channelIndex!, + msg, + ); + _maybeNotifyChannelMessage( + msg, + translationResult: translationResult, + ); + }().catchError((Object e) { + _appDebugLogService?.error( + 'Failed to translate/notify channel message: $e', + tag: 'Notification', + ); + }), + ); } _handleQueuedMessageReceived(); } else if (_isSyncingQueuedMessages) { @@ -5156,25 +5165,27 @@ class MeshCoreConnector extends ChangeNotifier { notifyListeners(); if (isNew) { // Run translation + notification asynchronously to avoid blocking - unawaited(() async { - final translationResult = await translateChannelMessage( - channel.index, - message, - ); - final label = channel.name.isEmpty - ? 'Channel ${channel.index}' - : channel.name; - _maybeNotifyChannelMessage( - message, - channelName: label, - translationResult: translationResult, - ); - }().catchError((Object e) { - _appDebugLogService?.error( - 'Failed to translate/notify channel message (log): $e', - tag: 'Notification', - ); - })); + unawaited( + () async { + final translationResult = await translateChannelMessage( + channel.index, + message, + ); + final label = channel.name.isEmpty + ? 'Channel ${channel.index}' + : channel.name; + _maybeNotifyChannelMessage( + message, + channelName: label, + translationResult: translationResult, + ); + }().catchError((Object e) { + _appDebugLogService?.error( + 'Failed to translate/notify channel message (log): $e', + tag: 'Notification', + ); + }), + ); } return; } catch (e) { diff --git a/lib/screens/settings/app_settings_view.dart b/lib/screens/settings/app_settings_view.dart index 247ac54..a2a57e4 100644 --- a/lib/screens/settings/app_settings_view.dart +++ b/lib/screens/settings/app_settings_view.dart @@ -107,7 +107,10 @@ class AppSettingsView extends StatelessWidget { ), value: settingsService.settings.enableMessageTracing, onChanged: (value) { - persistSetting(context, () => settingsService.setEnableMessageTracing(value)); + persistSetting( + context, + () => settingsService.setEnableMessageTracing(value), + ); }, ), ], @@ -136,7 +139,10 @@ class AppSettingsView extends StatelessWidget { subtitle: Text(context.l10n.appSettings_showRepeatersSubtitle), value: settingsService.settings.mapShowRepeaters, onChanged: (value) { - persistSetting(context, () => settingsService.setMapShowRepeaters(value)); + persistSetting( + context, + () => settingsService.setMapShowRepeaters(value), + ); }, ), const Divider(height: 1), @@ -146,7 +152,10 @@ class AppSettingsView extends StatelessWidget { subtitle: Text(context.l10n.appSettings_showChatNodesSubtitle), value: settingsService.settings.mapShowChatNodes, onChanged: (value) { - persistSetting(context, () => settingsService.setMapShowChatNodes(value)); + persistSetting( + context, + () => settingsService.setMapShowChatNodes(value), + ); }, ), const Divider(height: 1), @@ -156,7 +165,10 @@ class AppSettingsView extends StatelessWidget { subtitle: Text(context.l10n.appSettings_showOtherNodesSubtitle), value: settingsService.settings.mapShowOtherNodes, onChanged: (value) { - persistSetting(context, () => settingsService.setMapShowOtherNodes(value)); + persistSetting( + context, + () => settingsService.setMapShowOtherNodes(value), + ); }, ), const Divider(height: 1), @@ -233,7 +245,10 @@ class AppSettingsView extends StatelessWidget { title: Text(context.l10n.translation_enableTitle), subtitle: Text(context.l10n.translation_enableSubtitle), value: settings.translationEnabled, - onChanged: (value) => persistSetting(context, () => settingsService.setTranslationEnabled(value)), + onChanged: (value) => persistSetting( + context, + () => settingsService.setTranslationEnabled(value), + ), ), const Divider(height: 1), SwitchListTile( @@ -251,7 +266,11 @@ class AppSettingsView extends StatelessWidget { ), value: settings.autoTranslateIncomingMessages, onChanged: translationEnabled - ? (value) => persistSetting(context, () => settingsService.setAutoTranslateIncomingMessages(value)) + ? (value) => persistSetting( + context, + () => + settingsService.setAutoTranslateIncomingMessages(value), + ) : null, ), const Divider(height: 1), @@ -270,7 +289,10 @@ class AppSettingsView extends StatelessWidget { ), value: settings.composerTranslationEnabled, onChanged: translationEnabled - ? (value) => persistSetting(context, () => settingsService.setComposerTranslationEnabled(value)) + ? (value) => persistSetting( + context, + () => settingsService.setComposerTranslationEnabled(value), + ) : null, ), const Divider(height: 1), @@ -307,7 +329,12 @@ class AppSettingsView extends StatelessWidget { onChanged: settings.translationDownloadedModels.isEmpty ? null : (value) { - persistSetting(context, () => settingsService.setTranslationSelectedModelId(value)); + persistSetting( + context, + () => settingsService.setTranslationSelectedModelId( + value, + ), + ); }, ), ), @@ -351,7 +378,10 @@ class AppSettingsView extends StatelessWidget { children: [ _TranslationUrlField( initialValue: settings.translationModelSourceUrl ?? '', - onChanged: (value) => persistSetting(context, () => settingsService.setTranslationModelSourceUrl(value)), + onChanged: (value) => persistSetting( + context, + () => settingsService.setTranslationModelSourceUrl(value), + ), onDownload: translationService.isBusy ? null : (url) => _downloadTranslationModel( @@ -545,7 +575,10 @@ class AppSettingsView extends StatelessWidget { groupValue: settingsService.settings.themeMode, onChanged: (value) { if (value != null) { - persistSetting(context, () => settingsService.setThemeMode(value)); + persistSetting( + context, + () => settingsService.setThemeMode(value), + ); Navigator.pop(context); } }, @@ -600,7 +633,10 @@ class AppSettingsView extends StatelessWidget { groupValue: settingsService.settings.clockFormat, onChanged: (value) { if (value != null) { - persistSetting(context, () => settingsService.setClockFormat(value)); + persistSetting( + context, + () => settingsService.setClockFormat(value), + ); Navigator.pop(context); } }, @@ -698,7 +734,10 @@ class AppSettingsView extends StatelessWidget { child: RadioGroup( groupValue: settingsService.settings.languageOverride, onChanged: (value) { - persistSetting(context, () => settingsService.setLanguageOverride(value)); + persistSetting( + context, + () => settingsService.setLanguageOverride(value), + ); Navigator.pop(context); }, child: Column( @@ -806,7 +845,10 @@ class AppSettingsView extends StatelessWidget { groupValue: settingsService.settings.mapTimeFilterHours, onChanged: (value) { if (value != null) { - persistSetting(context, () => settingsService.setMapTimeFilterHours(value)); + persistSetting( + context, + () => settingsService.setMapTimeFilterHours(value), + ); Navigator.pop(context); } }, @@ -860,7 +902,10 @@ class AppSettingsView extends StatelessWidget { groupValue: settingsService.settings.unitSystem, onChanged: (value) { if (value != null) { - persistSetting(context, () => settingsService.setUnitSystem(value)); + persistSetting( + context, + () => settingsService.setUnitSystem(value), + ); Navigator.pop(context); } }, @@ -898,7 +943,10 @@ class AppSettingsView extends StatelessWidget { currentLanguageCode: settingsService.settings.translationTargetLanguageCode, onLanguageSelected: (value) { - persistSetting(context, () => settingsService.setTranslationTargetLanguageCode(value)); + persistSetting( + context, + () => settingsService.setTranslationTargetLanguageCode(value), + ); Navigator.pop(context); }, ), @@ -1045,7 +1093,10 @@ class AppSettingsView extends StatelessWidget { }).toList(), onChanged: (value) { if (value != null) { - persistSetting(context, () => settingsService.setSelectedCyr2LatProfile(value)); + persistSetting( + context, + () => settingsService.setSelectedCyr2LatProfile(value), + ); } }, ), diff --git a/lib/screens/settings/message_settings_view.dart b/lib/screens/settings/message_settings_view.dart index 50ff4cd..151cc60 100644 --- a/lib/screens/settings/message_settings_view.dart +++ b/lib/screens/settings/message_settings_view.dart @@ -124,7 +124,10 @@ class MessageSettingsView extends StatelessWidget { value: settingsService.settings.notifyOnNewMessage, onChanged: settingsService.settings.notificationsEnabled ? (value) { - persistSetting(context, () => settingsService.setNotifyOnNewMessage(value)); + persistSetting( + context, + () => settingsService.setNotifyOnNewMessage(value), + ); } : null, ), @@ -155,7 +158,10 @@ class MessageSettingsView extends StatelessWidget { value: settingsService.settings.notifyOnNewChannelMessage, onChanged: settingsService.settings.notificationsEnabled ? (value) { - persistSetting(context, () => settingsService.setNotifyOnNewChannelMessage(value)); + persistSetting( + context, + () => settingsService.setNotifyOnNewChannelMessage(value), + ); } : null, ), @@ -186,7 +192,10 @@ class MessageSettingsView extends StatelessWidget { value: settingsService.settings.notifyOnNewAdvert, onChanged: settingsService.settings.notificationsEnabled ? (value) { - persistSetting(context, () => settingsService.setNotifyOnNewAdvert(value)); + persistSetting( + context, + () => settingsService.setNotifyOnNewAdvert(value), + ); } : null, ), @@ -218,7 +227,10 @@ class MessageSettingsView extends StatelessWidget { ), value: settingsService.settings.clearPathOnMaxRetry, onChanged: (value) { - persistSetting(context, () => settingsService.setClearPathOnMaxRetry(value)); + persistSetting( + context, + () => settingsService.setClearPathOnMaxRetry(value), + ); showDismissibleSnackBar( context, content: Text( @@ -236,7 +248,10 @@ class MessageSettingsView extends StatelessWidget { title: Text(context.l10n.appSettings_jumpToOldestUnread), subtitle: Text(context.l10n.appSettings_jumpToOldestUnreadSubtitle), value: settingsService.settings.jumpToOldestUnread, - onChanged: (value) => persistSetting(context, () => settingsService.setJumpToOldestUnread(value)), + onChanged: (value) => persistSetting( + context, + () => settingsService.setJumpToOldestUnread(value), + ), ), const Divider(height: 1), SwitchListTile( @@ -245,7 +260,10 @@ class MessageSettingsView extends StatelessWidget { subtitle: Text(context.l10n.appSettings_autoRouteRotationSubtitle), value: settingsService.settings.autoRouteRotationEnabled, onChanged: (value) { - persistSetting(context, () => settingsService.setAutoRouteRotationEnabled(value)); + persistSetting( + context, + () => settingsService.setAutoRouteRotationEnabled(value), + ); showDismissibleSnackBar( context, content: Text(