Added update lists

This commit is contained in:
Juan Gilsanz Polo 2022-10-09 22:25:05 +02:00
parent 66e41af7c8
commit 5803998d73
4 changed files with 140 additions and 5 deletions

View file

@ -281,5 +281,11 @@
"disallowClient": "Disallow client",
"noDisallowedDomains": "No disallowed domains",
"domainNotAdded": "The domain couldn't be added",
"statusSelected": "status selected"
"statusSelected": "status selected",
"updateLists": "Update lists",
"checkHostFiltered": "Check host",
"updatingLists": "Updating lists...",
"listsUpdated": "lists updated",
"listsNotUpdated": "Couldn't update lists",
"listsNotLoaded": "Lists couldn't be loaded"
}

View file

@ -281,5 +281,11 @@
"disallowClient": "No permitir cliente",
"noDisallowedDomains": "No hay dominios no permitidos",
"domainNotAdded": "El dominio no pudo ser añadido",
"statusSelected": "estado/s seleccionados"
"statusSelected": "estado/s seleccionados",
"updateLists": "Actualizar listas",
"checkHostFiltered": "Comprobar host",
"updatingLists": "Actualizando listas...",
"listsUpdated": "listas actualizadas",
"listsNotUpdated": "No se pudieron actualizar las listas",
"listsNotLoaded": "No se pudieron cargar las listas"
}

View file

@ -1,3 +1,5 @@
// ignore_for_file: use_build_context_synchronously
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
@ -5,6 +7,8 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/screens/filters/filters_list.dart';
import 'package:adguard_home_manager/screens/filters/custom_rules_list.dart';
import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/classes/process_modal.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
import 'package:adguard_home_manager/models/clients.dart';
@ -51,11 +55,11 @@ class _FiltersWidgetState extends State<FiltersWidget> with TickerProviderStateM
if (mounted) {
if (result['result'] == 'success') {
widget.serversProvider.setFilteringData(result['data']);
widget.serversProvider.setFilteringLoadStatus(1, true);
widget.serversProvider.setFilteringLoadStatus(1, false);
}
else {
widget.appConfigProvider.addLog(result['log']);
widget.serversProvider.setFilteringLoadStatus(2, true);
widget.serversProvider.setFilteringLoadStatus(2, false);
}
}
}
@ -79,6 +83,55 @@ class _FiltersWidgetState extends State<FiltersWidget> with TickerProviderStateM
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
void fetchUpdateLists() async {
ProcessModal processModal = ProcessModal(context: context);
processModal.open(AppLocalizations.of(context)!.updatingLists);
final result = await updateLists(server: serversProvider.selectedServer!);
if (result['result'] == 'success') {
final result2 = await getFiltering(server: widget.serversProvider.selectedServer!);
processModal.close();
if (mounted) {
if (result2['result'] == 'success') {
widget.serversProvider.setFilteringData(result2['data']);
showSnacbkar(
context: context,
appConfigProvider: appConfigProvider,
label: "${result['data']['updated']} ${AppLocalizations.of(context)!.listsUpdated}",
color: Colors.green
);
}
else {
widget.appConfigProvider.addLog(result2['log']);
showSnacbkar(
context: context,
appConfigProvider: appConfigProvider,
label: AppLocalizations.of(context)!.listsNotLoaded,
color: Colors.red
);
}
}
}
else {
processModal.close();
appConfigProvider.addLog(result['log']);
showSnacbkar(
context: context,
appConfigProvider: appConfigProvider,
label: AppLocalizations.of(context)!.listsNotUpdated,
color: Colors.red
);
}
}
return DefaultTabController(
length: 3,
@ -92,10 +145,35 @@ class _FiltersWidgetState extends State<FiltersWidget> with TickerProviderStateM
top: false,
sliver: SliverAppBar(
title: Text(AppLocalizations.of(context)!.filters),
centerTitle: true,
pinned: true,
floating: true,
forceElevated: innerBoxIsScrolled,
actions: [
PopupMenuButton(
itemBuilder: (context) => [
PopupMenuItem(
onTap: fetchUpdateLists,
child: Row(
children: [
const Icon(Icons.update),
const SizedBox(width: 10),
Text(AppLocalizations.of(context)!.updateLists)
],
)
),
PopupMenuItem(
child: Row(
children: [
const Icon(Icons.shield_rounded),
const SizedBox(width: 10),
Text(AppLocalizations.of(context)!.checkHostFiltered)
],
)
),
]
),
const SizedBox(width: 5),
],
bottom: TabBar(
controller: tabController,
tabs: [

View file

@ -916,3 +916,48 @@ Future getServerInfo({
return result;
}
}
Future updateLists({
required Server server,
}) async {
final result = await Future.wait([
apiRequest(
urlPath: '/filtering/refresh',
method: 'post',
server: server,
body: {'whitelist': true},
type: 'update_lists'
),
apiRequest(
urlPath: '/filtering/refresh',
method: 'post',
server: server,
body: {'whitelist': false},
type: 'update_lists'
),
]);
if (result[0]['hasResponse'] == true && result[1]['hasResponse'] == true) {
if (result[0]['statusCode'] == 200 && result[1]['statusCode'] == 200) {
return {
'result': 'success',
'data': {'updated': jsonDecode(result[0]['body'])['updated']+jsonDecode(result[1]['body'])['updated']}
};
}
else {
return {
'result': 'error',
'log': AppLog(
type: 'update_lists',
dateTime: DateTime.now(),
message: 'error_code_not_expected',
statusCode: result.map((res) => res['statusCode'] ?? 'null').toString(),
resBody: result.map((res) => res['body'] ?? 'null').toString(),
)
};
}
}
else {
return result;
}
}