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,7 @@ import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/classes/process_modal.dart';
import 'package:adguard_home_manager/models/filtering_status.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
@ -12,6 +13,7 @@ import 'package:adguard_home_manager/services/http_requests.dart';
Future<Map<String, dynamic>> blockUnblock(BuildContext context, String domain, String newStatus) async {
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
final statusProvider = Provider.of<StatusProvider>(context, listen: false);
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
final ProcessModal processModal = ProcessModal(context: context);
@ -20,7 +22,7 @@ Future<Map<String, dynamic>> blockUnblock(BuildContext context, String domain, S
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') {
newRules.add("||$domain^");
@ -28,7 +30,7 @@ Future<Map<String, dynamic>> blockUnblock(BuildContext context, String domain, S
else if (newStatus == 'unblock') {
newRules.add("@@||$domain^");
}
FilteringStatus newObj = serversProvider.serverStatus.data!.filteringStatus;
FilteringStatus newObj = statusProvider.serverStatus!.filteringStatus;
newObj.userRules = newRules;
serversProvider.setFilteringStatus(newObj);

View file

@ -17,14 +17,18 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/base.dart';
import 'package:adguard_home_manager/classes/http_override.dart';
import 'package:adguard_home_manager/services/db/database.dart';
import 'package:adguard_home_manager/constants/colors.dart';
import 'package:adguard_home_manager/config/globals.dart';
import 'package:adguard_home_manager/providers/logs_provider.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
import 'package:adguard_home_manager/config/theme.dart';
import 'package:adguard_home_manager/providers/clients_provider.dart';
import 'package:adguard_home_manager/providers/filters_provider.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
import 'package:adguard_home_manager/constants/colors.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/config/globals.dart';
import 'package:adguard_home_manager/config/theme.dart';
import 'package:adguard_home_manager/classes/http_override.dart';
import 'package:adguard_home_manager/services/db/database.dart';
void main() async {
@ -43,6 +47,9 @@ void main() async {
AppConfigProvider appConfigProvider = AppConfigProvider();
ServersProvider serversProvider = ServersProvider();
StatusProvider statusProvider = StatusProvider();
ClientsProvider clientsProvider = ClientsProvider();
FiltersProvider filtersProvider = FiltersProvider();
LogsProvider logsProvider = LogsProvider();
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
@ -68,11 +75,68 @@ void main() async {
serversProvider.setDbInstance(dbData['dbInstance']);
appConfigProvider.saveFromDb(dbData['dbInstance'], dbData['appConfig']);
serversProvider.saveFromDb(dbData['servers']);
final result = await serversProvider.saveFromDb(dbData['servers']);
if (result != null) {
if (result['success'] == true) {
statusProvider.setServerStatusData(
data: result['serverData'],
);
statusProvider.setServerStatusLoad(LoadStatus.loaded);
}
else {
statusProvider.setServerStatusLoad(LoadStatus.error);
}
}
PackageInfo appInfo = await PackageInfo.fromPlatform();
appConfigProvider.setAppInfo(appInfo);
void startApp() => runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(
create: ((context) => serversProvider)
),
ChangeNotifierProvider(
create: ((context) => statusProvider)
),
ChangeNotifierProvider(
create: ((context) => clientsProvider)
),
ChangeNotifierProvider(
create: ((context) => logsProvider)
),
ChangeNotifierProvider(
create: ((context) => filtersProvider)
),
ChangeNotifierProvider(
create: ((context) => appConfigProvider)
),
ChangeNotifierProxyProvider<StatusProvider, ServersProvider>(
create: (context) => serversProvider,
update: (context, status, servers) => servers!..update(status),
),
ChangeNotifierProxyProvider<ServersProvider, StatusProvider>(
create: (context) => statusProvider,
update: (context, servers, status) => status!..update(servers),
),
ChangeNotifierProxyProvider<ServersProvider, ClientsProvider>(
create: (context) => clientsProvider,
update: (context, servers, clients) => clients!..update(servers),
),
ChangeNotifierProxyProvider<ServersProvider, LogsProvider>(
create: (context) => logsProvider,
update: (context, servers, logs) => logs!..update(servers),
),
ChangeNotifierProxyProvider<ServersProvider, FiltersProvider>(
create: (context) => filtersProvider,
update: (context, servers, filters) => filters!..update(servers),
),
],
child: const Main(),
)
);
if (
(
kReleaseMode &&
@ -87,41 +151,11 @@ void main() async {
options.dsn = dotenv.env['SENTRY_DSN'];
options.sendDefaultPii = false;
},
appRunner: () => runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(
create: ((context) => serversProvider)
),
ChangeNotifierProvider(
create: ((context) => appConfigProvider)
),
ChangeNotifierProvider(
create: ((context) => logsProvider)
),
],
child: const Main(),
)
)
appRunner: () => startApp()
);
}
else {
runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(
create: ((context) => serversProvider)
),
ChangeNotifierProvider(
create: ((context) => appConfigProvider)
),
ChangeNotifierProvider(
create: ((context) => logsProvider)
),
],
child: const Main(),
)
);
startApp();
}
}

View file

@ -4,15 +4,6 @@ import 'package:adguard_home_manager/models/dns_statistics.dart';
import 'package:adguard_home_manager/models/filtering_status.dart';
class ServerStatus {
int loadStatus;
ServerStatusData? data;
ServerStatus({
required this.loadStatus,
this.data
});
}
class ServerStatusData {
final DnsStatistics stats;
final List<Client> clients;
final FilteringStatus filteringStatus;
@ -31,7 +22,7 @@ class ServerStatusData {
bool? safeSearchYandex;
bool? safeSearchYoutube;
ServerStatusData({
ServerStatus({
required this.stats,
required this.clients,
required this.filteringStatus,
@ -51,7 +42,7 @@ class ServerStatusData {
required this.safeSearchYoutube
});
factory ServerStatusData.fromJson(Map<String, dynamic> json) => ServerStatusData(
factory ServerStatus.fromJson(Map<String, dynamic> json) => ServerStatus(
stats: DnsStatistics.fromJson(json['stats']),
clients: json["clients"] != null ? List<Client>.from(json["clients"].map((x) => Client.fromJson(x))) : [],
generalEnabled: json['status']['protection_enabled'],

View file

@ -0,0 +1,13 @@
import 'package:flutter/material.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
class ClientsProvider with ChangeNotifier {
ServersProvider? _serversProvider;
update(ServersProvider? serversProvider) {
if (serversProvider != null) {
_serversProvider = serversProvider;
}
}
}

View file

@ -0,0 +1,13 @@
import 'package:flutter/material.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
class FiltersProvider with ChangeNotifier {
ServersProvider? _serversProvider;
update(ServersProvider? serversProvider) {
if (serversProvider != null) {
_serversProvider = serversProvider;
}
}
}

View file

@ -1,10 +1,19 @@
import 'package:adguard_home_manager/models/clients.dart';
import 'package:flutter/material.dart';
import 'package:adguard_home_manager/models/applied_filters.dart';
import 'package:adguard_home_manager/models/clients.dart';
import 'package:adguard_home_manager/models/logs.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
class LogsProvider with ChangeNotifier {
ServersProvider? _serversProvider;
update(ServersProvider? serversProvider) {
if (serversProvider != null) {
_serversProvider = serversProvider;
}
}
int _loadStatus = 0;
LogsData? _logsData;
List<AutoClient>? _clients;

View file

@ -9,26 +9,29 @@ import 'package:adguard_home_manager/models/filtering_status.dart';
import 'package:adguard_home_manager/models/clients_allowed_blocked.dart';
import 'package:adguard_home_manager/models/blocked_services.dart';
import 'package:adguard_home_manager/models/clients.dart';
import 'package:adguard_home_manager/models/server_status.dart';
import 'package:adguard_home_manager/models/server.dart';
import 'package:adguard_home_manager/models/update_available.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
import 'package:adguard_home_manager/functions/time_server_disabled.dart';
import 'package:adguard_home_manager/functions/conversions.dart';
import 'package:adguard_home_manager/services/db/queries.dart';
import 'package:adguard_home_manager/functions/compare_versions.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
class ServersProvider with ChangeNotifier {
StatusProvider? _statusProvider;
update(StatusProvider? statusProvider) {
if (statusProvider != null) {
_statusProvider = statusProvider;
}
}
Database? _dbInstance;
List<Server> _serversList = [];
Server? _selectedServer;
final ServerStatus _serverStatus = ServerStatus(
loadStatus: 0, // 0 = loading, 1 = loaded, 2 = error
data: null
); // serverStatus != null means server is connected
List<String> _protectionsManagementProcess = []; // protections that are currenty being enabled or disabled
String? _serverVersion;
final Clients _clients = Clients(
loadStatus: LoadStatus.loading,
@ -78,14 +81,6 @@ class ServersProvider with ChangeNotifier {
return _selectedServer;
}
ServerStatus get serverStatus {
return _serverStatus;
}
List<String> get protectionsManagementProcess {
return _protectionsManagementProcess;
}
Clients get clients {
return _clients;
}
@ -144,16 +139,6 @@ class ServersProvider with ChangeNotifier {
notifyListeners();
}
void setServerStatusData(ServerStatusData data) {
_serverStatus.data = data;
notifyListeners();
}
void setServerStatusLoad(int status) {
_serverStatus.loadStatus = status;
notifyListeners();
}
void setClientsLoadStatus(LoadStatus status, bool notify) {
_clients.loadStatus = status;
if (notify == true) {
@ -226,7 +211,7 @@ class ServersProvider with ChangeNotifier {
}
void setFilteringProtectionStatus(bool status) {
_serverStatus.data!.filteringEnabled = status;
_statusProvider!.setFilteringStatus(status);
_filtering.data!.enabled = status;
notifyListeners();
}
@ -382,149 +367,6 @@ class ServersProvider with ChangeNotifier {
}
}
Future<dynamic> updateBlocking({
required Server server,
required String block,
required bool newStatus,
int? time
}) async {
switch (block) {
case 'general':
_protectionsManagementProcess.add('general');
notifyListeners();
final result = await updateGeneralProtection(
server: server,
enable: newStatus,
time: time
);
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'general').toList();
if (result['result'] == 'success') {
_serverStatus.data!.generalEnabled = newStatus;
if (time != null) {
_serverStatus.data!.timeGeneralDisabled = time;
_serverStatus.data!.disabledUntil = generateTimeDeadline(time);
}
else {
_serverStatus.data!.timeGeneralDisabled = 0;
_serverStatus.data!.disabledUntil = null;
}
notifyListeners();
return null;
}
else {
notifyListeners();
return result['log'];
}
case 'general_legacy':
_protectionsManagementProcess.add('general');
notifyListeners();
final result = await updateGeneralProtectionLegacy(server, newStatus);
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'general').toList();
if (result['result'] == 'success') {
_serverStatus.data!.generalEnabled = newStatus;
notifyListeners();
return null;
}
else {
notifyListeners();
return result['log'];
}
case 'filtering':
_protectionsManagementProcess.add('filtering');
notifyListeners();
final result = await updateFiltering(
server: server,
enable: newStatus,
);
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'filtering').toList();
if (result['result'] == 'success') {
_serverStatus.data!.filteringEnabled = newStatus;
notifyListeners();
return null;
}
else {
notifyListeners();
return result['log'];
}
case 'safeSearch':
_protectionsManagementProcess.add('safeSearch');
notifyListeners();
final result = serverVersionIsAhead(
currentVersion: serverStatus.data!.serverVersion,
referenceVersion: 'v0.107.28',
referenceVersionBeta: 'v0.108.0-b.33'
) == true
? await updateSafeSearchSettings(server: server, body: { 'enabled': newStatus })
: await updateSafeSearchLegacy(server, newStatus);
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'safeSearch').toList();
if (result['result'] == 'success') {
_serverStatus.data!.safeSearchEnabled = newStatus;
notifyListeners();
return null;
}
else {
notifyListeners();
return result['log'];
}
case 'safeBrowsing':
_protectionsManagementProcess.add('safeBrowsing');
notifyListeners();
final result = await updateSafeBrowsing(server, newStatus);
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'safeBrowsing').toList();
if (result['result'] == 'success') {
_serverStatus.data!.safeBrowsingEnabled = newStatus;
notifyListeners();
return null;
}
else {
notifyListeners();
return result['log'];
}
case 'parentalControl':
_protectionsManagementProcess.add('parentalControl');
notifyListeners();
final result = await updateParentalControl(server, newStatus);
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'parentalControl').toList();
if (result['result'] == 'success') {
_serverStatus.data!.parentalControlEnabled = newStatus;
notifyListeners();
return null;
}
else {
notifyListeners();
return result['log'];
}
default:
return false;
}
}
void checkServerUpdatesAvailable(Server server) async {
setUpdateAvailableLoadStatus(LoadStatus.loading, true);
final result = await checkServerUpdates(server: server);
@ -556,8 +398,26 @@ class ServersProvider with ChangeNotifier {
}
}
void saveFromDb(List<Map<String, dynamic>>? data) async {
Future<Map<String, dynamic>> initializateServer(Server server) async {
_selectedServer = server;
final serverStatus = await getServerStatus(server);
if (serverStatus['result'] == 'success') {
checkServerUpdatesAvailable(server); // Do not await
return {
"success": true,
"serverData": serverStatus['data']
};
}
else {
return {
"success": false
};
}
}
Future<Map<String, dynamic>?> saveFromDb(List<Map<String, dynamic>>? data) async {
if (data != null) {
Server? defaultServer;
for (var server in data) {
final Server serverObj = Server(
id: server['id'],
@ -574,20 +434,23 @@ class ServersProvider with ChangeNotifier {
);
_serversList.add(serverObj);
if (convertFromIntToBool(server['defaultServer']) == true) {
_selectedServer = serverObj;
_serverStatus.loadStatus = 0;
final serverStatus = await getServerStatus(serverObj);
if (serverStatus['result'] == 'success') {
_serverStatus.data = serverStatus['data'];
_serverStatus.loadStatus = 1;
checkServerUpdatesAvailable(serverObj); // Do not await
}
else {
_serverStatus.loadStatus = 2;
}
defaultServer = serverObj;
}
}
notifyListeners();
if (defaultServer != null) {
final result = await initializateServer(defaultServer);
return result;
}
else {
return null;
}
}
else {
notifyListeners();
return null;
}
notifyListeners();
}
}

View file

@ -0,0 +1,194 @@
import 'package:flutter/material.dart';
import 'package:adguard_home_manager/models/server_status.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/functions/compare_versions.dart';
import 'package:adguard_home_manager/functions/time_server_disabled.dart';
import 'package:adguard_home_manager/models/server.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
class StatusProvider with ChangeNotifier {
ServersProvider? _serversProvider;
update(ServersProvider? serversProvider) {
if (serversProvider != null) {
_serversProvider = serversProvider;
}
}
LoadStatus _loadStatus = LoadStatus.loading;
ServerStatus? _serverStatus; // serverStatus != null means server is connected
List<String> _protectionsManagementProcess = []; // protections that are currenty being enabled or disabled
LoadStatus get loadStatus {
return _loadStatus;
}
ServerStatus? get serverStatus {
return _serverStatus;
}
List<String> get protectionsManagementProcess {
return _protectionsManagementProcess;
}
void setServerStatusData({
required ServerStatus data,
}) {
_serverStatus = data;
notifyListeners();
}
void setServerStatusLoad(LoadStatus status) {
_loadStatus = status;
notifyListeners();
}
Future<dynamic> updateBlocking({
required Server server,
required String block,
required bool newStatus,
int? time
}) async {
switch (block) {
case 'general':
_protectionsManagementProcess.add('general');
notifyListeners();
final result = await updateGeneralProtection(
server: server,
enable: newStatus,
time: time
);
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'general').toList();
if (result['result'] == 'success') {
_serverStatus!.generalEnabled = newStatus;
if (time != null) {
_serverStatus!.timeGeneralDisabled = time;
_serverStatus!.disabledUntil = generateTimeDeadline(time);
}
else {
_serverStatus!.timeGeneralDisabled = 0;
_serverStatus!.disabledUntil = null;
}
notifyListeners();
return null;
}
else {
notifyListeners();
return result['log'];
}
case 'general_legacy':
_protectionsManagementProcess.add('general');
notifyListeners();
final result = await updateGeneralProtectionLegacy(server, newStatus);
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'general').toList();
if (result['result'] == 'success') {
_serverStatus!.generalEnabled = newStatus;
notifyListeners();
return null;
}
else {
notifyListeners();
return result['log'];
}
case 'filtering':
_protectionsManagementProcess.add('filtering');
notifyListeners();
final result = await updateFiltering(
server: server,
enable: newStatus,
);
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'filtering').toList();
if (result['result'] == 'success') {
_serverStatus!.filteringEnabled = newStatus;
notifyListeners();
return null;
}
else {
notifyListeners();
return result['log'];
}
case 'safeSearch':
_protectionsManagementProcess.add('safeSearch');
notifyListeners();
final result = serverVersionIsAhead(
currentVersion: serverStatus!.serverVersion,
referenceVersion: 'v0.107.28',
referenceVersionBeta: 'v0.108.0-b.33'
) == true
? await updateSafeSearchSettings(server: server, body: { 'enabled': newStatus })
: await updateSafeSearchLegacy(server, newStatus);
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'safeSearch').toList();
if (result['result'] == 'success') {
_serverStatus!.safeSearchEnabled = newStatus;
notifyListeners();
return null;
}
else {
notifyListeners();
return result['log'];
}
case 'safeBrowsing':
_protectionsManagementProcess.add('safeBrowsing');
notifyListeners();
final result = await updateSafeBrowsing(server, newStatus);
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'safeBrowsing').toList();
if (result['result'] == 'success') {
_serverStatus!.safeBrowsingEnabled = newStatus;
notifyListeners();
return null;
}
else {
notifyListeners();
return result['log'];
}
case 'parentalControl':
_protectionsManagementProcess.add('parentalControl');
notifyListeners();
final result = await updateParentalControl(server, newStatus);
_protectionsManagementProcess = _protectionsManagementProcess.where((e) => e != 'parentalControl').toList();
if (result['result'] == 'success') {
_serverStatus!.parentalControlEnabled = newStatus;
notifyListeners();
return null;
}
else {
notifyListeners();
return result['log'];
}
default:
return false;
}
}
void setFilteringStatus(bool status) {
_serverStatus!.filteringEnabled = status;
}
}

View file

@ -18,6 +18,7 @@ import 'package:adguard_home_manager/widgets/tab_content_list.dart';
import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/functions/maps_fns.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/classes/process_modal.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
@ -77,6 +78,7 @@ class _AddedListState extends State<AddedList> {
@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;
@ -88,7 +90,7 @@ class _AddedListState extends State<AddedList> {
final result = await postUpdateClient(server: serversProvider.selectedServer!, data: {
'name': client.name,
'data': serverVersionIsAhead(
currentVersion: serversProvider.serverStatus.data!.serverVersion,
currentVersion: statusProvider.serverStatus!.serverVersion,
referenceVersion: 'v0.107.28',
referenceVersionBeta: 'v0.108.0-b.33'
) == false
@ -168,7 +170,7 @@ class _AddedListState extends State<AddedList> {
context: context,
builder: (BuildContext context) => ClientScreen(
onConfirm: confirmEditClient,
serverVersion: serversProvider.serverStatus.data!.serverVersion,
serverVersion: statusProvider.serverStatus!.serverVersion,
onDelete: deleteClient,
client: client,
dialog: true,
@ -180,7 +182,7 @@ class _AddedListState extends State<AddedList> {
fullscreenDialog: true,
builder: (BuildContext context) => ClientScreen(
onConfirm: confirmEditClient,
serverVersion: serversProvider.serverStatus.data!.serverVersion,
serverVersion: statusProvider.serverStatus!.serverVersion,
onDelete: deleteClient,
client: client,
dialog: false,
@ -240,7 +242,7 @@ class _AddedListState extends State<AddedList> {
onLongPress: openOptionsModal,
onEdit: openClientModal,
splitView: widget.splitView,
serverVersion: serversProvider.serverStatus.data!.serverVersion,
serverVersion: statusProvider.serverStatus!.serverVersion,
),
noData: SizedBox(
width: double.maxFinite,

View file

@ -11,6 +11,7 @@ import 'package:adguard_home_manager/widgets/custom_list_tile.dart';
import 'package:adguard_home_manager/functions/compare_versions.dart';
import 'package:adguard_home_manager/models/safe_search.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
import 'package:adguard_home_manager/models/clients.dart';
@ -131,6 +132,7 @@ class _ClientScreenState extends State<ClientScreen> {
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final statusProvider = Provider.of<StatusProvider>(context);
void createClient() {
final Client client = Client(
@ -506,7 +508,7 @@ class _ClientScreenState extends State<ClientScreen> {
),
if (
serverVersionIsAhead(
currentVersion: serversProvider.serverStatus.data!.serverVersion,
currentVersion: statusProvider.serverStatus!.serverVersion,
referenceVersion: 'v0.107.28',
referenceVersionBeta: 'v0.108.0-b.33'
) == true
@ -531,7 +533,7 @@ class _ClientScreenState extends State<ClientScreen> {
),
if (
serverVersionIsAhead(
currentVersion: serversProvider.serverStatus.data!.serverVersion,
currentVersion: statusProvider.serverStatus!.serverVersion,
referenceVersion: 'v0.107.28',
referenceVersionBeta: 'v0.108.0-b.33'
) == false

View file

@ -14,6 +14,7 @@ import 'package:adguard_home_manager/models/clients.dart';
import 'package:adguard_home_manager/functions/maps_fns.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
import 'package:adguard_home_manager/classes/process_modal.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
@ -24,6 +25,7 @@ class ClientsFab extends StatelessWidget {
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
final statusProvider = Provider.of<StatusProvider>(context);
final width = MediaQuery.of(context).size.width;
@ -34,7 +36,7 @@ class ClientsFab extends StatelessWidget {
final result = await postAddClient(
server: serversProvider.selectedServer!,
data: serverVersionIsAhead(
currentVersion: serversProvider.serverStatus.data!.serverVersion,
currentVersion: statusProvider.serverStatus!.serverVersion,
referenceVersion: 'v0.107.28',
referenceVersionBeta: 'v0.108.0-b.33'
) == false
@ -73,7 +75,7 @@ class ClientsFab extends StatelessWidget {
context: context,
builder: (BuildContext context) => ClientScreen(
onConfirm: confirmAddClient,
serverVersion: serversProvider.serverStatus.data!.serverVersion,
serverVersion: statusProvider.serverStatus!.serverVersion,
dialog: true,
)
);
@ -83,7 +85,7 @@ class ClientsFab extends StatelessWidget {
fullscreenDialog: true,
builder: (BuildContext context) => ClientScreen(
onConfirm: confirmAddClient,
serverVersion: serversProvider.serverStatus.data!.serverVersion,
serverVersion: statusProvider.serverStatus!.serverVersion,
dialog: false,
)
));

View file

@ -11,6 +11,7 @@ import 'package:adguard_home_manager/screens/clients/remove_client_modal.dart';
import 'package:adguard_home_manager/screens/clients/client_screen.dart';
import 'package:adguard_home_manager/screens/clients/options_modal.dart';
import 'package:adguard_home_manager/widgets/section_label.dart';
import 'package:adguard_home_manager/widgets/custom_list_tile.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
@ -19,7 +20,7 @@ import 'package:adguard_home_manager/functions/compare_versions.dart';
import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
import 'package:adguard_home_manager/models/clients.dart';
import 'package:adguard_home_manager/widgets/section_label.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
class SearchClients extends StatelessWidget {
@ -99,6 +100,7 @@ class _SearchClientsWidgetState extends State<SearchClientsWidget> {
@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;
@ -189,7 +191,7 @@ class _SearchClientsWidgetState extends State<SearchClientsWidget> {
context: context,
builder: (BuildContext context) => ClientScreen(
onConfirm: confirmEditClient,
serverVersion: serversProvider.serverStatus.data!.serverVersion,
serverVersion: statusProvider.serverStatus!.serverVersion,
onDelete: deleteClient,
client: client,
dialog: true,
@ -201,7 +203,7 @@ class _SearchClientsWidgetState extends State<SearchClientsWidget> {
fullscreenDialog: true,
builder: (BuildContext context) => ClientScreen(
onConfirm: confirmEditClient,
serverVersion: serversProvider.serverStatus.data!.serverVersion,
serverVersion: statusProvider.serverStatus!.serverVersion,
onDelete: deleteClient,
client: client,
dialog: false,
@ -356,7 +358,7 @@ class _SearchClientsWidgetState extends State<SearchClientsWidget> {
Icons.search_rounded,
size: 19,
color: serverVersionIsAhead(
currentVersion: serversProvider.serverStatus.data!.serverVersion,
currentVersion: statusProvider.serverStatus!.serverVersion,
referenceVersion: 'v0.107.28',
referenceVersionBeta: 'v0.108.0-b.33'
) == true

View file

@ -15,6 +15,7 @@ import 'package:adguard_home_manager/screens/filters/blocked_services_screen.dar
import 'package:adguard_home_manager/screens/filters/update_interval_lists_modal.dart';
import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/providers/status_provider.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/models/filtering.dart';
@ -83,6 +84,7 @@ class _FiltersWidgetState extends State<FiltersWidget> {
@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;
@ -158,20 +160,20 @@ class _FiltersWidgetState extends State<FiltersWidget> {
void enableDisableFiltering() async {
ProcessModal processModal = ProcessModal(context: context);
processModal.open(
serversProvider.serverStatus.data!.filteringEnabled == true
statusProvider.serverStatus!.filteringEnabled == true
? AppLocalizations.of(context)!.disableFiltering
: AppLocalizations.of(context)!.enableFiltering
);
final result = await updateFiltering(
server: serversProvider.selectedServer!,
enable: !serversProvider.serverStatus.data!.filteringEnabled
enable: !statusProvider.serverStatus!.filteringEnabled
);
processModal.close();
if (result['result'] == 'success') {
serversProvider.setFilteringProtectionStatus(!serversProvider.serverStatus.data!.filteringEnabled);
serversProvider.setFilteringProtectionStatus(!statusProvider.serverStatus!.filteringEnabled);
showSnacbkar(
appConfigProvider: appConfigProvider,

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 [];

View file

@ -15,6 +15,7 @@ import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/classes/process_modal.dart';
import 'package:adguard_home_manager/models/applied_filters.dart';
import 'package:adguard_home_manager/functions/compare_versions.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/providers/logs_provider.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
@ -190,6 +191,7 @@ class _LogsWidgetState extends State<LogsWidget> {
@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);
@ -200,7 +202,7 @@ class _LogsWidgetState extends State<LogsWidget> {
processModal.open(AppLocalizations.of(context)!.updatingSettings);
final result = serverVersionIsAhead(
currentVersion: widget.serversProvider.serverStatus.data!.serverVersion,
currentVersion: statusProvider.serverStatus!.serverVersion,
referenceVersion: 'v0.107.28',
referenceVersionBeta: 'v0.108.0-b.33'
) == true
@ -442,7 +444,7 @@ class _LogsWidgetState extends State<LogsWidget> {
onConfirm: updateConfig,
onClear: clearQueries,
dialog: true,
serverVersion: serversProvider.serverStatus.data!.serverVersion,
serverVersion: statusProvider.serverStatus!.serverVersion,
),
barrierDismissible: false
)
@ -454,7 +456,7 @@ class _LogsWidgetState extends State<LogsWidget> {
onConfirm: updateConfig,
onClear: clearQueries,
dialog: false,
serverVersion: serversProvider.serverStatus.data!.serverVersion,
serverVersion: statusProvider.serverStatus!.serverVersion,
),
backgroundColor: Colors.transparent,
isScrollControlled: true

View file

@ -7,6 +7,8 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/widgets/custom_checkbox_list_tile.dart';
import 'package:adguard_home_manager/classes/process_modal.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/models/server_status.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
@ -19,10 +21,12 @@ class SafeSearchSettingsScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final statusProviuder = Provider.of<StatusProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
return SafeSearchSettingsScreenWidget(
serversProvider: serversProvider,
statusProvider: statusProviuder,
appConfigProvider: appConfigProvider,
);
}
@ -30,11 +34,13 @@ class SafeSearchSettingsScreen extends StatelessWidget {
class SafeSearchSettingsScreenWidget extends StatefulWidget {
final ServersProvider serversProvider;
final StatusProvider statusProvider;
final AppConfigProvider appConfigProvider;
const SafeSearchSettingsScreenWidget({
Key? key,
required this.serversProvider,
required this.statusProvider,
required this.appConfigProvider
}) : super(key: key);
@ -56,8 +62,10 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
final result = await getServerStatus(widget.serversProvider.selectedServer!);
if (mounted) {
if (result['result'] == 'success') {
widget.serversProvider.setServerStatusData(result['data']);
widget.serversProvider.setServerStatusLoad(1);
widget.statusProvider.setServerStatusData(
data: result['data']
);
widget.statusProvider.setServerStatusLoad(LoadStatus.loaded);
setState(() {
generalEnabled = result['data'].safeSearchEnabled;
bingEnabled = result['data'].safeSeachBing;
@ -70,7 +78,7 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
}
else {
widget.appConfigProvider.addLog(result['log']);
widget.serversProvider.setServerStatusLoad(2);
widget.statusProvider.setServerStatusLoad(LoadStatus.error);
}
}
}
@ -78,17 +86,17 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
@override
void initState() {
if (widget.serversProvider.serverStatus.loadStatus == 0) {
if (widget.statusProvider.loadStatus == LoadStatus.loading) {
requestSafeSearchSettings();
}
else if (widget.serversProvider.serverStatus.loadStatus == 1) {
generalEnabled = widget.serversProvider.serverStatus.data!.safeSearchEnabled;
bingEnabled = widget.serversProvider.serverStatus.data!.safeSeachBing!;
duckduckgoEnabled = widget.serversProvider.serverStatus.data!.safeSearchDuckduckgo!;
googleEnabled = widget.serversProvider.serverStatus.data!.safeSearchGoogle!;
pixabayEnabled = widget.serversProvider.serverStatus.data!.safeSearchPixabay!;
yandexEnabled = widget.serversProvider.serverStatus.data!.safeSearchYandex!;
youtubeEnabled = widget.serversProvider.serverStatus.data!.safeSearchYoutube!;
else if (widget.statusProvider.loadStatus == LoadStatus.loaded) {
generalEnabled = widget.statusProvider.serverStatus!.safeSearchEnabled;
bingEnabled = widget.statusProvider.serverStatus!.safeSeachBing!;
duckduckgoEnabled = widget.statusProvider.serverStatus!.safeSearchDuckduckgo!;
googleEnabled = widget.statusProvider.serverStatus!.safeSearchGoogle!;
pixabayEnabled = widget.statusProvider.serverStatus!.safeSearchPixabay!;
yandexEnabled = widget.statusProvider.serverStatus!.safeSearchYandex!;
youtubeEnabled = widget.statusProvider.serverStatus!.safeSearchYoutube!;
}
super.initState();
}
@ -96,6 +104,7 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context);
final statusProvider = Provider.of<StatusProvider>(context);
final appConfigProvider = Provider.of<AppConfigProvider>(context);
void saveConfig() async {
@ -118,7 +127,7 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
processModal.close();
if (result['result'] == 'success') {
ServerStatusData data = serversProvider.serverStatus.data!;
ServerStatus data = statusProvider.serverStatus!;
data.safeSearchEnabled = generalEnabled;
data.safeSeachBing = bingEnabled;
data.safeSearchDuckduckgo = duckduckgoEnabled;
@ -127,7 +136,9 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
data.safeSearchYandex = yandexEnabled;
data.safeSearchYoutube = youtubeEnabled;
serversProvider.setServerStatusData(data);
statusProvider.setServerStatusData(
data: data
);
showSnacbkar(
appConfigProvider: appConfigProvider,
@ -148,8 +159,8 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
}
Widget body() {
switch (serversProvider.serverStatus.loadStatus) {
case 0:
switch (statusProvider.loadStatus) {
case LoadStatus.loading:
return SizedBox(
width: double.maxFinite,
child: Column(
@ -170,7 +181,7 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
),
);
case 1:
case LoadStatus.loaded:
return RefreshIndicator(
onRefresh: requestSafeSearchSettings,
child: ListView(
@ -274,7 +285,7 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
),
);
case 2:
case LoadStatus.error:
return SizedBox(
width: double.maxFinite,
child: Column(
@ -311,7 +322,7 @@ class _SafeSearchSettingsScreenWidgetState extends State<SafeSearchSettingsScree
centerTitle: false,
actions: [
IconButton(
onPressed: serversProvider.serverStatus.loadStatus == 1
onPressed: statusProvider.loadStatus == LoadStatus.loaded
? () => saveConfig()
: null,
icon: const Icon(Icons.save_rounded),

View file

@ -27,6 +27,7 @@ import 'package:adguard_home_manager/constants/strings.dart';
import 'package:adguard_home_manager/functions/open_url.dart';
import 'package:adguard_home_manager/functions/compare_versions.dart';
import 'package:adguard_home_manager/constants/urls.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/providers/servers_provider.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
@ -67,8 +68,9 @@ class SettingsWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
final appConfigProvider = Provider.of<AppConfigProvider>(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;
@ -129,10 +131,10 @@ class SettingsWidget extends StatelessWidget {
],
body: ListView(
children: [
if (serversProvider.selectedServer != null && serversProvider.serverStatus.data != null) ...[
if (serversProvider.selectedServer != null && statusProvider.serverStatus != null) ...[
SectionLabel(label: AppLocalizations.of(context)!.serverSettings),
if (serverVersionIsAhead(
currentVersion: serversProvider.serverStatus.data!.serverVersion,
currentVersion: statusProvider.serverStatus!.serverVersion,
referenceVersion: 'v0.107.28',
referenceVersionBeta: 'v0.108.0-b.33'
) == true) settingsTile(
@ -217,7 +219,7 @@ class SettingsWidget extends StatelessWidget {
icon: Icons.storage_rounded,
title: AppLocalizations.of(context)!.servers,
subtitle: serversProvider.selectedServer != null
? serversProvider.serverStatus.data != null
? statusProvider.serverStatus != null
? "${AppLocalizations.of(context)!.connectedTo} ${serversProvider.selectedServer!.name}"
: "${AppLocalizations.of(context)!.selectedServer} ${serversProvider.selectedServer!.name}"
: AppLocalizations.of(context)!.noServerSelected,

View file

@ -12,6 +12,7 @@ import 'package:adguard_home_manager/widgets/custom_list_tile.dart';
import 'package:adguard_home_manager/models/applied_filters.dart';
import 'package:adguard_home_manager/providers/logs_provider.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/functions/number_format.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
@ -58,6 +59,7 @@ class _TopItemsScreenState extends State<TopItemsScreen> {
@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);
@ -132,7 +134,9 @@ class _TopItemsScreenState extends State<TopItemsScreen> {
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']);
@ -150,7 +154,7 @@ class _TopItemsScreenState extends State<TopItemsScreen> {
String? name;
if (widget.isClient != null && widget.isClient == true) {
try {
name = serversProvider.serverStatus.data!.clients.firstWhere((c) => c.ids.contains(screenData[index].keys.toList()[0])).name;
name = statusProvider.serverStatus!.clients.firstWhere((c) => c.ids.contains(screenData[index].keys.toList()[0])).name;
} catch (e) {
// ---- //
}

View file

@ -13,8 +13,8 @@ import 'package:adguard_home_manager/widgets/custom_list_tile.dart';
import 'package:adguard_home_manager/models/applied_filters.dart';
import 'package:adguard_home_manager/providers/logs_provider.dart';
import 'package:adguard_home_manager/functions/number_format.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/providers/servers_provider.dart';
class TopItemsModal extends StatefulWidget {
final String type;
@ -55,7 +55,7 @@ class _TopItemsModalState extends State<TopItemsModal> {
@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);
@ -122,7 +122,7 @@ class _TopItemsModalState extends State<TopItemsModal> {
String? name;
if (widget.isClient != null && widget.isClient == true) {
try {
name = serversProvider.serverStatus.data!.clients.firstWhere((c) => c.ids.contains(screenData[index].keys.toList()[0])).name;
name = statusProvider.serverStatus!.clients.firstWhere((c) => c.ids.contains(screenData[index].keys.toList()[0])).name;
} catch (e) {
// ---- //
}

View file

@ -335,7 +335,7 @@ Future getServerStatus(Server server) async {
};
return {
'result': 'success',
'data': ServerStatusData.fromJson(mappedData)
'data': ServerStatus.fromJson(mappedData)
};
}
else {

View file

@ -7,6 +7,8 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/functions/base64.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
import 'package:adguard_home_manager/models/app_log.dart';
@ -217,6 +219,7 @@ class _AddServerModalState extends State<AddServerModal> {
@override
Widget build(BuildContext context) {
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
final statusProvider = Provider.of<StatusProvider>(context, listen: false);
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
final mediaQuery = MediaQuery.of(context);
@ -257,13 +260,15 @@ class _AddServerModalState extends State<AddServerModal> {
}
final serverCreated = await serversProvider.createServer(serverObj);
if (serverCreated == null) {
serversProvider.setServerStatusLoad(0);
statusProvider.setServerStatusLoad(LoadStatus.loading);
final serverStatus = await getServerStatus(serverObj);
if (serverStatus['result'] == 'success') {
serversProvider.setServerStatusData(serverStatus['data']);
serversProvider.setServerStatusLoad(1);
statusProvider.setServerStatusData(
data: serverStatus['data']
);
statusProvider.setServerStatusLoad(LoadStatus.loaded);
if (serverStatus['data'].serverVersion.contains('a') || serverStatus['data'].serverVersion.contains('b')) {
Navigator.pop(context);
widget.onUnsupportedVersion(serverStatus['data'].serverVersion);
@ -274,7 +279,7 @@ class _AddServerModalState extends State<AddServerModal> {
}
else {
appConfigProvider.addLog(serverStatus['log']);
serversProvider.setServerStatusLoad(2);
statusProvider.setServerStatusLoad(LoadStatus.error);
Navigator.pop(context);
}
}

View file

@ -11,6 +11,7 @@ import 'package:adguard_home_manager/widgets/custom_list_tile.dart';
import 'package:adguard_home_manager/classes/process_modal.dart';
import 'package:adguard_home_manager/models/filtering_status.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/providers/servers_provider.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
@ -37,6 +38,7 @@ class DomainOptions 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);
void blockUnblock(String domain, String newStatus) async {
@ -46,7 +48,7 @@ class DomainOptions 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') {
@ -55,7 +57,7 @@ class DomainOptions 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);

View file

@ -11,6 +11,8 @@ import 'package:adguard_home_manager/widgets/servers_list/delete_modal.dart';
import 'package:adguard_home_manager/classes/process_modal.dart';
import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/models/app_log.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
@ -69,6 +71,7 @@ class _ServersListItemState extends State<ServersListItem> 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);
final width = MediaQuery.of(context).size.width;
@ -134,16 +137,18 @@ class _ServersListItemState extends State<ServersListItem> with SingleTickerProv
if (result['result'] == 'success') {
serversProvider.setSelectedServer(server);
serversProvider.setServerStatusLoad(0);
statusProvider.setServerStatusLoad(LoadStatus.loading);
final serverStatus = await getServerStatus(server);
if (serverStatus['result'] == 'success') {
serversProvider.setServerStatusData(serverStatus['data']);
statusProvider.setServerStatusData(
data: serverStatus['data']
);
serversProvider.checkServerUpdatesAvailable(server);
serversProvider.setServerStatusLoad(1);
statusProvider.setServerStatusLoad(LoadStatus.loaded);
}
else {
appConfigProvider.addLog(serverStatus['log']);
serversProvider.setServerStatusLoad(2);
statusProvider.setServerStatusLoad(LoadStatus.error);
}
process.close();
@ -192,7 +197,7 @@ class _ServersListItemState extends State<ServersListItem> with SingleTickerProv
Icon(
Icons.storage_rounded,
color: serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id
? serversProvider.serverStatus.data != null
? statusProvider.serverStatus != null
? Colors.green
: Colors.orange
: null,
@ -225,7 +230,7 @@ class _ServersListItemState extends State<ServersListItem> with SingleTickerProv
return Icon(
Icons.storage_rounded,
color: serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id
? serversProvider.serverStatus.data != null
? statusProvider.serverStatus != null
? Colors.green
: Colors.orange
: null,
@ -344,7 +349,7 @@ class _ServersListItemState extends State<ServersListItem> with SingleTickerProv
margin: const EdgeInsets.only(right: 12),
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10),
decoration: BoxDecoration(
color: serversProvider.serverStatus.data != null
color: statusProvider.serverStatus != null
? Colors.green
: Colors.orange,
borderRadius: BorderRadius.circular(30)
@ -352,14 +357,14 @@ class _ServersListItemState extends State<ServersListItem> with SingleTickerProv
child: Row(
children: [
Icon(
serversProvider.serverStatus.data != null
statusProvider.serverStatus != null
? Icons.check
: Icons.warning,
color: Colors.white,
),
const SizedBox(width: 10),
Text(
serversProvider.serverStatus.data != null
statusProvider.serverStatus != null
? AppLocalizations.of(context)!.connected
: AppLocalizations.of(context)!.selectedDisconnected,
style: const TextStyle(

View file

@ -10,6 +10,8 @@ import 'package:adguard_home_manager/widgets/servers_list/delete_modal.dart';
import 'package:adguard_home_manager/classes/process_modal.dart';
import 'package:adguard_home_manager/functions/snackbar.dart';
import 'package:adguard_home_manager/constants/enums.dart';
import 'package:adguard_home_manager/providers/status_provider.dart';
import 'package:adguard_home_manager/models/app_log.dart';
import 'package:adguard_home_manager/providers/app_config_provider.dart';
import 'package:adguard_home_manager/services/http_requests.dart';
@ -36,6 +38,7 @@ class _ServersTileItemState extends State<ServersTileItem> 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);
final width = MediaQuery.of(context).size.width;
@ -101,16 +104,18 @@ class _ServersTileItemState extends State<ServersTileItem> with SingleTickerProv
if (result['result'] == 'success') {
serversProvider.setSelectedServer(server);
serversProvider.setServerStatusLoad(0);
statusProvider.setServerStatusLoad(LoadStatus.loading);
final serverStatus = await getServerStatus(server);
if (serverStatus['result'] == 'success') {
serversProvider.setServerStatusData(serverStatus['data']);
statusProvider.setServerStatusData(
data: serverStatus['data']
);
serversProvider.checkServerUpdatesAvailable(server);
serversProvider.setServerStatusLoad(1);
statusProvider.setServerStatusLoad(LoadStatus.loaded);
}
else {
appConfigProvider.addLog(serverStatus['log']);
serversProvider.setServerStatusLoad(2);
statusProvider.setServerStatusLoad(LoadStatus.error);
}
process.close();
@ -159,7 +164,7 @@ class _ServersTileItemState extends State<ServersTileItem> with SingleTickerProv
Icon(
Icons.storage_rounded,
color: serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id
? serversProvider.serverStatus.data != null
? statusProvider.serverStatus != null
? Colors.green
: Colors.orange
: null,
@ -192,7 +197,7 @@ class _ServersTileItemState extends State<ServersTileItem> with SingleTickerProv
return Icon(
Icons.storage_rounded,
color: serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id
? serversProvider.serverStatus.data != null
? statusProvider.serverStatus != null
? Colors.green
: Colors.orange
: null,
@ -305,13 +310,13 @@ class _ServersTileItemState extends State<ServersTileItem> with SingleTickerProv
),
SizedBox(
child: serversProvider.selectedServer != null &&
serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id && serversProvider.serverStatus.data != null &&
serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id && statusProvider.serverStatus != null &&
serversProvider.selectedServer?.id == server.id
? Container(
margin: const EdgeInsets.only(right: 12),
padding: const EdgeInsets.symmetric(vertical: 5, horizontal: 10),
decoration: BoxDecoration(
color: serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id && serversProvider.serverStatus.data != null
color: serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id && statusProvider.serverStatus != null
? Colors.green
: Colors.orange,
borderRadius: BorderRadius.circular(30)
@ -319,14 +324,14 @@ class _ServersTileItemState extends State<ServersTileItem> with SingleTickerProv
child: Row(
children: [
Icon(
serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id && serversProvider.serverStatus.data != null
serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id && statusProvider.serverStatus != null
? Icons.check
: Icons.warning,
color: Colors.white,
),
const SizedBox(width: 10),
Text(
serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id && serversProvider.serverStatus.data != null
serversProvider.selectedServer != null && serversProvider.selectedServer?.id == server.id && statusProvider.serverStatus != null
? AppLocalizations.of(context)!.connected
: AppLocalizations.of(context)!.selectedDisconnected,
style: const TextStyle(