Added block unblock domain for a client

This commit is contained in:
Juan Gilsanz Polo 2024-03-09 20:07:24 +01:00
parent 31ad3fcf6a
commit 806e74ca9f
3 changed files with 61 additions and 2 deletions

View file

@ -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"
}

View file

@ -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"
}

View file

@ -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<AppConfigProvider>(context);
final statusProvider = Provider.of<StatusProvider>(context);
final clientsProvider = Provider.of<ClientsProvider>(context);
final filteringProvider = Provider.of<FilteringProvider>(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,