Refactor localization keys for "neighbors" terminology across multiple languages

- Updated localization keys from "neighbours" to "neighbors" in the following files:
  - app_localizations_bg.dart
  - app_localizations_de.dart
  - app_localizations_en.dart
  - app_localizations_es.dart
  - app_localizations_fr.dart
  - app_localizations_it.dart
  - app_localizations_nl.dart
  - app_localizations_pl.dart
  - app_localizations_pt.dart
  - app_localizations_ru.dart
  - app_localizations_sk.dart
  - app_localizations_sl.dart
  - app_localizations_sv.dart
  - app_localizations_uk.dart
  - app_localizations_zh.dart
- Updated corresponding ARB files to reflect the changes in keys.
- Renamed the NeighboursScreen to NeighborsScreen in the chat and repeater hub screens for consistency.
This commit is contained in:
Winston Lowe
2026-02-16 12:58:37 -08:00
parent 42eb293d1c
commit fdfc1f6d25
35 changed files with 155 additions and 164 deletions
+1 -1
View File
@@ -177,7 +177,7 @@ const int reqTypeGetStatus = 0x01;
const int reqTypeKeepAlive = 0x02; const int reqTypeKeepAlive = 0x02;
const int reqTypeGetTelemetry = 0x03; const int reqTypeGetTelemetry = 0x03;
const int reqTypeGetAccessList = 0x05; const int reqTypeGetAccessList = 0x05;
const int reqTypeGetNeighbours = 0x06; const int reqTypeGetNeighbors = 0x06;
// Repeater response codes // Repeater response codes
const int respServerLoginOk = 0; const int respServerLoginOk = 0;
+3 -3
View File
@@ -1356,12 +1356,12 @@
} }
} }
}, },
"repeater_neighboursSubtitle": "Преглед на съседни възли с нулев скок.", "repeater_neighborsSubtitle": "Преглед на съседни възли с нулев скок.",
"repeater_neighbours": "Съседи", "repeater_neighbors": "Съседи",
"neighbors_receivedData": "Получени данни за съседи", "neighbors_receivedData": "Получени данни за съседи",
"neighbors_requestTimedOut": "Съседите поискат изтичане на време.", "neighbors_requestTimedOut": "Съседите поискат изтичане на време.",
"neighbors_errorLoading": "Грешка при зареждане на съседи: {error}", "neighbors_errorLoading": "Грешка при зареждане на съседи: {error}",
"neighbors_repeatersNeighbours": "Повторители Съседи", "neighbors_repeatersNeighbors": "Повторители Съседи",
"neighbors_noData": "Няма налични данни за съседи.", "neighbors_noData": "Няма налични данни за съседи.",
"channels_createPrivateChannel": "Създай Частен Канал", "channels_createPrivateChannel": "Създай Частен Канал",
"channels_joinPrivateChannel": "Присъедини се към Частен Канал", "channels_joinPrivateChannel": "Присъедини се към Частен Канал",
+3 -3
View File
@@ -1356,12 +1356,12 @@
} }
} }
}, },
"repeater_neighbours": "Nachbarn", "repeater_neighbors": "Nachbarn",
"repeater_neighboursSubtitle": "Anzahl der Hop-Nachbarn anzeigen.", "repeater_neighborsSubtitle": "Anzahl der Hop-Nachbarn anzeigen.",
"neighbors_receivedData": "Empfangene Nachbarsdaten", "neighbors_receivedData": "Empfangene Nachbarsdaten",
"neighbors_requestTimedOut": "Anfrage durch Timeout fehlgeschlagen.", "neighbors_requestTimedOut": "Anfrage durch Timeout fehlgeschlagen.",
"neighbors_errorLoading": "Fehler beim Laden der Nachbarn: {error}", "neighbors_errorLoading": "Fehler beim Laden der Nachbarn: {error}",
"neighbors_repeatersNeighbours": "Nachbarn", "neighbors_repeatersNeighbors": "Nachbarn",
"neighbors_noData": "Keine Nachbarsdaten verfügbar.", "neighbors_noData": "Keine Nachbarsdaten verfügbar.",
"channels_joinPrivateChannel": "Treten Sie einem privaten Kanal bei", "channels_joinPrivateChannel": "Treten Sie einem privaten Kanal bei",
"channels_joinPrivateChannelDesc": "Manuelle Eingabe eines geheimen Schlüssels.", "channels_joinPrivateChannelDesc": "Manuelle Eingabe eines geheimen Schlüssels.",
+6 -6
View File
@@ -793,8 +793,8 @@
"repeater_telemetrySubtitle": "View telemetry of sensors and system stats", "repeater_telemetrySubtitle": "View telemetry of sensors and system stats",
"repeater_cli": "CLI", "repeater_cli": "CLI",
"repeater_cliSubtitle": "Send commands to the repeater", "repeater_cliSubtitle": "Send commands to the repeater",
"repeater_neighbours": "Neighbors", "repeater_neighbors": "Neighbors",
"repeater_neighboursSubtitle": "View zero hop neighbors.", "repeater_neighborsSubtitle": "View zero hop neighbors.",
"repeater_settings": "Settings", "repeater_settings": "Settings",
"repeater_settingsSubtitle": "Configure repeater parameters", "repeater_settingsSubtitle": "Configure repeater parameters",
@@ -1098,16 +1098,16 @@
} }
}, },
"neighbors_receivedData": "Received Neighbours Data", "neighbors_receivedData": "Received Neighbors Data",
"neighbors_requestTimedOut": "Neighbours request timed out.", "neighbors_requestTimedOut": "Neighbors request timed out.",
"neighbors_errorLoading": "Error loading neighbors: {error}", "neighbors_errorLoading": "Error loading neighbors: {error}",
"@neighbors_errorLoading": { "@neighbors_errorLoading": {
"placeholders": { "placeholders": {
"error": {"type": "String"} "error": {"type": "String"}
} }
}, },
"neighbors_repeatersNeighbours": "Repeaters Neighbours", "neighbors_repeatersNeighbors": "Repeaters Neighbors",
"neighbors_noData": "No neighbours data available.", "neighbors_noData": "No neighbors data available.",
"neighbors_unknownContact": "Unknown {pubkey}", "neighbors_unknownContact": "Unknown {pubkey}",
"@neighbors_unknownContact": { "@neighbors_unknownContact": {
"placeholders": { "placeholders": {
+3 -3
View File
@@ -1356,12 +1356,12 @@
} }
} }
}, },
"repeater_neighbours": "Vecinos", "repeater_neighbors": "Vecinos",
"repeater_neighboursSubtitle": "Ver vecinos de salto cero.", "repeater_neighborsSubtitle": "Ver vecinos de salto cero.",
"neighbors_receivedData": "Recibidas Datos de Vecinos", "neighbors_receivedData": "Recibidas Datos de Vecinos",
"neighbors_requestTimedOut": "Los vecinos solicitan que se desconecte.", "neighbors_requestTimedOut": "Los vecinos solicitan que se desconecte.",
"neighbors_errorLoading": "Error al cargar vecinos: {error}", "neighbors_errorLoading": "Error al cargar vecinos: {error}",
"neighbors_repeatersNeighbours": "Repetidores Vecinos", "neighbors_repeatersNeighbors": "Repetidores Vecinos",
"neighbors_noData": "No hay datos de vecinos disponibles.", "neighbors_noData": "No hay datos de vecinos disponibles.",
"channels_joinPrivateChannel": "Únete a un Canal Privado", "channels_joinPrivateChannel": "Únete a un Canal Privado",
"channels_createPrivateChannel": "Crear un Canal Privado", "channels_createPrivateChannel": "Crear un Canal Privado",
+3 -3
View File
@@ -1356,12 +1356,12 @@
} }
} }
}, },
"repeater_neighbours": "Voisins", "repeater_neighbors": "Voisins",
"repeater_neighboursSubtitle": "Afficher les voisins de saut nuls.", "repeater_neighborsSubtitle": "Afficher les voisins de saut nuls.",
"neighbors_receivedData": "Données des voisins reçues", "neighbors_receivedData": "Données des voisins reçues",
"neighbors_requestTimedOut": "Les voisins demandent un délai.", "neighbors_requestTimedOut": "Les voisins demandent un délai.",
"neighbors_errorLoading": "Erreur lors du chargement des voisins : {error}", "neighbors_errorLoading": "Erreur lors du chargement des voisins : {error}",
"neighbors_repeatersNeighbours": "Répéteurs Voisins", "neighbors_repeatersNeighbors": "Répéteurs Voisins",
"neighbors_noData": "Aucune donnée concernant les voisins disponible.", "neighbors_noData": "Aucune donnée concernant les voisins disponible.",
"channels_createPrivateChannelDesc": "Sécurisé avec une clé secrète.", "channels_createPrivateChannelDesc": "Sécurisé avec une clé secrète.",
"channels_joinPrivateChannel": "Rejoindre un Canal Privé", "channels_joinPrivateChannel": "Rejoindre un Canal Privé",
+3 -3
View File
@@ -1356,12 +1356,12 @@
} }
} }
}, },
"repeater_neighbours": "Vicini", "repeater_neighbors": "Vicini",
"repeater_neighboursSubtitle": "Visualizza vicini di salto pari a zero.", "repeater_neighborsSubtitle": "Visualizza vicini di salto pari a zero.",
"neighbors_receivedData": "Ricevute dati vicini", "neighbors_receivedData": "Ricevute dati vicini",
"neighbors_requestTimedOut": "I vicini richiedono un timeout.", "neighbors_requestTimedOut": "I vicini richiedono un timeout.",
"neighbors_errorLoading": "Errore nel caricamento dei vicini: {error}", "neighbors_errorLoading": "Errore nel caricamento dei vicini: {error}",
"neighbors_repeatersNeighbours": "Ripetitori Vicini", "neighbors_repeatersNeighbors": "Ripetitori Vicini",
"neighbors_noData": "Nessun dato sugli vicini disponibile.", "neighbors_noData": "Nessun dato sugli vicini disponibile.",
"channels_createPrivateChannel": "Crea un Canale Privato", "channels_createPrivateChannel": "Crea un Canale Privato",
"channels_createPrivateChannelDesc": "Protetta con una chiave segreta.", "channels_createPrivateChannelDesc": "Protetta con una chiave segreta.",
+10 -10
View File
@@ -3039,17 +3039,17 @@ abstract class AppLocalizations {
/// **'Send commands to the repeater'** /// **'Send commands to the repeater'**
String get repeater_cliSubtitle; String get repeater_cliSubtitle;
/// No description provided for @repeater_neighbours. /// No description provided for @repeater_neighbors.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Neighbors'** /// **'Neighbors'**
String get repeater_neighbours; String get repeater_neighbors;
/// No description provided for @repeater_neighboursSubtitle. /// No description provided for @repeater_neighborsSubtitle.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'View zero hop neighbors.'** /// **'View zero hop neighbors.'**
String get repeater_neighboursSubtitle; String get repeater_neighborsSubtitle;
/// No description provided for @repeater_settings. /// No description provided for @repeater_settings.
/// ///
@@ -4193,13 +4193,13 @@ abstract class AppLocalizations {
/// No description provided for @neighbors_receivedData. /// No description provided for @neighbors_receivedData.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Received Neighbours Data'** /// **'Received Neighbors Data'**
String get neighbors_receivedData; String get neighbors_receivedData;
/// No description provided for @neighbors_requestTimedOut. /// No description provided for @neighbors_requestTimedOut.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Neighbours request timed out.'** /// **'Neighbors request timed out.'**
String get neighbors_requestTimedOut; String get neighbors_requestTimedOut;
/// No description provided for @neighbors_errorLoading. /// No description provided for @neighbors_errorLoading.
@@ -4208,16 +4208,16 @@ abstract class AppLocalizations {
/// **'Error loading neighbors: {error}'** /// **'Error loading neighbors: {error}'**
String neighbors_errorLoading(String error); String neighbors_errorLoading(String error);
/// No description provided for @neighbors_repeatersNeighbours. /// No description provided for @neighbors_repeatersNeighbors.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'Repeaters Neighbours'** /// **'Repeaters Neighbors'**
String get neighbors_repeatersNeighbours; String get neighbors_repeatersNeighbors;
/// No description provided for @neighbors_noData. /// No description provided for @neighbors_noData.
/// ///
/// In en, this message translates to: /// In en, this message translates to:
/// **'No neighbours data available.'** /// **'No neighbors data available.'**
String get neighbors_noData; String get neighbors_noData;
/// No description provided for @neighbors_unknownContact. /// No description provided for @neighbors_unknownContact.
+3 -3
View File
@@ -1681,10 +1681,10 @@ class AppLocalizationsBg extends AppLocalizations {
String get repeater_cliSubtitle => 'Изпрати команди към ретранслатора'; String get repeater_cliSubtitle => 'Изпрати команди към ретранслатора';
@override @override
String get repeater_neighbours => 'Съседи'; String get repeater_neighbors => 'Съседи';
@override @override
String get repeater_neighboursSubtitle => String get repeater_neighborsSubtitle =>
'Преглед на съседни възли с нулев скок.'; 'Преглед на съседни възли с нулев скок.';
@override @override
@@ -2384,7 +2384,7 @@ class AppLocalizationsBg extends AppLocalizations {
} }
@override @override
String get neighbors_repeatersNeighbours => 'Повторители Съседи'; String get neighbors_repeatersNeighbors => 'Повторители Съседи';
@override @override
String get neighbors_noData => 'Няма налични данни за съседи.'; String get neighbors_noData => 'Няма налични данни за съседи.';
+3 -3
View File
@@ -1680,10 +1680,10 @@ class AppLocalizationsDe extends AppLocalizations {
String get repeater_cliSubtitle => 'Sende Befehle an den Repeater'; String get repeater_cliSubtitle => 'Sende Befehle an den Repeater';
@override @override
String get repeater_neighbours => 'Nachbarn'; String get repeater_neighbors => 'Nachbarn';
@override @override
String get repeater_neighboursSubtitle => 'Anzahl der Hop-Nachbarn anzeigen.'; String get repeater_neighborsSubtitle => 'Anzahl der Hop-Nachbarn anzeigen.';
@override @override
String get repeater_settings => 'Einstellungen'; String get repeater_settings => 'Einstellungen';
@@ -2386,7 +2386,7 @@ class AppLocalizationsDe extends AppLocalizations {
} }
@override @override
String get neighbors_repeatersNeighbours => 'Nachbarn'; String get neighbors_repeatersNeighbors => 'Nachbarn';
@override @override
String get neighbors_noData => 'Keine Nachbarsdaten verfügbar.'; String get neighbors_noData => 'Keine Nachbarsdaten verfügbar.';
+6 -6
View File
@@ -1654,10 +1654,10 @@ class AppLocalizationsEn extends AppLocalizations {
String get repeater_cliSubtitle => 'Send commands to the repeater'; String get repeater_cliSubtitle => 'Send commands to the repeater';
@override @override
String get repeater_neighbours => 'Neighbors'; String get repeater_neighbors => 'Neighbors';
@override @override
String get repeater_neighboursSubtitle => 'View zero hop neighbors.'; String get repeater_neighborsSubtitle => 'View zero hop neighbors.';
@override @override
String get repeater_settings => 'Settings'; String get repeater_settings => 'Settings';
@@ -2333,10 +2333,10 @@ class AppLocalizationsEn extends AppLocalizations {
} }
@override @override
String get neighbors_receivedData => 'Received Neighbours Data'; String get neighbors_receivedData => 'Received Neighbors Data';
@override @override
String get neighbors_requestTimedOut => 'Neighbours request timed out.'; String get neighbors_requestTimedOut => 'Neighbors request timed out.';
@override @override
String neighbors_errorLoading(String error) { String neighbors_errorLoading(String error) {
@@ -2344,10 +2344,10 @@ class AppLocalizationsEn extends AppLocalizations {
} }
@override @override
String get neighbors_repeatersNeighbours => 'Repeaters Neighbours'; String get neighbors_repeatersNeighbors => 'Repeaters Neighbors';
@override @override
String get neighbors_noData => 'No neighbours data available.'; String get neighbors_noData => 'No neighbors data available.';
@override @override
String neighbors_unknownContact(String pubkey) { String neighbors_unknownContact(String pubkey) {
+3 -3
View File
@@ -1678,10 +1678,10 @@ class AppLocalizationsEs extends AppLocalizations {
String get repeater_cliSubtitle => 'Enviar comandos al repetidor'; String get repeater_cliSubtitle => 'Enviar comandos al repetidor';
@override @override
String get repeater_neighbours => 'Vecinos'; String get repeater_neighbors => 'Vecinos';
@override @override
String get repeater_neighboursSubtitle => 'Ver vecinos de salto cero.'; String get repeater_neighborsSubtitle => 'Ver vecinos de salto cero.';
@override @override
String get repeater_settings => 'Configuración'; String get repeater_settings => 'Configuración';
@@ -2380,7 +2380,7 @@ class AppLocalizationsEs extends AppLocalizations {
} }
@override @override
String get neighbors_repeatersNeighbours => 'Repetidores Vecinos'; String get neighbors_repeatersNeighbors => 'Repetidores Vecinos';
@override @override
String get neighbors_noData => 'No hay datos de vecinos disponibles.'; String get neighbors_noData => 'No hay datos de vecinos disponibles.';
+3 -4
View File
@@ -1686,11 +1686,10 @@ class AppLocalizationsFr extends AppLocalizations {
String get repeater_cliSubtitle => 'Envoyer des commandes au répéteur'; String get repeater_cliSubtitle => 'Envoyer des commandes au répéteur';
@override @override
String get repeater_neighbours => 'Voisins'; String get repeater_neighbors => 'Voisins';
@override @override
String get repeater_neighboursSubtitle => String get repeater_neighborsSubtitle => 'Afficher les voisins de saut nuls.';
'Afficher les voisins de saut nuls.';
@override @override
String get repeater_settings => 'Paramètres'; String get repeater_settings => 'Paramètres';
@@ -2395,7 +2394,7 @@ class AppLocalizationsFr extends AppLocalizations {
} }
@override @override
String get neighbors_repeatersNeighbours => 'Répéteurs Voisins'; String get neighbors_repeatersNeighbors => 'Répéteurs Voisins';
@override @override
String get neighbors_noData => String get neighbors_noData =>
+3 -3
View File
@@ -1676,10 +1676,10 @@ class AppLocalizationsIt extends AppLocalizations {
String get repeater_cliSubtitle => 'Invia comandi al ripetitore'; String get repeater_cliSubtitle => 'Invia comandi al ripetitore';
@override @override
String get repeater_neighbours => 'Vicini'; String get repeater_neighbors => 'Vicini';
@override @override
String get repeater_neighboursSubtitle => String get repeater_neighborsSubtitle =>
'Visualizza vicini di salto pari a zero.'; 'Visualizza vicini di salto pari a zero.';
@override @override
@@ -2380,7 +2380,7 @@ class AppLocalizationsIt extends AppLocalizations {
} }
@override @override
String get neighbors_repeatersNeighbours => 'Ripetitori Vicini'; String get neighbors_repeatersNeighbors => 'Ripetitori Vicini';
@override @override
String get neighbors_noData => 'Nessun dato sugli vicini disponibile.'; String get neighbors_noData => 'Nessun dato sugli vicini disponibile.';
+3 -3
View File
@@ -1672,10 +1672,10 @@ class AppLocalizationsNl extends AppLocalizations {
String get repeater_cliSubtitle => 'Verzend commando\'s naar de repeater'; String get repeater_cliSubtitle => 'Verzend commando\'s naar de repeater';
@override @override
String get repeater_neighbours => 'Buren'; String get repeater_neighbors => 'Buren';
@override @override
String get repeater_neighboursSubtitle => 'Bekijk nul hops buren.'; String get repeater_neighborsSubtitle => 'Bekijk nul hops buren.';
@override @override
String get repeater_settings => 'Instellingen'; String get repeater_settings => 'Instellingen';
@@ -2371,7 +2371,7 @@ class AppLocalizationsNl extends AppLocalizations {
} }
@override @override
String get neighbors_repeatersNeighbours => 'Herhalingen Buren'; String get neighbors_repeatersNeighbors => 'Herhalingen Buren';
@override @override
String get neighbors_noData => 'Geen gegevens van buren beschikbaar.'; String get neighbors_noData => 'Geen gegevens van buren beschikbaar.';
+3 -3
View File
@@ -1680,10 +1680,10 @@ class AppLocalizationsPl extends AppLocalizations {
String get repeater_cliSubtitle => 'Wyślij polecenia do powielacza'; String get repeater_cliSubtitle => 'Wyślij polecenia do powielacza';
@override @override
String get repeater_neighbours => 'Sąsiedzi'; String get repeater_neighbors => 'Sąsiedzi';
@override @override
String get repeater_neighboursSubtitle => String get repeater_neighborsSubtitle =>
'Wyświetl sąsiedztwo zerowych hopów.'; 'Wyświetl sąsiedztwo zerowych hopów.';
@override @override
@@ -2379,7 +2379,7 @@ class AppLocalizationsPl extends AppLocalizations {
} }
@override @override
String get neighbors_repeatersNeighbours => 'Powtarzacze Sąsiedzi'; String get neighbors_repeatersNeighbors => 'Powtarzacze Sąsiedzi';
@override @override
String get neighbors_noData => 'Brak danych dotyczących sąsiadów.'; String get neighbors_noData => 'Brak danych dotyczących sąsiadów.';
+3 -4
View File
@@ -1678,11 +1678,10 @@ class AppLocalizationsPt extends AppLocalizations {
String get repeater_cliSubtitle => 'Enviar comandos ao repetidor'; String get repeater_cliSubtitle => 'Enviar comandos ao repetidor';
@override @override
String get repeater_neighbours => 'Vizinhos'; String get repeater_neighbors => 'Vizinhos';
@override @override
String get repeater_neighboursSubtitle => String get repeater_neighborsSubtitle => 'Visualizar vizinhos de salto zero.';
'Visualizar vizinhos de salto zero.';
@override @override
String get repeater_settings => 'Configurações'; String get repeater_settings => 'Configurações';
@@ -2381,7 +2380,7 @@ class AppLocalizationsPt extends AppLocalizations {
} }
@override @override
String get neighbors_repeatersNeighbours => 'Repetidores Vizinhos'; String get neighbors_repeatersNeighbors => 'Repetidores Vizinhos';
@override @override
String get neighbors_noData => 'Não estão disponíveis dados de vizinhos.'; String get neighbors_noData => 'Não estão disponíveis dados de vizinhos.';
+3 -3
View File
@@ -1680,10 +1680,10 @@ class AppLocalizationsRu extends AppLocalizations {
String get repeater_cliSubtitle => 'Отправка команд репитеру'; String get repeater_cliSubtitle => 'Отправка команд репитеру';
@override @override
String get repeater_neighbours => 'Соседи'; String get repeater_neighbors => 'Соседи';
@override @override
String get repeater_neighboursSubtitle => 'Просмотр соседей на нулевом хопе.'; String get repeater_neighborsSubtitle => 'Просмотр соседей на нулевом хопе.';
@override @override
String get repeater_settings => 'Настройки'; String get repeater_settings => 'Настройки';
@@ -2383,7 +2383,7 @@ class AppLocalizationsRu extends AppLocalizations {
} }
@override @override
String get neighbors_repeatersNeighbours => 'Соседи репитеров'; String get neighbors_repeatersNeighbors => 'Соседи репитеров';
@override @override
String get neighbors_noData => 'Данные о соседях недоступны.'; String get neighbors_noData => 'Данные о соседях недоступны.';
+3 -3
View File
@@ -1673,10 +1673,10 @@ class AppLocalizationsSk extends AppLocalizations {
String get repeater_cliSubtitle => 'Pošlite príkazy opakovaču'; String get repeater_cliSubtitle => 'Pošlite príkazy opakovaču';
@override @override
String get repeater_neighbours => 'Súsezný'; String get repeater_neighbors => 'Súsezný';
@override @override
String get repeater_neighboursSubtitle => 'Zobraziť susedné body bez skokov.'; String get repeater_neighborsSubtitle => 'Zobraziť susedné body bez skokov.';
@override @override
String get repeater_settings => 'Nastavenia'; String get repeater_settings => 'Nastavenia';
@@ -2367,7 +2367,7 @@ class AppLocalizationsSk extends AppLocalizations {
} }
@override @override
String get neighbors_repeatersNeighbours => 'Opakovadlá Súsezná'; String get neighbors_repeatersNeighbors => 'Opakovadlá Súsezná';
@override @override
String get neighbors_noData => String get neighbors_noData =>
+3 -3
View File
@@ -1672,10 +1672,10 @@ class AppLocalizationsSl extends AppLocalizations {
'Pošlji ukazne povelje na ponovitveno enoto.'; 'Pošlji ukazne povelje na ponovitveno enoto.';
@override @override
String get repeater_neighbours => 'Sosedi'; String get repeater_neighbors => 'Sosedi';
@override @override
String get repeater_neighboursSubtitle => 'Pogledati nič sosednjih hopjev.'; String get repeater_neighborsSubtitle => 'Pogledati nič sosednjih hopjev.';
@override @override
String get repeater_settings => 'Nastavitve'; String get repeater_settings => 'Nastavitve';
@@ -2371,7 +2371,7 @@ class AppLocalizationsSl extends AppLocalizations {
} }
@override @override
String get neighbors_repeatersNeighbours => 'Ponovitve Sosedi'; String get neighbors_repeatersNeighbors => 'Ponovitve Sosedi';
@override @override
String get neighbors_noData => 'Niso na voljo podatki o sosedih.'; String get neighbors_noData => 'Niso na voljo podatki o sosedih.';
+3 -3
View File
@@ -1662,10 +1662,10 @@ class AppLocalizationsSv extends AppLocalizations {
String get repeater_cliSubtitle => 'Skicka kommandon till repetitorn'; String get repeater_cliSubtitle => 'Skicka kommandon till repetitorn';
@override @override
String get repeater_neighbours => 'Grannar'; String get repeater_neighbors => 'Grannar';
@override @override
String get repeater_neighboursSubtitle => 'Visa noll hoppgrannar.'; String get repeater_neighborsSubtitle => 'Visa noll hoppgrannar.';
@override @override
String get repeater_settings => 'Inställningar'; String get repeater_settings => 'Inställningar';
@@ -2356,7 +2356,7 @@ class AppLocalizationsSv extends AppLocalizations {
} }
@override @override
String get neighbors_repeatersNeighbours => 'Upprepar grannar'; String get neighbors_repeatersNeighbors => 'Upprepar grannar';
@override @override
String get neighbors_noData => 'Inga grannuppgifter finns tillgängliga.'; String get neighbors_noData => 'Inga grannuppgifter finns tillgängliga.';
+3 -3
View File
@@ -1679,10 +1679,10 @@ class AppLocalizationsUk extends AppLocalizations {
String get repeater_cliSubtitle => 'Надіслати команди ретранслятору'; String get repeater_cliSubtitle => 'Надіслати команди ретранслятору';
@override @override
String get repeater_neighbours => 'Сусіди'; String get repeater_neighbors => 'Сусіди';
@override @override
String get repeater_neighboursSubtitle => String get repeater_neighborsSubtitle =>
'Показати сусідів нульового стрибка.'; 'Показати сусідів нульового стрибка.';
@override @override
@@ -2384,7 +2384,7 @@ class AppLocalizationsUk extends AppLocalizations {
} }
@override @override
String get neighbors_repeatersNeighbours => 'Ретранслятори-сусіди'; String get neighbors_repeatersNeighbors => 'Ретранслятори-сусіди';
@override @override
String get neighbors_noData => 'Дані про сусідів недоступні.'; String get neighbors_noData => 'Дані про сусідів недоступні.';
+3 -3
View File
@@ -1601,10 +1601,10 @@ class AppLocalizationsZh extends AppLocalizations {
String get repeater_cliSubtitle => '向复用器发送指令'; String get repeater_cliSubtitle => '向复用器发送指令';
@override @override
String get repeater_neighbours => '邻居'; String get repeater_neighbors => '邻居';
@override @override
String get repeater_neighboursSubtitle => '查看邻居节点(无需中间节点)。'; String get repeater_neighborsSubtitle => '查看邻居节点(无需中间节点)。';
@override @override
String get repeater_settings => '设置'; String get repeater_settings => '设置';
@@ -2251,7 +2251,7 @@ class AppLocalizationsZh extends AppLocalizations {
} }
@override @override
String get neighbors_repeatersNeighbours => '重复使用的邻居'; String get neighbors_repeatersNeighbors => '重复使用的邻居';
@override @override
String get neighbors_noData => '没有可用的邻居信息。'; String get neighbors_noData => '没有可用的邻居信息。';
+3 -3
View File
@@ -1356,12 +1356,12 @@
} }
} }
}, },
"repeater_neighbours": "Buren", "repeater_neighbors": "Buren",
"repeater_neighboursSubtitle": "Bekijk nul hops buren.", "repeater_neighborsSubtitle": "Bekijk nul hops buren.",
"neighbors_receivedData": "Ontvangen Buurdata", "neighbors_receivedData": "Ontvangen Buurdata",
"neighbors_requestTimedOut": "Buren vragen om tijdelijk uitgeschakeld.", "neighbors_requestTimedOut": "Buren vragen om tijdelijk uitgeschakeld.",
"neighbors_errorLoading": "Fout bij het laden van buren: {error}", "neighbors_errorLoading": "Fout bij het laden van buren: {error}",
"neighbors_repeatersNeighbours": "Herhalingen Buren", "neighbors_repeatersNeighbors": "Herhalingen Buren",
"neighbors_noData": "Geen gegevens van buren beschikbaar.", "neighbors_noData": "Geen gegevens van buren beschikbaar.",
"channels_createPrivateChannelDesc": "Beveiligd met een geheime sleutel.", "channels_createPrivateChannelDesc": "Beveiligd met een geheime sleutel.",
"channels_createPrivateChannel": "Maak een Privé Kanaal", "channels_createPrivateChannel": "Maak een Privé Kanaal",
+3 -3
View File
@@ -1356,12 +1356,12 @@
} }
} }
}, },
"repeater_neighbours": "Sąsiedzi", "repeater_neighbors": "Sąsiedzi",
"repeater_neighboursSubtitle": "Wyświetl sąsiedztwo zerowych hopów.", "repeater_neighborsSubtitle": "Wyświetl sąsiedztwo zerowych hopów.",
"neighbors_receivedData": "Otrzymano dane sąsiedztwa", "neighbors_receivedData": "Otrzymano dane sąsiedztwa",
"neighbors_requestTimedOut": "Sąsiedzi proszą o wyłączenie timingu.", "neighbors_requestTimedOut": "Sąsiedzi proszą o wyłączenie timingu.",
"neighbors_errorLoading": "Błąd podczas ładowania sąsiadów: {error}", "neighbors_errorLoading": "Błąd podczas ładowania sąsiadów: {error}",
"neighbors_repeatersNeighbours": "Powtarzacze Sąsiedzi", "neighbors_repeatersNeighbors": "Powtarzacze Sąsiedzi",
"neighbors_noData": "Brak danych dotyczących sąsiadów.", "neighbors_noData": "Brak danych dotyczących sąsiadów.",
"channels_joinPrivateChannelDesc": "Ręcznie wprowadź klucz tajny.", "channels_joinPrivateChannelDesc": "Ręcznie wprowadź klucz tajny.",
"channels_createPrivateChannel": "Utwórz Prywatny Kanał", "channels_createPrivateChannel": "Utwórz Prywatny Kanał",
+3 -3
View File
@@ -1356,12 +1356,12 @@
} }
} }
}, },
"repeater_neighbours": "Vizinhos", "repeater_neighbors": "Vizinhos",
"neighbors_receivedData": "Dados dos Vizinhos Recebidos", "neighbors_receivedData": "Dados dos Vizinhos Recebidos",
"repeater_neighboursSubtitle": "Visualizar vizinhos de salto zero.", "repeater_neighborsSubtitle": "Visualizar vizinhos de salto zero.",
"neighbors_requestTimedOut": "Vizinhos solicitam tempo limite esgotado.", "neighbors_requestTimedOut": "Vizinhos solicitam tempo limite esgotado.",
"neighbors_errorLoading": "Erro ao carregar vizinhos: {error}", "neighbors_errorLoading": "Erro ao carregar vizinhos: {error}",
"neighbors_repeatersNeighbours": "Repetidores Vizinhos", "neighbors_repeatersNeighbors": "Repetidores Vizinhos",
"neighbors_noData": "Não estão disponíveis dados de vizinhos.", "neighbors_noData": "Não estão disponíveis dados de vizinhos.",
"channels_createPrivateChannelDesc": "Protegido com uma chave secreta.", "channels_createPrivateChannelDesc": "Protegido com uma chave secreta.",
"channels_joinPrivateChannelDesc": "Inserir uma chave secreta manualmente.", "channels_joinPrivateChannelDesc": "Inserir uma chave secreta manualmente.",
+3 -3
View File
@@ -472,8 +472,8 @@
"repeater_telemetrySubtitle": "Просмотр телеметрии датчиков и системной статистики", "repeater_telemetrySubtitle": "Просмотр телеметрии датчиков и системной статистики",
"repeater_cli": "CLI", "repeater_cli": "CLI",
"repeater_cliSubtitle": "Отправка команд репитеру", "repeater_cliSubtitle": "Отправка команд репитеру",
"repeater_neighbours": "Соседи", "repeater_neighbors": "Соседи",
"repeater_neighboursSubtitle": "Просмотр соседей на нулевом хопе.", "repeater_neighborsSubtitle": "Просмотр соседей на нулевом хопе.",
"repeater_settings": "Настройки", "repeater_settings": "Настройки",
"repeater_settingsSubtitle": "Настройка параметров репитера", "repeater_settingsSubtitle": "Настройка параметров репитера",
"repeater_statusTitle": "Статус репитера", "repeater_statusTitle": "Статус репитера",
@@ -666,7 +666,7 @@
"neighbors_receivedData": "Полученные данные о соседях", "neighbors_receivedData": "Полученные данные о соседях",
"neighbors_requestTimedOut": "Время ожидания данных о соседях истекло.", "neighbors_requestTimedOut": "Время ожидания данных о соседях истекло.",
"neighbors_errorLoading": "Ошибка загрузки соседей: {error}", "neighbors_errorLoading": "Ошибка загрузки соседей: {error}",
"neighbors_repeatersNeighbours": "Соседи репитеров", "neighbors_repeatersNeighbors": "Соседи репитеров",
"neighbors_noData": "Данные о соседях недоступны.", "neighbors_noData": "Данные о соседях недоступны.",
"neighbors_unknownContact": "Неизвестный {pubkey}", "neighbors_unknownContact": "Неизвестный {pubkey}",
"neighbors_heardA ago": "Слышали: {time} назад", "neighbors_heardA ago": "Слышали: {time} назад",
+3 -3
View File
@@ -1356,12 +1356,12 @@
} }
} }
}, },
"repeater_neighboursSubtitle": "Zobraziť susedné body bez skokov.", "repeater_neighborsSubtitle": "Zobraziť susedné body bez skokov.",
"neighbors_requestTimedOut": "Súďia žiadajú o časové ukončenie.", "neighbors_requestTimedOut": "Súďia žiadajú o časové ukončenie.",
"neighbors_receivedData": "Obdielo dáta suseda", "neighbors_receivedData": "Obdielo dáta suseda",
"repeater_neighbours": "Súsezný", "repeater_neighbors": "Súsezný",
"neighbors_errorLoading": "Chyba pri načítaní susedov: {error}", "neighbors_errorLoading": "Chyba pri načítaní susedov: {error}",
"neighbors_repeatersNeighbours": "Opakovadlá Súsezná", "neighbors_repeatersNeighbors": "Opakovadlá Súsezná",
"neighbors_noData": "Nie je dostupná žiadna informácia o susedoch.", "neighbors_noData": "Nie je dostupná žiadna informácia o susedoch.",
"channels_createPrivateChannel": "Vytvorte súkromný kanál", "channels_createPrivateChannel": "Vytvorte súkromný kanál",
"channels_joinPrivateChannel": "Pripojiť sa k súkromnému kanálu", "channels_joinPrivateChannel": "Pripojiť sa k súkromnému kanálu",
+3 -3
View File
@@ -1356,12 +1356,12 @@
} }
} }
}, },
"repeater_neighboursSubtitle": "Pogledati nič sosednjih hopjev.", "repeater_neighborsSubtitle": "Pogledati nič sosednjih hopjev.",
"repeater_neighbours": "Sosedi", "repeater_neighbors": "Sosedi",
"neighbors_receivedData": "Prejeto podatke o sosedih", "neighbors_receivedData": "Prejeto podatke o sosedih",
"neighbors_requestTimedOut": "Sosedi zahtevajo izklop po dogovoru.", "neighbors_requestTimedOut": "Sosedi zahtevajo izklop po dogovoru.",
"neighbors_errorLoading": "Napaka pri obnašanju sosedov: {error}", "neighbors_errorLoading": "Napaka pri obnašanju sosedov: {error}",
"neighbors_repeatersNeighbours": "Ponovitve Sosedi", "neighbors_repeatersNeighbors": "Ponovitve Sosedi",
"neighbors_noData": "Niso na voljo podatki o sosedih.", "neighbors_noData": "Niso na voljo podatki o sosedih.",
"channels_joinPrivateChannel": "Pridružite se zasebni skupini", "channels_joinPrivateChannel": "Pridružite se zasebni skupini",
"channels_createPrivateChannelDesc": "Varno zaklenjeno s skrivnim ključem.", "channels_createPrivateChannelDesc": "Varno zaklenjeno s skrivnim ključem.",
+3 -3
View File
@@ -1356,12 +1356,12 @@
} }
} }
}, },
"repeater_neighbours": "Grannar", "repeater_neighbors": "Grannar",
"repeater_neighboursSubtitle": "Visa noll hoppgrannar.", "repeater_neighborsSubtitle": "Visa noll hoppgrannar.",
"neighbors_receivedData": "Mottagna grannars data", "neighbors_receivedData": "Mottagna grannars data",
"neighbors_requestTimedOut": "Grannar begär tidsinställd utskick.", "neighbors_requestTimedOut": "Grannar begär tidsinställd utskick.",
"neighbors_errorLoading": "Fel vid inläsning av grannar: {error}", "neighbors_errorLoading": "Fel vid inläsning av grannar: {error}",
"neighbors_repeatersNeighbours": "Upprepar grannar", "neighbors_repeatersNeighbors": "Upprepar grannar",
"neighbors_noData": "Inga grannuppgifter finns tillgängliga.", "neighbors_noData": "Inga grannuppgifter finns tillgängliga.",
"channels_createPrivateChannel": "Skapa en privat kanal", "channels_createPrivateChannel": "Skapa en privat kanal",
"channels_joinPrivateChannel": "Gå med i en Privat Kanal", "channels_joinPrivateChannel": "Gå med i en Privat Kanal",
+3 -3
View File
@@ -1357,12 +1357,12 @@
} }
} }
}, },
"repeater_neighbours": "Сусіди", "repeater_neighbors": "Сусіди",
"repeater_neighboursSubtitle": "Показати сусідів нульового стрибка.", "repeater_neighborsSubtitle": "Показати сусідів нульового стрибка.",
"neighbors_receivedData": "Дані сусідів отримано", "neighbors_receivedData": "Дані сусідів отримано",
"neighbors_requestTimedOut": "Час запиту сусідів вичерпано.", "neighbors_requestTimedOut": "Час запиту сусідів вичерпано.",
"neighbors_errorLoading": "Помилка завантаження сусідів: {error}", "neighbors_errorLoading": "Помилка завантаження сусідів: {error}",
"neighbors_repeatersNeighbours": "Ретранслятори-сусіди", "neighbors_repeatersNeighbors": "Ретранслятори-сусіди",
"neighbors_noData": "Дані про сусідів недоступні.", "neighbors_noData": "Дані про сусідів недоступні.",
"channels_createPrivateChannelDesc": "Захищено секретним ключем.", "channels_createPrivateChannelDesc": "Захищено секретним ключем.",
"channels_joinPrivateChannel": "Приєднатися до приватного каналу", "channels_joinPrivateChannel": "Приєднатися до приватного каналу",
+3 -3
View File
@@ -900,8 +900,8 @@
"repeater_telemetrySubtitle": "查看传感器和系统状态的数据。", "repeater_telemetrySubtitle": "查看传感器和系统状态的数据。",
"repeater_cli": "命令行界面", "repeater_cli": "命令行界面",
"repeater_cliSubtitle": "向复用器发送指令", "repeater_cliSubtitle": "向复用器发送指令",
"repeater_neighbours": "邻居", "repeater_neighbors": "邻居",
"repeater_neighboursSubtitle": "查看邻居节点(无需中间节点)。", "repeater_neighborsSubtitle": "查看邻居节点(无需中间节点)。",
"repeater_settings": "设置", "repeater_settings": "设置",
"repeater_settingsSubtitle": "配置重复器参数", "repeater_settingsSubtitle": "配置重复器参数",
"repeater_statusTitle": "重复器状态", "repeater_statusTitle": "重复器状态",
@@ -1271,7 +1271,7 @@
} }
} }
}, },
"neighbors_repeatersNeighbours": "重复使用的邻居", "neighbors_repeatersNeighbors": "重复使用的邻居",
"neighbors_noData": "没有可用的邻居信息。", "neighbors_noData": "没有可用的邻居信息。",
"neighbors_unknownContact": "Unknown {pubkey}", "neighbors_unknownContact": "Unknown {pubkey}",
"@neighbors_unknownContact": { "@neighbors_unknownContact": {
+2 -2
View File
@@ -497,7 +497,7 @@ class _ChatScreenState extends State<ChatScreen> {
path.pathBytes.isNotEmpty && path.pathBytes.isNotEmpty &&
directRepeater.pubkeyFirstByte == directRepeater.pubkeyFirstByte ==
path.pathBytes.first; path.pathBytes.first;
final isSecoundDirectRepeater = final isSecondDirectRepeater =
secondDirectRepeater != null && secondDirectRepeater != null &&
path.pathBytes.isNotEmpty && path.pathBytes.isNotEmpty &&
secondDirectRepeater.pubkeyFirstByte == secondDirectRepeater.pubkeyFirstByte ==
@@ -510,7 +510,7 @@ class _ChatScreenState extends State<ChatScreen> {
Color color = Colors.grey; Color color = Colors.grey;
if (isDirectRepeater) { if (isDirectRepeater) {
color = Colors.green; color = Colors.green;
} else if (isSecoundDirectRepeater) { } else if (isSecondDirectRepeater) {
color = Colors.yellow; color = Colors.yellow;
} else if (isThirdDirectRepeater) { } else if (isThirdDirectRepeater) {
color = Colors.red; color = Colors.red;
@@ -12,28 +12,28 @@ import '../services/repeater_command_service.dart';
import '../widgets/path_management_dialog.dart'; import '../widgets/path_management_dialog.dart';
import '../widgets/snr_indicator.dart'; import '../widgets/snr_indicator.dart';
class NeighboursScreen extends StatefulWidget { class NeighborsScreen extends StatefulWidget {
final Contact repeater; final Contact repeater;
final String password; final String password;
const NeighboursScreen({ const NeighborsScreen({
super.key, super.key,
required this.repeater, required this.repeater,
required this.password, required this.password,
}); });
@override @override
State<NeighboursScreen> createState() => _NeighboursScreenState(); State<NeighborsScreen> createState() => _NeighborsScreenState();
} }
class _NeighboursScreenState extends State<NeighboursScreen> { class _NeighborsScreenState extends State<NeighborsScreen> {
static const int _reqNeighboursKeyLen = 4; static const int _reqNeighborsKeyLen = 4;
static const int _statusPayloadOffset = 8; static const int _statusPayloadOffset = 8;
static const int _statusStatsSize = 52; static const int _statusStatsSize = 52;
static const int _statusResponseBytes = static const int _statusResponseBytes =
_statusPayloadOffset + _statusStatsSize; _statusPayloadOffset + _statusStatsSize;
Uint8List _tagData = Uint8List(4); Uint8List _tagData = Uint8List(4);
int _neighbourCount = 0; int _neighborCount = 0;
bool _isLoading = false; bool _isLoading = false;
bool _isLoaded = false; bool _isLoaded = false;
@@ -42,7 +42,7 @@ class _NeighboursScreenState extends State<NeighboursScreen> {
StreamSubscription<Uint8List>? _frameSubscription; StreamSubscription<Uint8List>? _frameSubscription;
RepeaterCommandService? _commandService; RepeaterCommandService? _commandService;
PathSelection? _pendingStatusSelection; PathSelection? _pendingStatusSelection;
List<Map<String, dynamic>>? _parsedNeighbours; List<Map<String, dynamic>>? _parsedNeighbors;
@override @override
void initState() { void initState() {
@@ -50,7 +50,7 @@ class _NeighboursScreenState extends State<NeighboursScreen> {
final connector = Provider.of<MeshCoreConnector>(context, listen: false); final connector = Provider.of<MeshCoreConnector>(context, listen: false);
_commandService = RepeaterCommandService(connector); _commandService = RepeaterCommandService(connector);
_setupMessageListener(); _setupMessageListener();
_loadNeighbours(); _loadNeighbors();
_hasData = false; _hasData = false;
} }
@@ -63,13 +63,12 @@ class _NeighboursScreenState extends State<NeighboursScreen> {
if (frame[0] == respCodeSent) { if (frame[0] == respCodeSent) {
_tagData = frame.sublist(2, 6); _tagData = frame.sublist(2, 6);
//_timeEstment = frame.buffer.asByteData().getUint32(6, Endian.little);
} }
// Check if it's a binary response // Check if it's a binary response
if (frame[0] == pushCodeBinaryResponse && if (frame[0] == pushCodeBinaryResponse &&
listEquals(frame.sublist(2, 6), _tagData)) { listEquals(frame.sublist(2, 6), _tagData)) {
_handleNeighboursResponse(connector, frame.sublist(6)); _handleNeighborsResponse(connector, frame.sublist(6));
} }
}); });
} }
@@ -92,14 +91,14 @@ class _NeighboursScreenState extends State<NeighboursScreen> {
return '${h}h ${m2}m'; return '${h}h ${m2}m';
} }
static List<Map<String, dynamic>> parseNeighboursData( static List<Map<String, dynamic>> parseNeighborsData(
BufferReader buffer, BufferReader buffer,
int resultsCount, int resultsCount,
) { ) {
final Map<int, Map<String, dynamic>> neighbours = {}; final Map<int, Map<String, dynamic>> neighbors = {};
try { try {
for (var i = 0; i < resultsCount; i++) { for (var i = 0; i < resultsCount; i++) {
final neighbourData = neighbours.putIfAbsent( final neighborData = neighbors.putIfAbsent(
i, i,
() => { () => {
'contact': null, 'contact': null,
@@ -108,46 +107,43 @@ class _NeighboursScreenState extends State<NeighboursScreen> {
'snr': <double>{}, 'snr': <double>{},
}, },
); );
neighbourData['publicKey'] = buffer.readBytes(_reqNeighboursKeyLen); neighborData['publicKey'] = buffer.readBytes(_reqNeighborsKeyLen);
neighbourData['lastHeard'] = buffer.readUInt32LE(); neighborData['lastHeard'] = buffer.readUInt32LE();
neighbourData['snr'] = buffer.readInt8() / 4.0; neighborData['snr'] = buffer.readInt8() / 4.0;
} }
return neighbours.values.toList(); return neighbors.values.toList();
} catch (e) { } catch (e) {
appLogger.error( appLogger.error(
'Error parsing neighbours data: $e', 'Error parsing neighbors data: $e',
tag: 'NeighboursScreen', tag: 'NeighborsScreen',
); );
return []; return [];
} }
} }
void _handleNeighboursResponse(MeshCoreConnector connector, Uint8List frame) { void _handleNeighborsResponse(MeshCoreConnector connector, Uint8List frame) {
final buffer = BufferReader(frame); final buffer = BufferReader(frame);
try { try {
final neighbourCount = buffer.readUInt16LE(); final neighborCount = buffer.readUInt16LE();
final parsedNeighbours = parseNeighboursData( final parsedNeighbors = parseNeighborsData(buffer, buffer.readUInt16LE());
buffer,
buffer.readUInt16LE(),
);
connector.contacts.where((c) => c.type == advTypeRepeater).forEach(( connector.contacts.where((c) => c.type == advTypeRepeater).forEach((
repeater, repeater,
) { ) {
for (var neighbourData in parsedNeighbours) { for (var neighborData in parsedNeighbors) {
final publicKey = neighbourData['publicKey']; final publicKey = neighborData['publicKey'];
if (listEquals( if (listEquals(
repeater.publicKey.sublist(0, _reqNeighboursKeyLen), repeater.publicKey.sublist(0, _reqNeighborsKeyLen),
publicKey, publicKey,
)) { )) {
neighbourData['contact'] = repeater; neighborData['contact'] = repeater;
} }
} }
}); });
setState(() { setState(() {
_parsedNeighbours = parsedNeighbours; _parsedNeighbors = parsedNeighbors;
_neighbourCount = neighbourCount; _neighborCount = neighborCount;
}); });
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
@@ -164,7 +160,7 @@ class _NeighboursScreenState extends State<NeighboursScreen> {
_hasData = true; _hasData = true;
}); });
} catch (e) { } catch (e) {
appLogger.error('Error handling neighbours response: $e'); appLogger.error('Error handling neighbors response: $e');
} }
} }
@@ -175,7 +171,7 @@ class _NeighboursScreenState extends State<NeighboursScreen> {
); );
} }
Future<void> _loadNeighbours() async { Future<void> _loadNeighbors() async {
if (_commandService == null) return; if (_commandService == null) return;
setState(() { setState(() {
@@ -188,17 +184,17 @@ class _NeighboursScreenState extends State<NeighboursScreen> {
final selection = await connector.preparePathForContactSend(repeater); final selection = await connector.preparePathForContactSend(repeater);
_pendingStatusSelection = selection; _pendingStatusSelection = selection;
//[version][number of requested neighbours][offset_16bit][order by][len of public key] //[version][number of requested neighbors][offset_16bit][order by][len of public key]
final frame = buildSendBinaryReq( final frame = buildSendBinaryReq(
repeater.publicKey, repeater.publicKey,
payload: Uint8List.fromList([ payload: Uint8List.fromList([
reqTypeGetNeighbours, reqTypeGetNeighbors,
0x00, 0x00,
0x0F, 0x0F,
0x00, 0x00,
0x00, 0x00,
0x00, 0x00,
_reqNeighboursKeyLen, _reqNeighborsKeyLen,
]), ]),
); );
await connector.sendFrame(frame); await connector.sendFrame(frame);
@@ -274,7 +270,7 @@ class _NeighboursScreenState extends State<NeighboursScreen> {
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(
l10n.neighbors_repeatersNeighbours, l10n.neighbors_repeatersNeighbors,
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
), ),
Text( Text(
@@ -361,7 +357,7 @@ class _NeighboursScreenState extends State<NeighboursScreen> {
child: CircularProgressIndicator(strokeWidth: 2), child: CircularProgressIndicator(strokeWidth: 2),
) )
: const Icon(Icons.refresh), : const Icon(Icons.refresh),
onPressed: _isLoading ? null : _loadNeighbours, onPressed: _isLoading ? null : _loadNeighbors,
tooltip: l10n.repeater_refresh, tooltip: l10n.repeater_refresh,
), ),
], ],
@@ -369,13 +365,13 @@ class _NeighboursScreenState extends State<NeighboursScreen> {
body: SafeArea( body: SafeArea(
top: false, top: false,
child: RefreshIndicator( child: RefreshIndicator(
onRefresh: _loadNeighbours, onRefresh: _loadNeighbors,
child: ListView( child: ListView(
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
children: [ children: [
if (!_isLoaded && if (!_isLoaded &&
!_hasData && !_hasData &&
(_parsedNeighbours == null || _parsedNeighbours!.isEmpty)) (_parsedNeighbors == null || _parsedNeighbors!.isEmpty))
Center( Center(
child: Text( child: Text(
l10n.neighbors_noData, l10n.neighbors_noData,
@@ -384,10 +380,9 @@ class _NeighboursScreenState extends State<NeighboursScreen> {
), ),
if (_isLoaded || if (_isLoaded ||
_hasData && _hasData &&
!(_parsedNeighbours == null || !(_parsedNeighbors == null || _parsedNeighbors!.isEmpty))
_parsedNeighbours!.isEmpty)) _buildNeighborsInfoCard(
_buildNeighboursInfoCard( "${l10n.repeater_neighbors} - $_neighborCount",
"${l10n.repeater_neighbours} - $_neighbourCount",
), ),
], ],
), ),
@@ -396,7 +391,7 @@ class _NeighboursScreenState extends State<NeighboursScreen> {
); );
} }
Widget _buildNeighboursInfoCard(String title) { Widget _buildNeighborsInfoCard(String title) {
final connector = Provider.of<MeshCoreConnector>(context, listen: false); final connector = Provider.of<MeshCoreConnector>(context, listen: false);
return Card( return Card(
child: Padding( child: Padding(
@@ -421,7 +416,7 @@ class _NeighboursScreenState extends State<NeighboursScreen> {
], ],
), ),
const Divider(), const Divider(),
for (final entry in _parsedNeighbours!.asMap().entries) for (final entry in _parsedNeighbors!.asMap().entries)
_buildInfoRow( _buildInfoRow(
entry.value['contact'] != null entry.value['contact'] != null
? entry.value['contact'].name ? entry.value['contact'].name
+5 -7
View File
@@ -6,7 +6,7 @@ import 'repeater_status_screen.dart';
import 'repeater_cli_screen.dart'; import 'repeater_cli_screen.dart';
import 'repeater_settings_screen.dart'; import 'repeater_settings_screen.dart';
import 'telemetry_screen.dart'; import 'telemetry_screen.dart';
import 'neighbours_screen.dart'; import 'neighbors_screen.dart';
class RepeaterHubScreen extends StatelessWidget { class RepeaterHubScreen extends StatelessWidget {
final Contact repeater; final Contact repeater;
@@ -174,17 +174,15 @@ class RepeaterHubScreen extends StatelessWidget {
_buildManagementCard( _buildManagementCard(
context, context,
icon: Icons.group, icon: Icons.group,
title: l10n.repeater_neighbours, title: l10n.repeater_neighbors,
subtitle: l10n.repeater_neighboursSubtitle, subtitle: l10n.repeater_neighborsSubtitle,
color: Colors.orange, color: Colors.orange,
onTap: () { onTap: () {
Navigator.push( Navigator.push(
context, context,
MaterialPageRoute( MaterialPageRoute(
builder: (context) => NeighboursScreen( builder: (context) =>
repeater: repeater, NeighborsScreen(repeater: repeater, password: password),
password: password,
),
), ),
); );
}, },