mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-07-11 02:57:04 +10:00
Updated PR and Added snackbar Translations
This commit is contained in:
@@ -0,0 +1,48 @@
|
|||||||
|
# Local Agent Operating Rules (Untracked)
|
||||||
|
|
||||||
|
This file is NOT version-controlled.
|
||||||
|
It overrides default agent behavior for this workstation only.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Core Behavior
|
||||||
|
|
||||||
|
- Always search the codebase before editing.
|
||||||
|
- Produce a short plan before modifying BLE or protocol logic.
|
||||||
|
- Never modify BLE frame structure or command codes without explicit approval.
|
||||||
|
- After editing connector code, re-check command/response mappings.
|
||||||
|
- Never perform destructive operations (delete files, mass refactor) without confirmation.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Protocol Discipline
|
||||||
|
|
||||||
|
- maxFrameSize must remain 172 unless explicitly instructed.
|
||||||
|
- Identity hash size is 1 byte (PATH_HASH_SIZE).
|
||||||
|
- Companion radio formats must not change silently.
|
||||||
|
- Command codes and response codes must remain backward-compatible.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Coding Discipline
|
||||||
|
|
||||||
|
- Keep modifications minimal.
|
||||||
|
- Prefer refactoring over rewriting.
|
||||||
|
- Follow existing Flutter patterns (StatelessWidget + Consumer).
|
||||||
|
- Avoid premature abstraction.
|
||||||
|
- Explain what changed and why.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Learning Mode
|
||||||
|
|
||||||
|
When discovering:
|
||||||
|
- a working build command
|
||||||
|
- a protocol quirk
|
||||||
|
- a confirmed packet layout rule
|
||||||
|
|
||||||
|
Append a concise bullet to:
|
||||||
|
|
||||||
|
.local-agent/memory.local.md
|
||||||
|
|
||||||
|
Keep memory under 15 bullets max.
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
\# Local Learned Patterns (Machine-Specific)
|
||||||
|
|
||||||
|
(empty)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -363,6 +363,14 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"channels_channelDeleteFailed": "Failed to delete channel \"{name}\"",
|
||||||
|
"@channels_channelDeleteFailed": {
|
||||||
|
"placeholders": {
|
||||||
|
"name": {
|
||||||
|
"type": "String"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"channels_channelDeleted": "Channel \"{name}\" deleted",
|
"channels_channelDeleted": "Channel \"{name}\" deleted",
|
||||||
"@channels_channelDeleted": {
|
"@channels_channelDeleted": {
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
|
|||||||
@@ -1570,6 +1570,12 @@ abstract class AppLocalizations {
|
|||||||
/// **'Delete \"{name}\"? This cannot be undone.'**
|
/// **'Delete \"{name}\"? This cannot be undone.'**
|
||||||
String channels_deleteChannelConfirm(String name);
|
String channels_deleteChannelConfirm(String name);
|
||||||
|
|
||||||
|
/// No description provided for @channels_channelDeleteFailed.
|
||||||
|
///
|
||||||
|
/// In en, this message translates to:
|
||||||
|
/// **'Failed to delete channel \"{name}\"'**
|
||||||
|
String channels_channelDeleteFailed(String name);
|
||||||
|
|
||||||
/// No description provided for @channels_channelDeleted.
|
/// No description provided for @channels_channelDeleted.
|
||||||
///
|
///
|
||||||
/// In en, this message translates to:
|
/// In en, this message translates to:
|
||||||
|
|||||||
@@ -812,6 +812,11 @@ class AppLocalizationsBg extends AppLocalizations {
|
|||||||
return 'Изтрий \"$name\"? Това не може да бъде отменено.';
|
return 'Изтрий \"$name\"? Това не може да бъде отменено.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String channels_channelDeleteFailed(String name) {
|
||||||
|
return 'Failed to delete channel \"$name\"';
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String channels_channelDeleted(String name) {
|
String channels_channelDeleted(String name) {
|
||||||
return 'Каналът \"$name\" е изтрит';
|
return 'Каналът \"$name\" е изтрит';
|
||||||
|
|||||||
@@ -809,6 +809,11 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||||||
return 'Löschen von \"$name\"? Dies kann nicht rückgängig gemacht werden.';
|
return 'Löschen von \"$name\"? Dies kann nicht rückgängig gemacht werden.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String channels_channelDeleteFailed(String name) {
|
||||||
|
return 'Failed to delete channel \"$name\"';
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String channels_channelDeleted(String name) {
|
String channels_channelDeleted(String name) {
|
||||||
return 'Kanal \"$name\" gelöscht';
|
return 'Kanal \"$name\" gelöscht';
|
||||||
|
|||||||
@@ -801,6 +801,11 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||||||
return 'Delete \"$name\"? This cannot be undone.';
|
return 'Delete \"$name\"? This cannot be undone.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String channels_channelDeleteFailed(String name) {
|
||||||
|
return 'Failed to delete channel \"$name\"';
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String channels_channelDeleted(String name) {
|
String channels_channelDeleted(String name) {
|
||||||
return 'Channel \"$name\" deleted';
|
return 'Channel \"$name\" deleted';
|
||||||
|
|||||||
@@ -810,6 +810,11 @@ class AppLocalizationsEs extends AppLocalizations {
|
|||||||
return 'Eliminar \"$name\"? Esto no se puede deshacer.';
|
return 'Eliminar \"$name\"? Esto no se puede deshacer.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String channels_channelDeleteFailed(String name) {
|
||||||
|
return 'Failed to delete channel \"$name\"';
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String channels_channelDeleted(String name) {
|
String channels_channelDeleted(String name) {
|
||||||
return 'Canal \"$name\" eliminado';
|
return 'Canal \"$name\" eliminado';
|
||||||
|
|||||||
@@ -812,6 +812,11 @@ class AppLocalizationsFr extends AppLocalizations {
|
|||||||
return 'Supprimer $name? Cela ne peut pas être annulé.';
|
return 'Supprimer $name? Cela ne peut pas être annulé.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String channels_channelDeleteFailed(String name) {
|
||||||
|
return 'Failed to delete channel \"$name\"';
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String channels_channelDeleted(String name) {
|
String channels_channelDeleted(String name) {
|
||||||
return 'Le canal \"$name\" a été supprimé';
|
return 'Le canal \"$name\" a été supprimé';
|
||||||
|
|||||||
@@ -808,6 +808,11 @@ class AppLocalizationsIt extends AppLocalizations {
|
|||||||
return 'Eliminare \"$name\"? Non può essere annullato.';
|
return 'Eliminare \"$name\"? Non può essere annullato.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String channels_channelDeleteFailed(String name) {
|
||||||
|
return 'Failed to delete channel \"$name\"';
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String channels_channelDeleted(String name) {
|
String channels_channelDeleted(String name) {
|
||||||
return 'Canale \"$name\" eliminato';
|
return 'Canale \"$name\" eliminato';
|
||||||
|
|||||||
@@ -806,6 +806,11 @@ class AppLocalizationsNl extends AppLocalizations {
|
|||||||
return 'Verwijderen \"$name\"? Dit kan niet worden teruggedraaid.';
|
return 'Verwijderen \"$name\"? Dit kan niet worden teruggedraaid.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String channels_channelDeleteFailed(String name) {
|
||||||
|
return 'Failed to delete channel \"$name\"';
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String channels_channelDeleted(String name) {
|
String channels_channelDeleted(String name) {
|
||||||
return 'Kanaal \"$name\" verwijderd';
|
return 'Kanaal \"$name\" verwijderd';
|
||||||
|
|||||||
@@ -811,6 +811,11 @@ class AppLocalizationsPl extends AppLocalizations {
|
|||||||
return 'Usuń \"$name\"? Nie można tego cofnąć.';
|
return 'Usuń \"$name\"? Nie można tego cofnąć.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String channels_channelDeleteFailed(String name) {
|
||||||
|
return 'Failed to delete channel \"$name\"';
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String channels_channelDeleted(String name) {
|
String channels_channelDeleted(String name) {
|
||||||
return 'Kanał \"$name\" usunięto';
|
return 'Kanał \"$name\" usunięto';
|
||||||
|
|||||||
@@ -811,6 +811,11 @@ class AppLocalizationsPt extends AppLocalizations {
|
|||||||
return 'Excluir \"$name\"? Não pode ser desfeito.';
|
return 'Excluir \"$name\"? Não pode ser desfeito.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String channels_channelDeleteFailed(String name) {
|
||||||
|
return 'Failed to delete channel \"$name\"';
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String channels_channelDeleted(String name) {
|
String channels_channelDeleted(String name) {
|
||||||
return 'Canal \"$name\" excluído';
|
return 'Canal \"$name\" excluído';
|
||||||
|
|||||||
@@ -809,6 +809,11 @@ class AppLocalizationsRu extends AppLocalizations {
|
|||||||
return 'Удалить \"$name\"? Это действие нельзя отменить.';
|
return 'Удалить \"$name\"? Это действие нельзя отменить.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String channels_channelDeleteFailed(String name) {
|
||||||
|
return 'Failed to delete channel \"$name\"';
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String channels_channelDeleted(String name) {
|
String channels_channelDeleted(String name) {
|
||||||
return 'Канал \"$name\" удалён';
|
return 'Канал \"$name\" удалён';
|
||||||
|
|||||||
@@ -806,6 +806,11 @@ class AppLocalizationsSk extends AppLocalizations {
|
|||||||
return 'Odstrániť \"$name\"? To sa nedá zrušiť.';
|
return 'Odstrániť \"$name\"? To sa nedá zrušiť.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String channels_channelDeleteFailed(String name) {
|
||||||
|
return 'Failed to delete channel \"$name\"';
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String channels_channelDeleted(String name) {
|
String channels_channelDeleted(String name) {
|
||||||
return 'Kanál \"$name\" bol odstránený';
|
return 'Kanál \"$name\" bol odstránený';
|
||||||
|
|||||||
@@ -804,6 +804,11 @@ class AppLocalizationsSl extends AppLocalizations {
|
|||||||
return 'Izbrišem \"$name\"? To se ne da povrniti.';
|
return 'Izbrišem \"$name\"? To se ne da povrniti.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String channels_channelDeleteFailed(String name) {
|
||||||
|
return 'Failed to delete channel \"$name\"';
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String channels_channelDeleted(String name) {
|
String channels_channelDeleted(String name) {
|
||||||
return 'Kanal \"$name\" izbrisan.';
|
return 'Kanal \"$name\" izbrisan.';
|
||||||
|
|||||||
@@ -800,6 +800,11 @@ class AppLocalizationsSv extends AppLocalizations {
|
|||||||
return 'Radera \"$name\"? Detta kan inte ångras.';
|
return 'Radera \"$name\"? Detta kan inte ångras.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String channels_channelDeleteFailed(String name) {
|
||||||
|
return 'Failed to delete channel \"$name\"';
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String channels_channelDeleted(String name) {
|
String channels_channelDeleted(String name) {
|
||||||
return 'Kanalen \"$name\" raderad';
|
return 'Kanalen \"$name\" raderad';
|
||||||
|
|||||||
@@ -807,6 +807,11 @@ class AppLocalizationsUk extends AppLocalizations {
|
|||||||
return 'Видалити $name? Це не можна скасувати.';
|
return 'Видалити $name? Це не можна скасувати.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String channels_channelDeleteFailed(String name) {
|
||||||
|
return 'Failed to delete channel \"$name\"';
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String channels_channelDeleted(String name) {
|
String channels_channelDeleted(String name) {
|
||||||
return 'Канал «$name» видалено';
|
return 'Канал «$name» видалено';
|
||||||
|
|||||||
@@ -769,6 +769,11 @@ class AppLocalizationsZh extends AppLocalizations {
|
|||||||
return 'Delete \"$name\"? This cannot be undone.';
|
return 'Delete \"$name\"? This cannot be undone.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
String channels_channelDeleteFailed(String name) {
|
||||||
|
return 'Failed to delete channel \"$name\"';
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String channels_channelDeleted(String name) {
|
String channels_channelDeleted(String name) {
|
||||||
return '删除频道 \"$name\"';
|
return '删除频道 \"$name\"';
|
||||||
|
|||||||
@@ -1524,18 +1524,14 @@ class _ChannelsScreenState extends State<ChannelsScreen>
|
|||||||
try {
|
try {
|
||||||
await connector.deleteChannel(channel.index);
|
await connector.deleteChannel(channel.index);
|
||||||
|
|
||||||
channelMessageStore.clearChannelMessages(
|
channelMessageStore.clearChannelMessages(channel.index);
|
||||||
channel.index,
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!context.mounted) return;
|
if (!context.mounted) return;
|
||||||
|
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(
|
SnackBar(
|
||||||
content: Text(
|
content: Text(
|
||||||
context.l10n.channels_channelDeleted(
|
context.l10n.channels_channelDeleted(channel.name),
|
||||||
channel.name,
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
@@ -1545,17 +1541,13 @@ class _ChannelsScreenState extends State<ChannelsScreen>
|
|||||||
ScaffoldMessenger.of(context).showSnackBar(
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
SnackBar(
|
SnackBar(
|
||||||
content: Text(
|
content: Text(
|
||||||
context.l10n.channels_channelDeleteFailed(
|
context.l10n.channels_channelDeleteFailed(channel.name),
|
||||||
channel.name,
|
|
||||||
),
|
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
||||||
// Preserve existing logging (if it was there)
|
// Preserve existing logging (if it was there)
|
||||||
debugPrint(
|
debugPrint('Failed to delete channel: $e\n$st');
|
||||||
'Failed to delete channel: $e\n$st',
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
child: Text(
|
child: Text(
|
||||||
|
|||||||
+57
-1
@@ -1 +1,57 @@
|
|||||||
{}
|
{
|
||||||
|
"bg": [
|
||||||
|
"channels_channelDeleteFailed"
|
||||||
|
],
|
||||||
|
|
||||||
|
"de": [
|
||||||
|
"channels_channelDeleteFailed"
|
||||||
|
],
|
||||||
|
|
||||||
|
"es": [
|
||||||
|
"channels_channelDeleteFailed"
|
||||||
|
],
|
||||||
|
|
||||||
|
"fr": [
|
||||||
|
"channels_channelDeleteFailed"
|
||||||
|
],
|
||||||
|
|
||||||
|
"it": [
|
||||||
|
"channels_channelDeleteFailed"
|
||||||
|
],
|
||||||
|
|
||||||
|
"nl": [
|
||||||
|
"channels_channelDeleteFailed"
|
||||||
|
],
|
||||||
|
|
||||||
|
"pl": [
|
||||||
|
"channels_channelDeleteFailed"
|
||||||
|
],
|
||||||
|
|
||||||
|
"pt": [
|
||||||
|
"channels_channelDeleteFailed"
|
||||||
|
],
|
||||||
|
|
||||||
|
"ru": [
|
||||||
|
"channels_channelDeleteFailed"
|
||||||
|
],
|
||||||
|
|
||||||
|
"sk": [
|
||||||
|
"channels_channelDeleteFailed"
|
||||||
|
],
|
||||||
|
|
||||||
|
"sl": [
|
||||||
|
"channels_channelDeleteFailed"
|
||||||
|
],
|
||||||
|
|
||||||
|
"sv": [
|
||||||
|
"channels_channelDeleteFailed"
|
||||||
|
],
|
||||||
|
|
||||||
|
"uk": [
|
||||||
|
"channels_channelDeleteFailed"
|
||||||
|
],
|
||||||
|
|
||||||
|
"zh": [
|
||||||
|
"channels_channelDeleteFailed"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user