Extracted server status stuff to a separate provider

This commit is contained in:
Juan Gilsanz Polo 2023-05-24 13:51:22 +02:00
parent 0271c704a7
commit 4a2d78e8cf
30 changed files with 585 additions and 405 deletions

View file

@ -4,6 +4,8 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/screens/servers/servers.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/functions/open_url.dart';
import 'package:adguard_home_manager/models/server.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
@ -20,6 +22,7 @@ class HomeAppBar extends StatelessWidget {
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final statusProvider = Provider.of<StatusProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
final Server? server = serversProvider.selectedServer;
@ -38,14 +41,14 @@ class HomeAppBar extends StatelessWidget {
centerTitle: false,
forceElevated: innerBoxScrolled,
leading: Icon(
serversProvider.selectedServer != null && serversProvider.serverStatus.data != null
? serversProvider.serverStatus.data!.generalEnabled == true
serversProvider.selectedServer != null && statusProvider.serverStatus != null
? statusProvider.serverStatus!.generalEnabled == true
? Icons.gpp_good_rounded
: Icons.gpp_bad_rounded
: Icons.shield,
size: 30,
color: serversProvider.selectedServer != null && serversProvider.serverStatus.data != null
? serversProvider.serverStatus.data!.generalEnabled == true
color: serversProvider.selectedServer != null && statusProvider.serverStatus != null
? statusProvider.serverStatus!.generalEnabled == true
? appConfigProvider.useThemeColorForStatus
? Theme.of(context).colorScheme.primary
: Colors.green
@ -95,7 +98,7 @@ class HomeAppBar extends StatelessWidget {
],
),
),
if (serversProvider.selectedServer != null && serversProvider.serverStatus.loadStatus == 1) PopupMenuItem(
if (serversProvider.selectedServer != null && statusProvider.loadStatus == LoadStatus.loaded) PopupMenuItem(
onTap: () => openUrl("${server!.connectionMethod}://${server.domain}${server.path ?? ""}${server.port != null ? ':${server.port}' : ""}"),
child: Row(
children: [

View file

@ -7,7 +7,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/widgets/combined_line_chart.dart';
import 'package:adguard_home_manager/functions/number_format.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
class CombinedChartData {
@ -51,56 +51,56 @@ class CombinedHomeChart extends StatelessWidget {
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final statusProvider = Provider.of<StatusProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
final width = MediaQuery.of(context).size.width;
if (serversProvider.serverStatus.data != null) {
if (statusProvider.serverStatus != null) {
final data = CombinedChartData(
totalQueries: CombinedChartItem(
label: AppLocalizations.of(context)!.dnsQueries,
color: Colors.blue,
data: serversProvider.serverStatus.data!.stats.dnsQueries
data: statusProvider.serverStatus!.stats.dnsQueries
),
blockedFilters: appConfigProvider.hideZeroValues == true
? removeZero(serversProvider.serverStatus.data!.stats.blockedFiltering) != null
? removeZero(statusProvider.serverStatus!.stats.blockedFiltering) != null
? CombinedChartItem(
label: AppLocalizations.of(context)!.blockedFilters,
color: Colors.red,
data: serversProvider.serverStatus.data!.stats.blockedFiltering
data: statusProvider.serverStatus!.stats.blockedFiltering
)
: null
: CombinedChartItem(
label: AppLocalizations.of(context)!.blockedFilters,
color: Colors.red,
data: serversProvider.serverStatus.data!.stats.blockedFiltering
data: statusProvider.serverStatus!.stats.blockedFiltering
) ,
replacedSafeBrowsing: appConfigProvider.hideZeroValues == true
? removeZero(serversProvider.serverStatus.data!.stats.replacedSafebrowsing) != null
? removeZero(statusProvider.serverStatus!.stats.replacedSafebrowsing) != null
? CombinedChartItem(
label: AppLocalizations.of(context)!.malwarePhisingBlocked,
color: Colors.green,
data: serversProvider.serverStatus.data!.stats.replacedSafebrowsing
data: statusProvider.serverStatus!.stats.replacedSafebrowsing
)
: null
: CombinedChartItem(
label: AppLocalizations.of(context)!.malwarePhisingBlocked,
color: Colors.green,
data: serversProvider.serverStatus.data!.stats.replacedSafebrowsing
data: statusProvider.serverStatus!.stats.replacedSafebrowsing
) ,
replacedParental: appConfigProvider.hideZeroValues == true
? removeZero(serversProvider.serverStatus.data!.stats.replacedParental) != null
? removeZero(statusProvider.serverStatus!.stats.replacedParental) != null
? CombinedChartItem(
label: AppLocalizations.of(context)!.blockedAdultWebsites,
color: Colors.orange,
data: serversProvider.serverStatus.data!.stats.replacedParental
data: statusProvider.serverStatus!.stats.replacedParental
)
: null
: CombinedChartItem(
label: AppLocalizations.of(context)!.blockedAdultWebsites,
color: Colors.orange,
data: serversProvider.serverStatus.data!.stats.replacedParental
data: statusProvider.serverStatus!.stats.replacedParental
) ,
);
@ -184,29 +184,29 @@ class CombinedHomeChart extends StatelessWidget {
legend(
label: data.totalQueries.label,
color: data.totalQueries.color,
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numDnsQueries, Platform.localeName),
secondaryValue: "${doubleFormat(serversProvider.serverStatus.data!.stats.avgProcessingTime*1000, Platform.localeName)} ms",
primaryValue: intFormat(statusProvider.serverStatus!.stats.numDnsQueries, Platform.localeName),
secondaryValue: "${doubleFormat(statusProvider.serverStatus!.stats.avgProcessingTime*1000, Platform.localeName)} ms",
),
const SizedBox(height: 16),
if (data.blockedFilters != null) legend(
label: data.blockedFilters!.label,
color: data.blockedFilters!.color,
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numBlockedFiltering, Platform.localeName),
secondaryValue: "${serversProvider.serverStatus.data!.stats.numDnsQueries > 0 ? doubleFormat((serversProvider.serverStatus.data!.stats.numBlockedFiltering/serversProvider.serverStatus.data!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
primaryValue: intFormat(statusProvider.serverStatus!.stats.numBlockedFiltering, Platform.localeName),
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numBlockedFiltering/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
),
const SizedBox(height: 16),
if (data.replacedSafeBrowsing != null) legend(
label: data.replacedSafeBrowsing!.label,
color: data.replacedSafeBrowsing!.color,
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numReplacedSafebrowsing, Platform.localeName),
secondaryValue: "${serversProvider.serverStatus.data!.stats.numDnsQueries > 0 ? doubleFormat((serversProvider.serverStatus.data!.stats.numReplacedSafebrowsing/serversProvider.serverStatus.data!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
primaryValue: intFormat(statusProvider.serverStatus!.stats.numReplacedSafebrowsing, Platform.localeName),
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numReplacedSafebrowsing/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
),
const SizedBox(height: 16),
if (data.replacedParental != null) legend(
label: data.replacedParental!.label,
color: data.replacedParental!.color,
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numReplacedParental, Platform.localeName),
secondaryValue: "${serversProvider.serverStatus.data!.stats.numDnsQueries > 0 ? doubleFormat((serversProvider.serverStatus.data!.stats.numReplacedParental/serversProvider.serverStatus.data!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
primaryValue: intFormat(statusProvider.serverStatus!.stats.numReplacedParental, Platform.localeName),
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numReplacedParental/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
),
],
),
@ -247,29 +247,29 @@ class CombinedHomeChart extends StatelessWidget {
legend(
label: data.totalQueries.label,
color: data.totalQueries.color,
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numDnsQueries, Platform.localeName),
secondaryValue: "${doubleFormat(serversProvider.serverStatus.data!.stats.avgProcessingTime*1000, Platform.localeName)} ms",
primaryValue: intFormat(statusProvider.serverStatus!.stats.numDnsQueries, Platform.localeName),
secondaryValue: "${doubleFormat(statusProvider.serverStatus!.stats.avgProcessingTime*1000, Platform.localeName)} ms",
),
const SizedBox(height: 16),
if (data.blockedFilters != null) legend(
label: data.blockedFilters!.label,
color: data.blockedFilters!.color,
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numBlockedFiltering, Platform.localeName),
secondaryValue: "${serversProvider.serverStatus.data!.stats.numDnsQueries > 0 ? doubleFormat((serversProvider.serverStatus.data!.stats.numBlockedFiltering/serversProvider.serverStatus.data!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
primaryValue: intFormat(statusProvider.serverStatus!.stats.numBlockedFiltering, Platform.localeName),
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numBlockedFiltering/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
),
const SizedBox(height: 16),
if (data.replacedSafeBrowsing != null) legend(
label: data.replacedSafeBrowsing!.label,
color: data.replacedSafeBrowsing!.color,
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numReplacedSafebrowsing, Platform.localeName),
secondaryValue: "${serversProvider.serverStatus.data!.stats.numDnsQueries > 0 ? doubleFormat((serversProvider.serverStatus.data!.stats.numReplacedSafebrowsing/serversProvider.serverStatus.data!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
primaryValue: intFormat(statusProvider.serverStatus!.stats.numReplacedSafebrowsing, Platform.localeName),
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numReplacedSafebrowsing/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
),
const SizedBox(height: 16),
if (data.replacedParental != null) legend(
label: data.replacedParental!.label,
color: data.replacedParental!.color,
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numReplacedParental, Platform.localeName),
secondaryValue: "${serversProvider.serverStatus.data!.stats.numDnsQueries > 0 ? doubleFormat((serversProvider.serverStatus.data!.stats.numReplacedParental/serversProvider.serverStatus.data!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
primaryValue: intFormat(statusProvider.serverStatus!.stats.numReplacedParental, Platform.localeName),
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numReplacedParental/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
),
const SizedBox(height: 16),
],

View file

@ -3,14 +3,15 @@ import 'package:flutter/material.dart';
import 'package:adguard_home_manager/screens/home/management_modal.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/constants/enums.dart';
class HomeFab extends StatelessWidget {
const HomeFab({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final statusProvider = Provider.of<StatusProvider>(context);
final width = MediaQuery.of(context).size.width;
@ -35,7 +36,7 @@ class HomeFab extends StatelessWidget {
}
}
return serversProvider.serverStatus.loadStatus == 1
return statusProvider.loadStatus == LoadStatus.loaded
? FloatingActionButton(
onPressed: openManagementBottomSheet,
child: const Icon(Icons.shield_rounded),

View file

@ -15,6 +15,8 @@ import 'package:adguard_home_manager/screens/home/top_items.dart';
import 'package:adguard_home_manager/screens/home/chart.dart';
import 'package:adguard_home_manager/functions/number_format.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/providers/status_provider.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/functions/snackbar.dart';
@ -55,6 +57,7 @@ class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final statusProvider = Provider.of<StatusProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
final width = MediaQuery.of(context).size.width;
@ -109,7 +112,7 @@ class _HomeState extends State<Home> {
List<Widget> listItems() {
return [
ServerStatus(serverStatus: serversProvider.serverStatus.data!),
ServerStatusWidget(serverStatus: statusProvider.serverStatus!),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Divider(
@ -124,40 +127,40 @@ class _HomeState extends State<Home> {
FractionallySizedBox(
widthFactor: width > 700 ? 0.5 : 1,
child: HomeChart(
data: serversProvider.serverStatus.data!.stats.dnsQueries,
data: statusProvider.serverStatus!.stats.dnsQueries,
label: AppLocalizations.of(context)!.dnsQueries,
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numDnsQueries, Platform.localeName),
secondaryValue: "${doubleFormat(serversProvider.serverStatus.data!.stats.avgProcessingTime*1000, Platform.localeName)} ms",
primaryValue: intFormat(statusProvider.serverStatus!.stats.numDnsQueries, Platform.localeName),
secondaryValue: "${doubleFormat(statusProvider.serverStatus!.stats.avgProcessingTime*1000, Platform.localeName)} ms",
color: Colors.blue,
),
),
FractionallySizedBox(
widthFactor: width > 700 ? 0.5 : 1,
child: HomeChart(
data: serversProvider.serverStatus.data!.stats.blockedFiltering,
data: statusProvider.serverStatus!.stats.blockedFiltering,
label: AppLocalizations.of(context)!.blockedFilters,
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numBlockedFiltering, Platform.localeName),
secondaryValue: "${serversProvider.serverStatus.data!.stats.numDnsQueries > 0 ? doubleFormat((serversProvider.serverStatus.data!.stats.numBlockedFiltering/serversProvider.serverStatus.data!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
primaryValue: intFormat(statusProvider.serverStatus!.stats.numBlockedFiltering, Platform.localeName),
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numBlockedFiltering/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
color: Colors.red,
),
),
FractionallySizedBox(
widthFactor: width > 700 ? 0.5 : 1,
child: HomeChart(
data: serversProvider.serverStatus.data!.stats.replacedSafebrowsing,
data: statusProvider.serverStatus!.stats.replacedSafebrowsing,
label: AppLocalizations.of(context)!.malwarePhisingBlocked,
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numReplacedSafebrowsing, Platform.localeName),
secondaryValue: "${serversProvider.serverStatus.data!.stats.numDnsQueries > 0 ? doubleFormat((serversProvider.serverStatus.data!.stats.numReplacedSafebrowsing/serversProvider.serverStatus.data!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
primaryValue: intFormat(statusProvider.serverStatus!.stats.numReplacedSafebrowsing, Platform.localeName),
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numReplacedSafebrowsing/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
color: Colors.green,
),
),
FractionallySizedBox(
widthFactor: width > 700 ? 0.5 : 1,
child: HomeChart(
data: serversProvider.serverStatus.data!.stats.replacedParental,
data: statusProvider.serverStatus!.stats.replacedParental,
label: AppLocalizations.of(context)!.blockedAdultWebsites,
primaryValue: intFormat(serversProvider.serverStatus.data!.stats.numReplacedParental, Platform.localeName),
secondaryValue: "${serversProvider.serverStatus.data!.stats.numDnsQueries > 0 ? doubleFormat((serversProvider.serverStatus.data!.stats.numReplacedParental/serversProvider.serverStatus.data!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
primaryValue: intFormat(statusProvider.serverStatus!.stats.numReplacedParental, Platform.localeName),
secondaryValue: "${statusProvider.serverStatus!.stats.numDnsQueries > 0 ? doubleFormat((statusProvider.serverStatus!.stats.numReplacedParental/statusProvider.serverStatus!.stats.numDnsQueries)*100, Platform.localeName) : 0}%",
color: Colors.orange,
),
),
@ -172,7 +175,7 @@ class _HomeState extends State<Home> {
if (width <= 700) ...[
TopItems(
label: AppLocalizations.of(context)!.topQueriedDomains,
data: serversProvider.serverStatus.data!.stats.topQueriedDomains,
data: statusProvider.serverStatus!.stats.topQueriedDomains,
type: 'topQueriedDomains',
),
Padding(
@ -187,7 +190,7 @@ class _HomeState extends State<Home> {
TopItems(
label: AppLocalizations.of(context)!.topBlockedDomains,
data: serversProvider.serverStatus.data!.stats.topBlockedDomains,
data: statusProvider.serverStatus!.stats.topBlockedDomains,
type: 'topBlockedDomains',
),
Padding(
@ -201,7 +204,7 @@ class _HomeState extends State<Home> {
TopItems(
label: AppLocalizations.of(context)!.topClients,
data: serversProvider.serverStatus.data!.stats.topClients,
data: statusProvider.serverStatus!.stats.topClients,
type: 'topClients',
clients: true,
),
@ -219,7 +222,7 @@ class _HomeState extends State<Home> {
),
child: TopItems(
label: AppLocalizations.of(context)!.topQueriedDomains,
data: serversProvider.serverStatus.data!.stats.topQueriedDomains,
data: statusProvider.serverStatus!.stats.topQueriedDomains,
type: 'topQueriedDomains',
),
),
@ -232,7 +235,7 @@ class _HomeState extends State<Home> {
),
child: TopItems(
label: AppLocalizations.of(context)!.topBlockedDomains,
data: serversProvider.serverStatus.data!.stats.topBlockedDomains,
data: statusProvider.serverStatus!.stats.topBlockedDomains,
type: 'topBlockedDomains',
),
),
@ -245,7 +248,7 @@ class _HomeState extends State<Home> {
),
child: TopItems(
label: AppLocalizations.of(context)!.topClients,
data: serversProvider.serverStatus.data!.stats.topClients,
data: statusProvider.serverStatus!.stats.topClients,
type: 'topClients',
),
),
@ -279,7 +282,9 @@ class _HomeState extends State<Home> {
onRefresh: () async {
final result = await getServerStatus(serversProvider.selectedServer!);
if (result['result'] == 'success') {
serversProvider.setServerStatusData(result['data']);
statusProvider.setServerStatusData(
data: result['data']
);
}
else {
appConfigProvider.addLog(result['log']);
@ -295,13 +300,13 @@ class _HomeState extends State<Home> {
SliverOverlapInjector(
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
),
if (serversProvider.serverStatus.loadStatus == 0) SliverFillRemaining(
if (statusProvider.loadStatus == LoadStatus.loading) SliverFillRemaining(
child: loading(),
),
if (serversProvider.serverStatus.loadStatus == 1) SliverList.list(
if (statusProvider.loadStatus == LoadStatus.loaded) SliverList.list(
children: listItems()
),
if (serversProvider.serverStatus.loadStatus == 2) SliverFillRemaining(
if (statusProvider.loadStatus == LoadStatus.error) SliverFillRemaining(
child: loadError(),
),
],

View file

@ -10,6 +10,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/functions/compare_versions.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/functions/time_server_disabled.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
@ -74,6 +75,7 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final statusProvider = Provider.of<StatusProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
void startTimer(DateTime deadline) {
@ -92,7 +94,9 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
});
final result = await getServerStatus(serversProvider.selectedServer!);
if (result['result'] == 'success') {
serversProvider.setServerStatusData(result['data']);
statusProvider.setServerStatusData(
data: result['data']
);
}
} else {
setState(() {
@ -104,16 +108,16 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
}
if (
serversProvider.serverStatus.data != null &&
serversProvider.serverStatus.data!.disabledUntil != null &&
serversProvider.serverStatus.data!.disabledUntil != currentDeadline
statusProvider.serverStatus != null &&
statusProvider.serverStatus!.disabledUntil != null &&
statusProvider.serverStatus!.disabledUntil != currentDeadline
) {
startTimer(serversProvider.serverStatus.data!.disabledUntil!);
startTimer(statusProvider.serverStatus!.disabledUntil!);
}
if (
serversProvider.serverStatus.data != null &&
serversProvider.serverStatus.data!.generalEnabled == true
statusProvider.serverStatus != null &&
statusProvider.serverStatus!.generalEnabled == true
) {
setState(() {
start = 0;
@ -128,7 +132,7 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
required String filter,
int? time
}) async {
final result = await serversProvider.updateBlocking(
final result = await statusProvider.updateBlocking(
server: serversProvider.selectedServer!,
block: filter,
newStatus: value,
@ -164,7 +168,7 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
child: Icon(
Icons.keyboard_arrow_down_rounded,
size: 26,
color: serversProvider.serverStatus.data!.generalEnabled == true
color: statusProvider.serverStatus!.generalEnabled == true
? Theme.of(context).colorScheme.onSurfaceVariant
: Colors.grey,
),
@ -180,7 +184,7 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
fontSize: 18,
),
),
if (serversProvider.serverStatus.data!.timeGeneralDisabled > 0) ...[
if (statusProvider.serverStatus!.timeGeneralDisabled > 0) ...[
const SizedBox(height: 2),
if (currentDeadline != null) Text(
"${AppLocalizations.of(context)!.remainingTime}: ${generateRemainingTimeString(currentDeadline!.difference(DateTime.now()))}"
@ -191,8 +195,8 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
],
),
Switch(
value: serversProvider.serverStatus.data!.generalEnabled,
onChanged: serversProvider.protectionsManagementProcess.contains('general') == false
value: statusProvider.serverStatus!.generalEnabled,
onChanged: statusProvider.protectionsManagementProcess.contains('general') == false
? (value) {
if (value == false && expandableController.expanded == true && legacyMode == false) {
expandableController.toggle();
@ -216,35 +220,35 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
children: [
ActionChip(
label: Text(AppLocalizations.of(context)!.seconds(30)),
onPressed: serversProvider.protectionsManagementProcess.contains('general') == false && serversProvider.serverStatus.data!.generalEnabled == true
onPressed: statusProvider.protectionsManagementProcess.contains('general') == false && statusProvider.serverStatus!.generalEnabled == true
? () => disableWithCountdown(29000)
: null,
),
const SizedBox(width: 8),
ActionChip(
label: Text(AppLocalizations.of(context)!.minute(1)),
onPressed: serversProvider.protectionsManagementProcess.contains('general') == false && serversProvider.serverStatus.data!.generalEnabled == true
onPressed: statusProvider.protectionsManagementProcess.contains('general') == false && statusProvider.serverStatus!.generalEnabled == true
? () => disableWithCountdown(59000)
: null,
),
const SizedBox(width: 8),
ActionChip(
label: Text(AppLocalizations.of(context)!.minutes(10)),
onPressed: serversProvider.protectionsManagementProcess.contains('general') == false && serversProvider.serverStatus.data!.generalEnabled == true
onPressed: statusProvider.protectionsManagementProcess.contains('general') == false && statusProvider.serverStatus!.generalEnabled == true
? () => disableWithCountdown(599000)
: null,
),
const SizedBox(width: 8),
ActionChip(
label: Text(AppLocalizations.of(context)!.hour(1)),
onPressed: serversProvider.protectionsManagementProcess.contains('general') == false && serversProvider.serverStatus.data!.generalEnabled == true
onPressed: statusProvider.protectionsManagementProcess.contains('general') == false && statusProvider.serverStatus!.generalEnabled == true
? () => disableWithCountdown(3599000)
: null,
),
const SizedBox(width: 8),
ActionChip(
label: Text(AppLocalizations.of(context)!.hours(24)),
onPressed: serversProvider.protectionsManagementProcess.contains('general') == false && serversProvider.serverStatus.data!.generalEnabled == true
onPressed: statusProvider.protectionsManagementProcess.contains('general') == false && statusProvider.serverStatus!.generalEnabled == true
? () => disableWithCountdown(86399000)
: null,
),
@ -256,7 +260,7 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 24),
child: serverVersionIsAhead(
currentVersion: serversProvider.serverStatus.data!.serverVersion,
currentVersion: statusProvider.serverStatus!.serverVersion,
referenceVersion: 'v0.107.28',
referenceVersionBeta: 'v0.108.0-b.33'
) == true
@ -266,7 +270,7 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
color: Colors.transparent,
borderRadius: BorderRadius.circular(28),
child: InkWell(
onTap: serversProvider.serverStatus.data!.generalEnabled == true && !serversProvider.protectionsManagementProcess.contains('general')
onTap: statusProvider.serverStatus!.generalEnabled == true && !statusProvider.protectionsManagementProcess.contains('general')
? () => expandableController.toggle()
: null,
borderRadius: BorderRadius.circular(28),
@ -301,9 +305,9 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
color: Colors.transparent,
borderRadius: BorderRadius.circular(28),
child: InkWell(
onTap: serversProvider.protectionsManagementProcess.contains('general') == false
onTap: statusProvider.protectionsManagementProcess.contains('general') == false
? () => updateBlocking(
value: !serversProvider.serverStatus.data!.generalEnabled,
value: !statusProvider.serverStatus!.generalEnabled,
filter: 'general_legacy'
) : null,
borderRadius: BorderRadius.circular(28),
@ -408,30 +412,30 @@ class _ManagementModalState extends State<ManagementModal> with SingleTickerProv
smallSwitch(
AppLocalizations.of(context)!.ruleFiltering,
Icons.filter_list_rounded,
serversProvider.serverStatus.data!.filteringEnabled,
statusProvider.serverStatus!.filteringEnabled,
(value) => updateBlocking(value: value, filter: 'filtering'),
serversProvider.protectionsManagementProcess.contains('filtering')
statusProvider.protectionsManagementProcess.contains('filtering')
),
smallSwitch(
AppLocalizations.of(context)!.safeBrowsing,
Icons.vpn_lock_rounded,
serversProvider.serverStatus.data!.safeBrowsingEnabled,
statusProvider.serverStatus!.safeBrowsingEnabled,
(value) => updateBlocking(value: value, filter: 'safeBrowsing'),
serversProvider.protectionsManagementProcess.contains('safeBrowsing')
statusProvider.protectionsManagementProcess.contains('safeBrowsing')
),
smallSwitch(
AppLocalizations.of(context)!.parentalFiltering,
Icons.block,
serversProvider.serverStatus.data!.parentalControlEnabled,
statusProvider.serverStatus!.parentalControlEnabled,
(value) => updateBlocking(value: value, filter: 'parentalControl'),
serversProvider.protectionsManagementProcess.contains('parentalControl')
statusProvider.protectionsManagementProcess.contains('parentalControl')
),
smallSwitch(
AppLocalizations.of(context)!.safeSearch,
Icons.search_rounded,
serversProvider.serverStatus.data!.safeSearchEnabled,
statusProvider.serverStatus!.safeSearchEnabled,
(value) => updateBlocking(value: value, filter: 'safeSearch'),
serversProvider.protectionsManagementProcess.contains('safeSearch')
statusProvider.protectionsManagementProcess.contains('safeSearch')
),
];
}

View file

@ -5,10 +5,10 @@ import 'package:adguard_home_manager/screens/home/status_box.dart';
import 'package:adguard_home_manager/models/server_status.dart';
class ServerStatus extends StatelessWidget {
final ServerStatusData serverStatus;
class ServerStatusWidget extends StatelessWidget {
final ServerStatus serverStatus;
const ServerStatus({
const ServerStatusWidget({
Key? key,
required this.serverStatus,
}) : super(key: key);

View file

@ -13,6 +13,7 @@ import 'package:adguard_home_manager/widgets/options_modal.dart';
import 'package:adguard_home_manager/screens/top_items/top_items.dart';
import 'package:adguard_home_manager/models/applied_filters.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/models/menu_option.dart';
import 'package:adguard_home_manager/providers/logs_provider.dart';
import 'package:adguard_home_manager/classes/process_modal.dart';
@ -37,6 +38,7 @@ class TopItems extends StatelessWidget {
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final statusProvider = Provider.of<StatusProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
final logsProvider = Provider.of<LogsProvider>(context);
@ -61,7 +63,7 @@ class TopItems extends StatelessWidget {
final rules = await getFilteringRules(server: serversProvider.selectedServer!);
if (rules['result'] == 'success') {
FilteringStatus oldStatus = serversProvider.serverStatus.data!.filteringStatus;
FilteringStatus oldStatus = statusProvider.serverStatus!.filteringStatus;
List<String> newRules = rules['data'].userRules.where((d) => !d.contains(domain)).toList();
if (newStatus == 'block') {
@ -70,7 +72,7 @@ class TopItems extends StatelessWidget {
else if (newStatus == 'unblock') {
newRules.add("@@||$domain^");
}
FilteringStatus newObj = serversProvider.serverStatus.data!.filteringStatus;
FilteringStatus newObj = statusProvider.serverStatus!.filteringStatus;
newObj.userRules = newRules;
serversProvider.setFilteringStatus(newObj);
@ -154,7 +156,7 @@ class TopItems extends StatelessWidget {
String? name;
if (clients != null && clients == true) {
try {
name = serversProvider.serverStatus.data!.clients.firstWhere((c) => c.ids.contains(item.keys.toList()[0])).name;
name = statusProvider.serverStatus!.clients.firstWhere((c) => c.ids.contains(item.keys.toList()[0])).name;
} catch (e) {
// ---- //
}
@ -241,13 +243,13 @@ class TopItems extends StatelessWidget {
List<Map<String, dynamic>> generateData() {
switch (type) {
case 'topQueriedDomains':
return serversProvider.serverStatus.data!.stats.topQueriedDomains;
return statusProvider.serverStatus!.stats.topQueriedDomains;
case 'topBlockedDomains':
return serversProvider.serverStatus.data!.stats.topBlockedDomains;
return statusProvider.serverStatus!.stats.topBlockedDomains;
case 'topClients':
return serversProvider.serverStatus.data!.stats.topClients;
return statusProvider.serverStatus!.stats.topClients;
default:
return [];