mirror of
https://github.com/zjs81/meshcore-open.git
synced 2026-04-20 22:13:48 +00:00
Merge remote-tracking branch 'origin/issue-fix-channel-edit-delete-actions' into combined-prs
This commit is contained in:
commit
ea1d728d4f
33 changed files with 175 additions and 26 deletions
|
|
@ -1,4 +1,6 @@
|
|||
{
|
||||
"channels_channelDeleteFailed": "Неуспешно изтриване на канала \"{name}\"",
|
||||
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
|
||||
"@@locale": "bg",
|
||||
"appTitle": "MeshCore Open",
|
||||
"nav_contacts": "Контакти",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
{
|
||||
"channels_channelDeleteFailed": "Kanal {name} konnte nicht gelöscht werden",
|
||||
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
|
||||
"@@locale": "de",
|
||||
"appTitle": "MeshCore Open",
|
||||
"nav_contacts": "Kontakte",
|
||||
|
|
|
|||
|
|
@ -365,6 +365,14 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"channels_channelDeleteFailed": "Failed to delete channel \"{name}\"",
|
||||
"@channels_channelDeleteFailed": {
|
||||
"placeholders": {
|
||||
"name": {
|
||||
"type": "String"
|
||||
}
|
||||
}
|
||||
},
|
||||
"channels_channelDeleted": "Channel \"{name}\" deleted",
|
||||
"@channels_channelDeleted": {
|
||||
"placeholders": {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
{
|
||||
"channels_channelDeleteFailed": "No se pudo eliminar el canal \"{name}\"",
|
||||
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
|
||||
"@@locale": "es",
|
||||
"appTitle": "MeshCore Open",
|
||||
"nav_contacts": "Contactos",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
{
|
||||
"channels_channelDeleteFailed": "Échec de la suppression de la chaîne \"{name}\"",
|
||||
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
|
||||
"@@locale": "fr",
|
||||
"appTitle": "MeshCore Open",
|
||||
"nav_contacts": "Contacts",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
{
|
||||
"channels_channelDeleteFailed": "Impossibile eliminare il canale \"{name}\"",
|
||||
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
|
||||
"@@locale": "it",
|
||||
"appTitle": "MeshCore Open",
|
||||
"nav_contacts": "Contatti",
|
||||
|
|
|
|||
|
|
@ -1582,6 +1582,12 @@ abstract class AppLocalizations {
|
|||
/// **'Delete \"{name}\"? This cannot be undone.'**
|
||||
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.
|
||||
///
|
||||
/// In en, this message translates to:
|
||||
|
|
|
|||
|
|
@ -820,6 +820,11 @@ class AppLocalizationsBg extends AppLocalizations {
|
|||
return 'Изтрий \"$name\"? Това не може да бъде отменено.';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleteFailed(String name) {
|
||||
return 'Неуспешно изтриване на канала \"$name\"';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleted(String name) {
|
||||
return 'Каналът \"$name\" е изтрит';
|
||||
|
|
|
|||
|
|
@ -817,6 +817,11 @@ class AppLocalizationsDe extends AppLocalizations {
|
|||
return 'Löschen von \"$name\"? Dies kann nicht rückgängig gemacht werden.';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleteFailed(String name) {
|
||||
return 'Kanal $name konnte nicht gelöscht werden';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleted(String name) {
|
||||
return 'Kanal \"$name\" gelöscht';
|
||||
|
|
|
|||
|
|
@ -808,6 +808,11 @@ class AppLocalizationsEn extends AppLocalizations {
|
|||
return 'Delete \"$name\"? This cannot be undone.';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleteFailed(String name) {
|
||||
return 'Failed to delete channel \"$name\"';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleted(String name) {
|
||||
return 'Channel \"$name\" deleted';
|
||||
|
|
|
|||
|
|
@ -818,6 +818,11 @@ class AppLocalizationsEs extends AppLocalizations {
|
|||
return 'Eliminar \"$name\"? Esto no se puede deshacer.';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleteFailed(String name) {
|
||||
return 'No se pudo eliminar el canal \"$name\"';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleted(String name) {
|
||||
return 'Canal \"$name\" eliminado';
|
||||
|
|
|
|||
|
|
@ -820,6 +820,11 @@ class AppLocalizationsFr extends AppLocalizations {
|
|||
return 'Supprimer $name? Cela ne peut pas être annulé.';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleteFailed(String name) {
|
||||
return 'Échec de la suppression de la chaîne \"$name\"';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleted(String name) {
|
||||
return 'Le canal \"$name\" a été supprimé';
|
||||
|
|
|
|||
|
|
@ -816,6 +816,11 @@ class AppLocalizationsIt extends AppLocalizations {
|
|||
return 'Eliminare \"$name\"? Non può essere annullato.';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleteFailed(String name) {
|
||||
return 'Impossibile eliminare il canale \"$name\"';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleted(String name) {
|
||||
return 'Canale \"$name\" eliminato';
|
||||
|
|
|
|||
|
|
@ -813,6 +813,11 @@ class AppLocalizationsNl extends AppLocalizations {
|
|||
return 'Verwijderen \"$name\"? Dit kan niet worden teruggedraaid.';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleteFailed(String name) {
|
||||
return 'Kan kanaal $name niet verwijderen';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleted(String name) {
|
||||
return 'Kanaal \"$name\" verwijderd';
|
||||
|
|
|
|||
|
|
@ -818,6 +818,11 @@ class AppLocalizationsPl extends AppLocalizations {
|
|||
return 'Usuń \"$name\"? Nie można tego cofnąć.';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleteFailed(String name) {
|
||||
return 'Nie udało się usunąć kanału \"$name\"';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleted(String name) {
|
||||
return 'Kanał \"$name\" usunięto';
|
||||
|
|
|
|||
|
|
@ -819,6 +819,11 @@ class AppLocalizationsPt extends AppLocalizations {
|
|||
return 'Excluir \"$name\"? Não pode ser desfeito.';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleteFailed(String name) {
|
||||
return 'Falha ao excluir o canal \"$name\"';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleted(String name) {
|
||||
return 'Canal \"$name\" excluído';
|
||||
|
|
|
|||
|
|
@ -817,6 +817,11 @@ class AppLocalizationsRu extends AppLocalizations {
|
|||
return 'Удалить \"$name\"? Это действие нельзя отменить.';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleteFailed(String name) {
|
||||
return 'Не удалось удалить канал $name.';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleted(String name) {
|
||||
return 'Канал \"$name\" удалён';
|
||||
|
|
|
|||
|
|
@ -813,6 +813,11 @@ class AppLocalizationsSk extends AppLocalizations {
|
|||
return 'Odstrániť \"$name\"? To sa nedá zrušiť.';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleteFailed(String name) {
|
||||
return 'Kanál \"$name\" sa nepodarilo odstrániť';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleted(String name) {
|
||||
return 'Kanál \"$name\" bol odstránený';
|
||||
|
|
|
|||
|
|
@ -811,6 +811,11 @@ class AppLocalizationsSl extends AppLocalizations {
|
|||
return 'Izbrišem \"$name\"? To se ne da povrniti.';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleteFailed(String name) {
|
||||
return 'Kanala $name ni bilo mogoče izbrisati';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleted(String name) {
|
||||
return 'Kanal \"$name\" izbrisan.';
|
||||
|
|
|
|||
|
|
@ -807,6 +807,11 @@ class AppLocalizationsSv extends AppLocalizations {
|
|||
return 'Radera \"$name\"? Detta kan inte ångras.';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleteFailed(String name) {
|
||||
return 'Det gick inte att ta bort kanalen \"$name\"';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleted(String name) {
|
||||
return 'Kanalen \"$name\" raderad';
|
||||
|
|
|
|||
|
|
@ -815,6 +815,11 @@ class AppLocalizationsUk extends AppLocalizations {
|
|||
return 'Видалити $name? Це не можна скасувати.';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleteFailed(String name) {
|
||||
return 'Не вдалося видалити канал \"$name\"';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleted(String name) {
|
||||
return 'Канал «$name» видалено';
|
||||
|
|
|
|||
|
|
@ -775,6 +775,11 @@ class AppLocalizationsZh extends AppLocalizations {
|
|||
return 'Delete \"$name\"? This cannot be undone.';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleteFailed(String name) {
|
||||
return '无法删除频道 \"$name\"';
|
||||
}
|
||||
|
||||
@override
|
||||
String channels_channelDeleted(String name) {
|
||||
return '删除频道 \"$name\"';
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
{
|
||||
"channels_channelDeleteFailed": "Kan kanaal {name} niet verwijderen",
|
||||
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
|
||||
"@@locale": "nl",
|
||||
"appTitle": "MeshCore Open",
|
||||
"nav_contacts": "Contacten",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
{
|
||||
"channels_channelDeleteFailed": "Nie udało się usunąć kanału \"{name}\"",
|
||||
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
|
||||
"@@locale": "pl",
|
||||
"appTitle": "MeshCore Open",
|
||||
"nav_contacts": "Kontakty",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
{
|
||||
"channels_channelDeleteFailed": "Falha ao excluir o canal \"{name}\"",
|
||||
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
|
||||
"@@locale": "pt",
|
||||
"appTitle": "MeshCore Open",
|
||||
"nav_contacts": "Contactos",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
{
|
||||
"channels_channelDeleteFailed": "Не удалось удалить канал {name}.",
|
||||
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
|
||||
"@@locale": "ru",
|
||||
"appTitle": "MeshCore Open",
|
||||
"nav_contacts": "Контакты",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
{
|
||||
"channels_channelDeleteFailed": "Kanál \"{name}\" sa nepodarilo odstrániť",
|
||||
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
|
||||
"@@locale": "sk",
|
||||
"appTitle": "MeshCore Open",
|
||||
"nav_contacts": "Kontakty",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
{
|
||||
"channels_channelDeleteFailed": "Kanala {name} ni bilo mogoče izbrisati",
|
||||
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
|
||||
"@@locale": "sl",
|
||||
"appTitle": "MeshCore Open",
|
||||
"nav_contacts": "Stiki",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
{
|
||||
"channels_channelDeleteFailed": "Det gick inte att ta bort kanalen \"{name}\"",
|
||||
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
|
||||
"@@locale": "sv",
|
||||
"appTitle": "MeshCore Open",
|
||||
"nav_contacts": "Kontakter",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
{
|
||||
"channels_channelDeleteFailed": "Не вдалося видалити канал \"{name}\"",
|
||||
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
|
||||
"@@locale": "uk",
|
||||
"appTitle": "MeshCore Open",
|
||||
"nav_contacts": "Контакти",
|
||||
|
|
|
|||
|
|
@ -1,4 +1,6 @@
|
|||
{
|
||||
"channels_channelDeleteFailed": "无法删除频道 \"{name}\"",
|
||||
"@channels_channelDeleteFailed": { "placeholders": { "name": { "type": "String" } } },
|
||||
"@@locale": "zh",
|
||||
"appTitle": "MeshCore Open",
|
||||
"nav_contacts": "联系方式",
|
||||
|
|
|
|||
|
|
@ -489,12 +489,13 @@ class _ChannelsScreenState extends State<ChannelsScreen>
|
|||
ChannelMessageStore channelMessageStore,
|
||||
Channel channel,
|
||||
) {
|
||||
final parentContext = context;
|
||||
final settingsService = context.read<AppSettingsService>();
|
||||
final isMuted = settingsService.isChannelMuted(channel.name);
|
||||
|
||||
showModalBottomSheet(
|
||||
context: context,
|
||||
builder: (context) => SafeArea(
|
||||
context: parentContext,
|
||||
builder: (sheetContext) => SafeArea(
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
|
|
@ -502,10 +503,10 @@ class _ChannelsScreenState extends State<ChannelsScreen>
|
|||
leading: const Icon(Icons.edit_outlined),
|
||||
title: Text(context.l10n.channels_editChannel),
|
||||
onTap: () async {
|
||||
Navigator.pop(context);
|
||||
Navigator.pop(sheetContext);
|
||||
await Future.delayed(const Duration(milliseconds: 100));
|
||||
if (context.mounted) {
|
||||
_showEditChannelDialog(context, connector, channel);
|
||||
if (parentContext.mounted) {
|
||||
_showEditChannelDialog(parentContext, connector, channel);
|
||||
}
|
||||
},
|
||||
),
|
||||
|
|
@ -521,7 +522,7 @@ class _ChannelsScreenState extends State<ChannelsScreen>
|
|||
: context.l10n.channels_muteChannel,
|
||||
),
|
||||
onTap: () async {
|
||||
Navigator.pop(context);
|
||||
Navigator.pop(sheetContext);
|
||||
if (isMuted) {
|
||||
await settingsService.unmuteChannel(channel.name);
|
||||
} else {
|
||||
|
|
@ -536,9 +537,9 @@ class _ChannelsScreenState extends State<ChannelsScreen>
|
|||
style: const TextStyle(color: Colors.red),
|
||||
),
|
||||
onTap: () async {
|
||||
Navigator.pop(context);
|
||||
Navigator.pop(sheetContext);
|
||||
await Future.delayed(const Duration(milliseconds: 100));
|
||||
if (context.mounted) {
|
||||
if (parentContext.mounted) {
|
||||
_confirmDeleteChannel(
|
||||
context,
|
||||
connector,
|
||||
|
|
@ -1454,7 +1455,7 @@ class _ChannelsScreenState extends State<ChannelsScreen>
|
|||
child: Text(dialogContext.l10n.common_cancel),
|
||||
),
|
||||
FilledButton(
|
||||
onPressed: () {
|
||||
onPressed: () async {
|
||||
final name = nameController.text.trim();
|
||||
final pskHex = pskController.text.trim();
|
||||
|
||||
|
|
@ -1471,13 +1472,25 @@ class _ChannelsScreenState extends State<ChannelsScreen>
|
|||
}
|
||||
|
||||
Navigator.pop(dialogContext);
|
||||
connector.setChannel(channel.index, name, psk);
|
||||
connector.setChannelSmazEnabled(channel.index, smazEnabled);
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(context.l10n.channels_channelUpdated(name)),
|
||||
),
|
||||
);
|
||||
try {
|
||||
await connector.setChannel(channel.index, name, psk);
|
||||
await connector.setChannelSmazEnabled(
|
||||
channel.index,
|
||||
smazEnabled,
|
||||
);
|
||||
if (!context.mounted) return;
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(context.l10n.channels_channelUpdated(name)),
|
||||
),
|
||||
);
|
||||
} catch (e, st) {
|
||||
debugPrint(st.toString());
|
||||
if (!context.mounted) return;
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(content: Text('Failed to update channel: $e')),
|
||||
);
|
||||
}
|
||||
},
|
||||
child: Text(dialogContext.l10n.common_save),
|
||||
),
|
||||
|
|
@ -1506,17 +1519,36 @@ class _ChannelsScreenState extends State<ChannelsScreen>
|
|||
child: Text(dialogContext.l10n.common_cancel),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
onPressed: () async {
|
||||
Navigator.pop(dialogContext);
|
||||
connector.deleteChannel(channel.index);
|
||||
channelMessageStore.clearChannelMessages(channel.index);
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
context.l10n.channels_channelDeleted(channel.name),
|
||||
try {
|
||||
await connector.deleteChannel(channel.index);
|
||||
|
||||
channelMessageStore.clearChannelMessages(channel.index);
|
||||
|
||||
if (!context.mounted) return;
|
||||
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
context.l10n.channels_channelDeleted(channel.name),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
);
|
||||
} catch (e, st) {
|
||||
if (!context.mounted) return;
|
||||
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(
|
||||
context.l10n.channels_channelDeleteFailed(channel.name),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
// Preserve existing logging (if it was there)
|
||||
debugPrint('Failed to delete channel: $e\n$st');
|
||||
}
|
||||
},
|
||||
child: Text(
|
||||
dialogContext.l10n.common_delete,
|
||||
|
|
|
|||
|
|
@ -1140,4 +1140,4 @@ packages:
|
|||
version: "3.1.3"
|
||||
sdks:
|
||||
dart: ">=3.10.3 <4.0.0"
|
||||
flutter: ">=3.38.4"
|
||||
flutter: ">=3.38.4"
|
||||
Loading…
Add table
Add a link
Reference in a new issue