From 806e74ca9fa29a8731ce5bbdebbfbd94c95ce170 Mon Sep 17 00:00:00 2001 From: Juan Gilsanz Polo Date: Sat, 9 Mar 2024 20:07:24 +0100 Subject: [PATCH] Added block unblock domain for a client --- lib/l10n/app_en.arb | 6 +++- lib/l10n/app_es.arb | 6 +++- lib/screens/logs/log_tile.dart | 51 ++++++++++++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index 17b3cc7..cd626ac 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -780,5 +780,9 @@ "date": "Date", "loadingChangelog": "Loading changelog...", "invalidIpOrUrl": "Invalid IP address or URL", - "addPersistentClient": "Add as a persistent client" + "addPersistentClient": "Add as a persistent client", + "blockThisClientOnly": "Block for this client only", + "unblockThisClientOnly": "Unblock for this client only", + "domainBlockedThisClient": "{domain} blocked for this client", + "domainUnblockedThisClient": "{domain} unblocked for this client" } \ No newline at end of file diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index cd63b77..1faf2c7 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -780,5 +780,9 @@ "date": "Fecha", "loadingChangelog": "Cargando registro de cambios...", "invalidIpOrUrl": "Dirección IP o URL no válida", - "addPersistentClient": "Añadir como cliente persistente" + "addPersistentClient": "Añadir como cliente persistente", + "blockThisClientOnly": "Bloquear sólo para este cliente", + "unblockThisClientOnly": "Desbloquear sólo para este cliente", + "domainBlockedThisClient": "{domain} bloqueado para este cliente", + "domainUnblockedThisClient": "{domain} desbloqueado para este cliente" } \ No newline at end of file diff --git a/lib/screens/logs/log_tile.dart b/lib/screens/logs/log_tile.dart index c59aa64..bd44f95 100644 --- a/lib/screens/logs/log_tile.dart +++ b/lib/screens/logs/log_tile.dart @@ -9,6 +9,7 @@ import 'package:adguard_home_manager/screens/clients/client/client_screen.dart'; import 'package:adguard_home_manager/widgets/options_menu.dart'; import 'package:adguard_home_manager/providers/status_provider.dart'; +import 'package:adguard_home_manager/providers/filtering_provider.dart'; import 'package:adguard_home_manager/classes/process_modal.dart'; import 'package:adguard_home_manager/functions/snackbar.dart'; import 'package:adguard_home_manager/functions/copy_clipboard.dart'; @@ -45,6 +46,7 @@ class LogTile extends StatelessWidget { final appConfigProvider = Provider.of(context); final statusProvider = Provider.of(context); final clientsProvider = Provider.of(context); + final filteringProvider = Provider.of(context); Widget logStatusWidget({ required IconData icon, @@ -147,6 +149,37 @@ class LogTile extends StatelessWidget { } } + void blockUnblockRuleClient() async { + ProcessModal processModal = ProcessModal(); + processModal.open(AppLocalizations.of(context)!.addingRule); + + final rule = isDomainBlocked(log.reason) == true + ? "@@||${log.question.name}^\$client='${log.client}'" + : "||${log.question.name}^\$client='${log.client}'"; + + final result = await filteringProvider.addCustomRule(rule); + + processModal.close(); + + if (!context.mounted) return; + if (result == true) { + showSnacbkar( + appConfigProvider: appConfigProvider, + label: isDomainBlocked(log.reason) == true + ? AppLocalizations.of(context)!.domainUnblockedThisClient(log.question.name!) + : AppLocalizations.of(context)!.domainBlockedThisClient(log.question.name!), + color: Colors.green + ); + } + else { + showSnacbkar( + appConfigProvider: appConfigProvider, + label: AppLocalizations.of(context)!.ruleNotAdded, + color: Colors.red + ); + } + } + void openAddClient() { Future.delayed( const Duration(milliseconds: 0), @@ -182,6 +215,15 @@ class LogTile extends StatelessWidget { newStatus: domainBlocked == true ? 'unblock' : 'block' ) ), + MenuOption( + title: domainBlocked == true + ? AppLocalizations.of(context)!.unblockThisClientOnly + : AppLocalizations.of(context)!.blockThisClientOnly, + icon: domainBlocked == true + ? Icons.check_rounded + : Icons.block_rounded, + action: blockUnblockRuleClient + ), if (log.clientInfo?.name == "") MenuOption( title: AppLocalizations.of(context)!.addPersistentClient, icon: Icons.add_rounded, @@ -365,6 +407,15 @@ class LogTile extends StatelessWidget { newStatus: domainBlocked == true ? 'unblock' : 'block' ) ), + MenuOption( + title: domainBlocked == true + ? AppLocalizations.of(context)!.unblockThisClientOnly + : AppLocalizations.of(context)!.blockThisClientOnly, + icon: domainBlocked == true + ? Icons.check_rounded + : Icons.block_rounded, + action: blockUnblockRuleClient + ), if (log.clientInfo?.name == "") MenuOption( title: AppLocalizations.of(context)!.addPersistentClient, icon: Icons.add_rounded,