mirror of
https://github.com/JGeek00/adguard-home-manager.git
synced 2025-06-09 16:17:47 +00:00
Extracted clients to a separate provider
This commit is contained in:
parent
4a2d78e8cf
commit
8a3d42b66c
12 changed files with 192 additions and 250 deletions
|
@ -1,45 +1,28 @@
|
||||||
import 'dart:convert';
|
|
||||||
|
|
||||||
import 'package:adguard_home_manager/constants/enums.dart';
|
|
||||||
import 'package:adguard_home_manager/models/clients_allowed_blocked.dart';
|
import 'package:adguard_home_manager/models/clients_allowed_blocked.dart';
|
||||||
import 'package:adguard_home_manager/models/safe_search.dart';
|
import 'package:adguard_home_manager/models/safe_search.dart';
|
||||||
|
|
||||||
class Clients {
|
class Clients {
|
||||||
LoadStatus loadStatus;
|
|
||||||
ClientsData? data;
|
|
||||||
|
|
||||||
Clients({
|
|
||||||
required this.loadStatus,
|
|
||||||
this.data
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientsData clientsFromJson(String str) => ClientsData.fromJson(json.decode(str));
|
|
||||||
|
|
||||||
String clientsToJson(ClientsData data) => json.encode(data.toJson());
|
|
||||||
|
|
||||||
class ClientsData {
|
|
||||||
List<Client> clients;
|
List<Client> clients;
|
||||||
final List<AutoClient> autoClientsData;
|
final List<AutoClient> autoClients;
|
||||||
final List<String> supportedTags;
|
final List<String> supportedTags;
|
||||||
ClientsAllowedBlocked? clientsAllowedBlocked;
|
ClientsAllowedBlocked? clientsAllowedBlocked;
|
||||||
|
|
||||||
ClientsData({
|
Clients({
|
||||||
required this.clients,
|
required this.clients,
|
||||||
required this.autoClientsData,
|
required this.autoClients,
|
||||||
required this.supportedTags,
|
required this.supportedTags,
|
||||||
this.clientsAllowedBlocked
|
this.clientsAllowedBlocked
|
||||||
});
|
});
|
||||||
|
|
||||||
factory ClientsData.fromJson(Map<String, dynamic> json) => ClientsData(
|
factory Clients.fromJson(Map<String, dynamic> json) => Clients(
|
||||||
clients: json["clients"] != null ? List<Client>.from(json["clients"].map((x) => Client.fromJson(x))) : [],
|
clients: json["clients"] != null ? List<Client>.from(json["clients"].map((x) => Client.fromJson(x))) : [],
|
||||||
autoClientsData: json["auto_clients"] != null ? List<AutoClient>.from(json["auto_clients"].map((x) => AutoClient.fromJson(x))) : [],
|
autoClients: json["auto_clients"] != null ? List<AutoClient>.from(json["auto_clients"].map((x) => AutoClient.fromJson(x))) : [],
|
||||||
supportedTags: json["supported_tags"] != null ? List<String>.from(json["supported_tags"].map((x) => x)) : [],
|
supportedTags: json["supported_tags"] != null ? List<String>.from(json["supported_tags"].map((x) => x)) : [],
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> toJson() => {
|
Map<String, dynamic> toJson() => {
|
||||||
"clients": List<dynamic>.from(clients.map((x) => x.toJson())),
|
"clients": List<dynamic>.from(clients.map((x) => x.toJson())),
|
||||||
"auto_clients": List<dynamic>.from(autoClientsData.map((x) => x.toJson())),
|
"auto_clients": List<dynamic>.from(autoClients.map((x) => x.toJson())),
|
||||||
"supported_tags": List<dynamic>.from(supportedTags.map((x) => x)),
|
"supported_tags": List<dynamic>.from(supportedTags.map((x) => x)),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
import 'package:adguard_home_manager/models/clients.dart';
|
||||||
|
import 'package:adguard_home_manager/models/clients_allowed_blocked.dart';
|
||||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||||
|
import 'package:adguard_home_manager/constants/enums.dart';
|
||||||
|
|
||||||
class ClientsProvider with ChangeNotifier {
|
class ClientsProvider with ChangeNotifier {
|
||||||
ServersProvider? _serversProvider;
|
ServersProvider? _serversProvider;
|
||||||
|
@ -10,4 +13,84 @@ class ClientsProvider with ChangeNotifier {
|
||||||
_serversProvider = serversProvider;
|
_serversProvider = serversProvider;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LoadStatus _loadStatus = LoadStatus.loading;
|
||||||
|
Clients? _clients;
|
||||||
|
String? _searchTermClients;
|
||||||
|
List<AutoClient> _filteredActiveClients = [];
|
||||||
|
List<Client> _filteredAddedClients = [];
|
||||||
|
|
||||||
|
LoadStatus get loadStatus {
|
||||||
|
return _loadStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
Clients? get clients {
|
||||||
|
return _clients;
|
||||||
|
}
|
||||||
|
|
||||||
|
String? get searchTermClients {
|
||||||
|
return _searchTermClients;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<AutoClient> get filteredActiveClients {
|
||||||
|
return _filteredActiveClients;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Client> get filteredAddedClients {
|
||||||
|
return _filteredAddedClients;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setClientsLoadStatus(LoadStatus status, bool notify) {
|
||||||
|
_loadStatus = status;
|
||||||
|
if (notify == true) {
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setClientsData(Clients data) {
|
||||||
|
_clients = data;
|
||||||
|
if (_searchTermClients != null && _searchTermClients != '') {
|
||||||
|
_filteredActiveClients = _clients!.autoClients.where(
|
||||||
|
(client) => client.ip.contains(_searchTermClients!.toLowerCase()) || (client.name != null ? client.name!.contains(_searchTermClients!.toLowerCase()) : false)
|
||||||
|
).toList();
|
||||||
|
_filteredAddedClients = _clients!.clients.where(
|
||||||
|
(client) {
|
||||||
|
isContained(String value) => value.contains(value.toLowerCase());
|
||||||
|
return client.ids.any(isContained);
|
||||||
|
}
|
||||||
|
).toList();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_filteredActiveClients = data.autoClients;
|
||||||
|
_filteredAddedClients = data.clients;
|
||||||
|
}
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setSearchTermClients(String? value) {
|
||||||
|
_searchTermClients = value;
|
||||||
|
if (value != null && value != '') {
|
||||||
|
if (_clients != null) {
|
||||||
|
_filteredActiveClients = _clients!.autoClients.where(
|
||||||
|
(client) => client.ip.contains(value.toLowerCase()) || (client.name != null ? client.name!.contains(value.toLowerCase()) : false)
|
||||||
|
).toList();
|
||||||
|
_filteredAddedClients = _clients!.clients.where(
|
||||||
|
(client) {
|
||||||
|
isContained(String value) => value.contains(value.toLowerCase());
|
||||||
|
return client.ids.any(isContained);
|
||||||
|
}
|
||||||
|
).toList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (_clients != null) _filteredActiveClients = _clients!.autoClients;
|
||||||
|
if (_clients != null) _filteredAddedClients = _clients!.clients;
|
||||||
|
}
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
|
|
||||||
|
void setAllowedDisallowedClientsBlockedDomains(ClientsAllowedBlocked data) {
|
||||||
|
_clients?.clientsAllowedBlocked = data;
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -31,15 +31,6 @@ class ServersProvider with ChangeNotifier {
|
||||||
|
|
||||||
List<Server> _serversList = [];
|
List<Server> _serversList = [];
|
||||||
Server? _selectedServer;
|
Server? _selectedServer;
|
||||||
String? _serverVersion;
|
|
||||||
|
|
||||||
final Clients _clients = Clients(
|
|
||||||
loadStatus: LoadStatus.loading,
|
|
||||||
data: null
|
|
||||||
);
|
|
||||||
String? _searchTermClients;
|
|
||||||
List<AutoClient> _filteredActiveClients = [];
|
|
||||||
List<Client> _filteredAddedClients = [];
|
|
||||||
|
|
||||||
final Filtering _filtering = Filtering(
|
final Filtering _filtering = Filtering(
|
||||||
loadStatus: LoadStatus.loading,
|
loadStatus: LoadStatus.loading,
|
||||||
|
@ -81,22 +72,6 @@ class ServersProvider with ChangeNotifier {
|
||||||
return _selectedServer;
|
return _selectedServer;
|
||||||
}
|
}
|
||||||
|
|
||||||
Clients get clients {
|
|
||||||
return _clients;
|
|
||||||
}
|
|
||||||
|
|
||||||
String? get searchTermClients {
|
|
||||||
return _searchTermClients;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<AutoClient> get filteredActiveClients {
|
|
||||||
return _filteredActiveClients;
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Client> get filteredAddedClients {
|
|
||||||
return _filteredAddedClients;
|
|
||||||
}
|
|
||||||
|
|
||||||
FilteringStatus? get filteringStatus {
|
FilteringStatus? get filteringStatus {
|
||||||
return _filteringStatus;
|
return _filteringStatus;
|
||||||
}
|
}
|
||||||
|
@ -139,60 +114,6 @@ class ServersProvider with ChangeNotifier {
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
void setClientsLoadStatus(LoadStatus status, bool notify) {
|
|
||||||
_clients.loadStatus = status;
|
|
||||||
if (notify == true) {
|
|
||||||
notifyListeners();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void setClientsData(ClientsData data) {
|
|
||||||
_clients.data = data;
|
|
||||||
if (_searchTermClients != null && _searchTermClients != '') {
|
|
||||||
_filteredActiveClients = _clients.data!.autoClientsData.where(
|
|
||||||
(client) => client.ip.contains(_searchTermClients!.toLowerCase()) || (client.name != null ? client.name!.contains(_searchTermClients!.toLowerCase()) : false)
|
|
||||||
).toList();
|
|
||||||
_filteredAddedClients = _clients.data!.clients.where(
|
|
||||||
(client) {
|
|
||||||
isContained(String value) => value.contains(value.toLowerCase());
|
|
||||||
return client.ids.any(isContained);
|
|
||||||
}
|
|
||||||
).toList();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_filteredActiveClients = data.autoClientsData;
|
|
||||||
_filteredAddedClients = data.clients;
|
|
||||||
}
|
|
||||||
notifyListeners();
|
|
||||||
}
|
|
||||||
|
|
||||||
void setSearchTermClients(String? value) {
|
|
||||||
_searchTermClients = value;
|
|
||||||
if (value != null && value != '') {
|
|
||||||
if (_clients.data != null) {
|
|
||||||
_filteredActiveClients = _clients.data!.autoClientsData.where(
|
|
||||||
(client) => client.ip.contains(value.toLowerCase()) || (client.name != null ? client.name!.contains(value.toLowerCase()) : false)
|
|
||||||
).toList();
|
|
||||||
_filteredAddedClients = _clients.data!.clients.where(
|
|
||||||
(client) {
|
|
||||||
isContained(String value) => value.contains(value.toLowerCase());
|
|
||||||
return client.ids.any(isContained);
|
|
||||||
}
|
|
||||||
).toList();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (_clients.data != null) _filteredActiveClients = _clients.data!.autoClientsData;
|
|
||||||
if (_clients.data != null) _filteredAddedClients = _clients.data!.clients;
|
|
||||||
}
|
|
||||||
notifyListeners();
|
|
||||||
}
|
|
||||||
|
|
||||||
void setAllowedDisallowedClientsBlockedDomains(ClientsAllowedBlocked data) {
|
|
||||||
_clients.data?.clientsAllowedBlocked = data;
|
|
||||||
notifyListeners();
|
|
||||||
}
|
|
||||||
|
|
||||||
void setFilteringStatus(FilteringStatus status) {
|
void setFilteringStatus(FilteringStatus status) {
|
||||||
_filteringStatus = status;
|
_filteringStatus = status;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
|
|
|
@ -19,6 +19,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/snackbar.dart';
|
||||||
import 'package:adguard_home_manager/functions/maps_fns.dart';
|
import 'package:adguard_home_manager/functions/maps_fns.dart';
|
||||||
import 'package:adguard_home_manager/providers/status_provider.dart';
|
import 'package:adguard_home_manager/providers/status_provider.dart';
|
||||||
|
import 'package:adguard_home_manager/providers/clients_provider.dart';
|
||||||
import 'package:adguard_home_manager/constants/enums.dart';
|
import 'package:adguard_home_manager/constants/enums.dart';
|
||||||
import 'package:adguard_home_manager/classes/process_modal.dart';
|
import 'package:adguard_home_manager/classes/process_modal.dart';
|
||||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||||
|
@ -79,6 +80,7 @@ class _AddedListState extends State<AddedList> {
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final serversProvider = Provider.of<ServersProvider>(context);
|
final serversProvider = Provider.of<ServersProvider>(context);
|
||||||
final statusProvider = Provider.of<StatusProvider>(context);
|
final statusProvider = Provider.of<StatusProvider>(context);
|
||||||
|
final clientsProvider = Provider.of<ClientsProvider>(context);
|
||||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||||
|
|
||||||
final width = MediaQuery.of(context).size.width;
|
final width = MediaQuery.of(context).size.width;
|
||||||
|
@ -101,7 +103,7 @@ class _AddedListState extends State<AddedList> {
|
||||||
processModal.close();
|
processModal.close();
|
||||||
|
|
||||||
if (result['result'] == 'success') {
|
if (result['result'] == 'success') {
|
||||||
ClientsData clientsData = serversProvider.clients.data!;
|
Clients clientsData = clientsProvider.clients!;
|
||||||
clientsData.clients = clientsData.clients.map((e) {
|
clientsData.clients = clientsData.clients.map((e) {
|
||||||
if (e.name == client.name) {
|
if (e.name == client.name) {
|
||||||
return client;
|
return client;
|
||||||
|
@ -110,7 +112,7 @@ class _AddedListState extends State<AddedList> {
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
}).toList();
|
}).toList();
|
||||||
serversProvider.setClientsData(clientsData);
|
clientsProvider.setClientsData(clientsData);
|
||||||
|
|
||||||
showSnacbkar(
|
showSnacbkar(
|
||||||
appConfigProvider: appConfigProvider,
|
appConfigProvider: appConfigProvider,
|
||||||
|
@ -138,9 +140,9 @@ class _AddedListState extends State<AddedList> {
|
||||||
processModal.close();
|
processModal.close();
|
||||||
|
|
||||||
if (result['result'] == 'success') {
|
if (result['result'] == 'success') {
|
||||||
ClientsData clientsData = serversProvider.clients.data!;
|
Clients clientsData = clientsProvider.clients!;
|
||||||
clientsData.clients = clientsData.clients.where((c) => c.name != client.name).toList();
|
clientsData.clients = clientsData.clients.where((c) => c.name != client.name).toList();
|
||||||
serversProvider.setClientsData(clientsData);
|
clientsProvider.setClientsData(clientsData);
|
||||||
|
|
||||||
if (widget.splitView == true) {
|
if (widget.splitView == true) {
|
||||||
SplitView.of(context).popUntil(0);
|
SplitView.of(context).popUntil(0);
|
||||||
|
|
|
@ -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/functions/compare_versions.dart';
|
||||||
import 'package:adguard_home_manager/models/safe_search.dart';
|
import 'package:adguard_home_manager/models/safe_search.dart';
|
||||||
|
import 'package:adguard_home_manager/providers/clients_provider.dart';
|
||||||
import 'package:adguard_home_manager/providers/status_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/providers/servers_provider.dart';
|
||||||
import 'package:adguard_home_manager/models/clients.dart';
|
import 'package:adguard_home_manager/models/clients.dart';
|
||||||
|
@ -132,6 +133,7 @@ class _ClientScreenState extends State<ClientScreen> {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final serversProvider = Provider.of<ServersProvider>(context);
|
final serversProvider = Provider.of<ServersProvider>(context);
|
||||||
|
final clientsProvider = Provider.of<ClientsProvider>(context);
|
||||||
final statusProvider = Provider.of<StatusProvider>(context);
|
final statusProvider = Provider.of<StatusProvider>(context);
|
||||||
|
|
||||||
void createClient() {
|
void createClient() {
|
||||||
|
@ -202,7 +204,7 @@ class _ClientScreenState extends State<ClientScreen> {
|
||||||
context: context,
|
context: context,
|
||||||
builder: (context) => TagsModal(
|
builder: (context) => TagsModal(
|
||||||
selectedTags: selectedTags,
|
selectedTags: selectedTags,
|
||||||
tags: serversProvider.clients.data!.supportedTags,
|
tags: clientsProvider.clients!.supportedTags,
|
||||||
onConfirm: (selected) => setState(() => selectedTags = selected),
|
onConfirm: (selected) => setState(() => selectedTags = selected),
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
|
@ -11,53 +11,21 @@ import 'package:adguard_home_manager/screens/clients/logs_list_client.dart';
|
||||||
import 'package:adguard_home_manager/screens/clients/clients_desktop_view.dart';
|
import 'package:adguard_home_manager/screens/clients/clients_desktop_view.dart';
|
||||||
import 'package:adguard_home_manager/screens/clients/added_list.dart';
|
import 'package:adguard_home_manager/screens/clients/added_list.dart';
|
||||||
|
|
||||||
import 'package:adguard_home_manager/models/app_log.dart';
|
import 'package:adguard_home_manager/providers/clients_provider.dart';
|
||||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||||
import 'package:adguard_home_manager/models/server.dart';
|
|
||||||
import 'package:adguard_home_manager/constants/enums.dart';
|
import 'package:adguard_home_manager/constants/enums.dart';
|
||||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||||
import 'package:adguard_home_manager/models/clients.dart';
|
import 'package:adguard_home_manager/models/clients.dart';
|
||||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||||
|
|
||||||
class Clients extends StatelessWidget {
|
class Clients extends StatefulWidget {
|
||||||
const Clients({Key? key}) : super(key: key);
|
const Clients({Key? key}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
State<Clients> createState() => _ClientsState();
|
||||||
final serversProvider = Provider.of<ServersProvider>(context);
|
|
||||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
|
||||||
|
|
||||||
return ClientsWidget(
|
|
||||||
server: serversProvider.selectedServer!,
|
|
||||||
setLoadingStatus: serversProvider.setClientsLoadStatus,
|
|
||||||
setClientsData: serversProvider.setClientsData,
|
|
||||||
setSelectedClientsTab: appConfigProvider.setSelectedClientsTab,
|
|
||||||
addLog: appConfigProvider.addLog,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class ClientsWidget extends StatefulWidget {
|
class _ClientsState extends State<Clients> with TickerProviderStateMixin {
|
||||||
final Server server;
|
|
||||||
final void Function(LoadStatus, bool) setLoadingStatus;
|
|
||||||
final void Function(ClientsData) setClientsData;
|
|
||||||
final void Function(int) setSelectedClientsTab;
|
|
||||||
final void Function(AppLog) addLog;
|
|
||||||
|
|
||||||
const ClientsWidget({
|
|
||||||
Key? key,
|
|
||||||
required this.server,
|
|
||||||
required this.setLoadingStatus,
|
|
||||||
required this.setClientsData,
|
|
||||||
required this.setSelectedClientsTab,
|
|
||||||
required this.addLog,
|
|
||||||
}) : super(key: key);
|
|
||||||
|
|
||||||
@override
|
|
||||||
State<ClientsWidget> createState() => _ClientsWidgetState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class _ClientsWidgetState extends State<ClientsWidget> with TickerProviderStateMixin {
|
|
||||||
late TabController tabController;
|
late TabController tabController;
|
||||||
final ScrollController scrollController = ScrollController();
|
final ScrollController scrollController = ScrollController();
|
||||||
|
|
||||||
|
@ -65,16 +33,20 @@ class _ClientsWidgetState extends State<ClientsWidget> with TickerProviderStateM
|
||||||
final TextEditingController searchController = TextEditingController();
|
final TextEditingController searchController = TextEditingController();
|
||||||
|
|
||||||
Future fetchClients() async {
|
Future fetchClients() async {
|
||||||
widget.setLoadingStatus(LoadStatus.loading, false);
|
final clientsProvider = Provider.of<ClientsProvider>(context, listen: false);
|
||||||
final result = await getClients(widget.server);
|
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
|
||||||
|
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
|
||||||
|
|
||||||
|
clientsProvider.setClientsLoadStatus(LoadStatus.loading, false);
|
||||||
|
final result = await getClients(serversProvider.selectedServer!);
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
if (result['result'] == 'success') {
|
if (result['result'] == 'success') {
|
||||||
widget.setClientsData(result['data']);
|
clientsProvider.setClientsData(result['data']);
|
||||||
widget.setLoadingStatus(LoadStatus.loaded, true);
|
clientsProvider.setClientsLoadStatus(LoadStatus.loaded, true);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
widget.addLog(result['log']);
|
appConfigProvider.addLog(result['log']);
|
||||||
widget.setLoadingStatus(LoadStatus.error, true);
|
clientsProvider.setClientsLoadStatus(LoadStatus.error, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -88,7 +60,9 @@ class _ClientsWidgetState extends State<ClientsWidget> with TickerProviderStateM
|
||||||
length: 2,
|
length: 2,
|
||||||
vsync: this,
|
vsync: this,
|
||||||
);
|
);
|
||||||
tabController.addListener(() => widget.setSelectedClientsTab(tabController.index));
|
tabController.addListener(
|
||||||
|
() => Provider.of<AppConfigProvider>(context, listen: false).setSelectedClientsTab(tabController.index)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<AutoClient> generateClientsList(List<AutoClient> clients, List<String> ips) {
|
List<AutoClient> generateClientsList(List<AutoClient> clients, List<String> ips) {
|
||||||
|
@ -98,6 +72,7 @@ class _ClientsWidgetState extends State<ClientsWidget> with TickerProviderStateM
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final serversProvider = Provider.of<ServersProvider>(context);
|
final serversProvider = Provider.of<ServersProvider>(context);
|
||||||
|
final clientsProvider = Provider.of<ClientsProvider>(context);
|
||||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||||
|
|
||||||
final width = MediaQuery.of(context).size.width;
|
final width = MediaQuery.of(context).size.width;
|
||||||
|
@ -137,9 +112,9 @@ class _ClientsWidgetState extends State<ClientsWidget> with TickerProviderStateM
|
||||||
children: [
|
children: [
|
||||||
ClientsList(
|
ClientsList(
|
||||||
scrollController: scrollController,
|
scrollController: scrollController,
|
||||||
loadStatus: serversProvider.clients.loadStatus,
|
loadStatus: clientsProvider.loadStatus,
|
||||||
data: serversProvider.clients.loadStatus == LoadStatus.loaded
|
data: clientsProvider.loadStatus == LoadStatus.loaded
|
||||||
? serversProvider.filteredActiveClients : [],
|
? clientsProvider.filteredActiveClients : [],
|
||||||
fetchClients: fetchClients,
|
fetchClients: fetchClients,
|
||||||
onClientSelected: (client) => Navigator.push(context, MaterialPageRoute(
|
onClientSelected: (client) => Navigator.push(context, MaterialPageRoute(
|
||||||
builder: (context) => LogsListClient(
|
builder: (context) => LogsListClient(
|
||||||
|
@ -153,9 +128,9 @@ class _ClientsWidgetState extends State<ClientsWidget> with TickerProviderStateM
|
||||||
),
|
),
|
||||||
AddedList(
|
AddedList(
|
||||||
scrollController: scrollController,
|
scrollController: scrollController,
|
||||||
loadStatus: serversProvider.clients.loadStatus,
|
loadStatus: clientsProvider.loadStatus,
|
||||||
data: serversProvider.clients.loadStatus == LoadStatus.loaded
|
data: clientsProvider.loadStatus == LoadStatus.loaded
|
||||||
? serversProvider.filteredAddedClients : [],
|
? clientsProvider.filteredAddedClients : [],
|
||||||
fetchClients: fetchClients,
|
fetchClients: fetchClients,
|
||||||
onClientSelected: (client) => Navigator.push(context, MaterialPageRoute(
|
onClientSelected: (client) => Navigator.push(context, MaterialPageRoute(
|
||||||
builder: (context) => LogsListClient(
|
builder: (context) => LogsListClient(
|
||||||
|
@ -203,7 +178,7 @@ class _ClientsWidgetState extends State<ClientsWidget> with TickerProviderStateM
|
||||||
title: Text(AppLocalizations.of(context)!.clients),
|
title: Text(AppLocalizations.of(context)!.clients),
|
||||||
centerTitle: false,
|
centerTitle: false,
|
||||||
actions: [
|
actions: [
|
||||||
if (serversProvider.clients.loadStatus == LoadStatus.loaded) ...[
|
if (clientsProvider.loadStatus == LoadStatus.loaded) ...[
|
||||||
IconButton(
|
IconButton(
|
||||||
onPressed: () => {
|
onPressed: () => {
|
||||||
Navigator.push(context, MaterialPageRoute(
|
Navigator.push(context, MaterialPageRoute(
|
||||||
|
@ -240,7 +215,7 @@ class _ClientsWidgetState extends State<ClientsWidget> with TickerProviderStateM
|
||||||
setState(() {
|
setState(() {
|
||||||
searchMode = false;
|
searchMode = false;
|
||||||
searchController.text = "";
|
searchController.text = "";
|
||||||
serversProvider.setSearchTermClients(null);
|
clientsProvider.setSearchTermClients(null);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
icon: const Icon(Icons.arrow_back_rounded)
|
icon: const Icon(Icons.arrow_back_rounded)
|
||||||
|
@ -249,13 +224,13 @@ class _ClientsWidgetState extends State<ClientsWidget> with TickerProviderStateM
|
||||||
Expanded(
|
Expanded(
|
||||||
child: TextField(
|
child: TextField(
|
||||||
controller: searchController,
|
controller: searchController,
|
||||||
onChanged: (value) => serversProvider.setSearchTermClients(value),
|
onChanged: (value) => clientsProvider.setSearchTermClients(value),
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
suffixIcon: IconButton(
|
suffixIcon: IconButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
setState(() {
|
setState(() {
|
||||||
searchController.text = "";
|
searchController.text = "";
|
||||||
serversProvider.setSearchTermClients(null);
|
clientsProvider.setSearchTermClients(null);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
icon: const Icon(Icons.clear_rounded)
|
icon: const Icon(Icons.clear_rounded)
|
||||||
|
@ -281,7 +256,7 @@ class _ClientsWidgetState extends State<ClientsWidget> with TickerProviderStateM
|
||||||
centerTitle: false,
|
centerTitle: false,
|
||||||
forceElevated: innerBoxIsScrolled,
|
forceElevated: innerBoxIsScrolled,
|
||||||
actions: [
|
actions: [
|
||||||
if (serversProvider.clients.loadStatus == LoadStatus.loaded && searchMode == false) ...[
|
if (clientsProvider.loadStatus == LoadStatus.loaded && searchMode == false) ...[
|
||||||
IconButton(
|
IconButton(
|
||||||
onPressed: () => setState(() => searchMode = true),
|
onPressed: () => setState(() => searchMode = true),
|
||||||
icon: const Icon(Icons.search),
|
icon: const Icon(Icons.search),
|
||||||
|
|
|
@ -10,6 +10,7 @@ import 'package:adguard_home_manager/screens/clients/added_list.dart';
|
||||||
import 'package:adguard_home_manager/screens/clients/clients_list.dart';
|
import 'package:adguard_home_manager/screens/clients/clients_list.dart';
|
||||||
|
|
||||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||||
|
import 'package:adguard_home_manager/providers/clients_provider.dart';
|
||||||
import 'package:adguard_home_manager/constants/enums.dart';
|
import 'package:adguard_home_manager/constants/enums.dart';
|
||||||
import 'package:adguard_home_manager/models/clients.dart';
|
import 'package:adguard_home_manager/models/clients.dart';
|
||||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||||
|
@ -55,6 +56,7 @@ class _ClientsDesktopViewState extends State<ClientsDesktopView> with TickerPro
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final serversProvider = Provider.of<ServersProvider>(context);
|
final serversProvider = Provider.of<ServersProvider>(context);
|
||||||
|
final clientsProvider = Provider.of<ClientsProvider>(context);
|
||||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||||
|
|
||||||
PreferredSizeWidget tabBar() {
|
PreferredSizeWidget tabBar() {
|
||||||
|
@ -92,9 +94,9 @@ class _ClientsDesktopViewState extends State<ClientsDesktopView> with TickerPro
|
||||||
children: [
|
children: [
|
||||||
ClientsList(
|
ClientsList(
|
||||||
scrollController: scrollController,
|
scrollController: scrollController,
|
||||||
loadStatus: serversProvider.clients.loadStatus,
|
loadStatus: clientsProvider.loadStatus,
|
||||||
data: serversProvider.clients.loadStatus == LoadStatus.loaded
|
data: clientsProvider.loadStatus == LoadStatus.loaded
|
||||||
? serversProvider.filteredActiveClients : [],
|
? clientsProvider.filteredActiveClients : [],
|
||||||
fetchClients: widget.fetchClients,
|
fetchClients: widget.fetchClients,
|
||||||
onClientSelected: (client) => setState(() {
|
onClientSelected: (client) => setState(() {
|
||||||
selectedAddedClient = null;
|
selectedAddedClient = null;
|
||||||
|
@ -114,9 +116,9 @@ class _ClientsDesktopViewState extends State<ClientsDesktopView> with TickerPro
|
||||||
),
|
),
|
||||||
AddedList(
|
AddedList(
|
||||||
scrollController: scrollController,
|
scrollController: scrollController,
|
||||||
loadStatus: serversProvider.clients.loadStatus,
|
loadStatus: clientsProvider.loadStatus,
|
||||||
data: serversProvider.clients.loadStatus == LoadStatus.loaded
|
data: clientsProvider.loadStatus == LoadStatus.loaded
|
||||||
? serversProvider.filteredAddedClients : [],
|
? clientsProvider.filteredAddedClients : [],
|
||||||
fetchClients: widget.fetchClients,
|
fetchClients: widget.fetchClients,
|
||||||
onClientSelected: (client) => setState(() {
|
onClientSelected: (client) => setState(() {
|
||||||
selectedActiveClient = null;
|
selectedActiveClient = null;
|
||||||
|
@ -146,7 +148,7 @@ class _ClientsDesktopViewState extends State<ClientsDesktopView> with TickerPro
|
||||||
setState(() {
|
setState(() {
|
||||||
searchMode = false;
|
searchMode = false;
|
||||||
searchController.text = "";
|
searchController.text = "";
|
||||||
serversProvider.setSearchTermClients(null);
|
clientsProvider.setSearchTermClients(null);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
icon: const Icon(Icons.arrow_back_rounded)
|
icon: const Icon(Icons.arrow_back_rounded)
|
||||||
|
@ -155,13 +157,13 @@ class _ClientsDesktopViewState extends State<ClientsDesktopView> with TickerPro
|
||||||
Expanded(
|
Expanded(
|
||||||
child: TextField(
|
child: TextField(
|
||||||
controller: searchController,
|
controller: searchController,
|
||||||
onChanged: (value) => serversProvider.setSearchTermClients(value),
|
onChanged: (value) => clientsProvider.setSearchTermClients(value),
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
suffixIcon: IconButton(
|
suffixIcon: IconButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
setState(() {
|
setState(() {
|
||||||
searchController.text = "";
|
searchController.text = "";
|
||||||
serversProvider.setSearchTermClients(null);
|
clientsProvider.setSearchTermClients(null);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
icon: const Icon(Icons.clear_rounded)
|
icon: const Icon(Icons.clear_rounded)
|
||||||
|
@ -195,7 +197,7 @@ class _ClientsDesktopViewState extends State<ClientsDesktopView> with TickerPro
|
||||||
title: title(),
|
title: title(),
|
||||||
centerTitle: false,
|
centerTitle: false,
|
||||||
actions: [
|
actions: [
|
||||||
if (serversProvider.clients.loadStatus == LoadStatus.loaded && searchMode == false) ...[
|
if (clientsProvider.loadStatus == LoadStatus.loaded && searchMode == false) ...[
|
||||||
IconButton(
|
IconButton(
|
||||||
onPressed: () => setState(() => searchMode = true),
|
onPressed: () => setState(() => searchMode = true),
|
||||||
icon: const Icon(Icons.search),
|
icon: const Icon(Icons.search),
|
||||||
|
@ -226,7 +228,7 @@ class _ClientsDesktopViewState extends State<ClientsDesktopView> with TickerPro
|
||||||
centerTitle: false,
|
centerTitle: false,
|
||||||
forceElevated: innerBoxIsScrolled,
|
forceElevated: innerBoxIsScrolled,
|
||||||
actions: [
|
actions: [
|
||||||
if (serversProvider.clients.loadStatus == LoadStatus.loaded && searchMode == false) ...[
|
if (clientsProvider.loadStatus == LoadStatus.loaded && searchMode == false) ...[
|
||||||
IconButton(
|
IconButton(
|
||||||
onPressed: () => setState(() => searchMode = true),
|
onPressed: () => setState(() => searchMode = true),
|
||||||
icon: const Icon(Icons.search),
|
icon: const Icon(Icons.search),
|
||||||
|
|
|
@ -9,6 +9,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
import 'package:adguard_home_manager/screens/clients/client_screen.dart';
|
import 'package:adguard_home_manager/screens/clients/client_screen.dart';
|
||||||
|
|
||||||
import 'package:adguard_home_manager/functions/snackbar.dart';
|
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||||
|
import 'package:adguard_home_manager/providers/clients_provider.dart';
|
||||||
import 'package:adguard_home_manager/functions/compare_versions.dart';
|
import 'package:adguard_home_manager/functions/compare_versions.dart';
|
||||||
import 'package:adguard_home_manager/models/clients.dart';
|
import 'package:adguard_home_manager/models/clients.dart';
|
||||||
import 'package:adguard_home_manager/functions/maps_fns.dart';
|
import 'package:adguard_home_manager/functions/maps_fns.dart';
|
||||||
|
@ -26,6 +27,7 @@ class ClientsFab extends StatelessWidget {
|
||||||
final serversProvider = Provider.of<ServersProvider>(context);
|
final serversProvider = Provider.of<ServersProvider>(context);
|
||||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||||
final statusProvider = Provider.of<StatusProvider>(context);
|
final statusProvider = Provider.of<StatusProvider>(context);
|
||||||
|
final clientsProvider = Provider.of<ClientsProvider>(context);
|
||||||
|
|
||||||
final width = MediaQuery.of(context).size.width;
|
final width = MediaQuery.of(context).size.width;
|
||||||
|
|
||||||
|
@ -47,9 +49,9 @@ class ClientsFab extends StatelessWidget {
|
||||||
processModal.close();
|
processModal.close();
|
||||||
|
|
||||||
if (result['result'] == 'success') {
|
if (result['result'] == 'success') {
|
||||||
ClientsData clientsData = serversProvider.clients.data!;
|
Clients clientsData = clientsProvider.clients!;
|
||||||
clientsData.clients.add(client);
|
clientsData.clients.add(client);
|
||||||
serversProvider.setClientsData(clientsData);
|
clientsProvider.setClientsData(clientsData);
|
||||||
|
|
||||||
showSnacbkar(
|
showSnacbkar(
|
||||||
appConfigProvider: appConfigProvider,
|
appConfigProvider: appConfigProvider,
|
||||||
|
|
|
@ -19,36 +19,19 @@ import 'package:adguard_home_manager/classes/process_modal.dart';
|
||||||
import 'package:adguard_home_manager/functions/compare_versions.dart';
|
import 'package:adguard_home_manager/functions/compare_versions.dart';
|
||||||
import 'package:adguard_home_manager/functions/snackbar.dart';
|
import 'package:adguard_home_manager/functions/snackbar.dart';
|
||||||
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||||
|
import 'package:adguard_home_manager/providers/clients_provider.dart';
|
||||||
import 'package:adguard_home_manager/models/clients.dart';
|
import 'package:adguard_home_manager/models/clients.dart';
|
||||||
import 'package:adguard_home_manager/providers/status_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/providers/servers_provider.dart';
|
||||||
|
|
||||||
class SearchClients extends StatelessWidget {
|
class SearchClients extends StatefulWidget {
|
||||||
const SearchClients({Key? key}) : super(key: key);
|
const SearchClients({Key? key}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
State<SearchClients> createState() => _SearchClientsState();
|
||||||
final serversProvider = Provider.of<ServersProvider>(context);
|
|
||||||
|
|
||||||
return SearchClientsWidget(
|
|
||||||
serversProvider: serversProvider,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class SearchClientsWidget extends StatefulWidget {
|
class _SearchClientsState extends State<SearchClients> {
|
||||||
final ServersProvider serversProvider;
|
|
||||||
|
|
||||||
const SearchClientsWidget({
|
|
||||||
Key? key,
|
|
||||||
required this.serversProvider,
|
|
||||||
}) : super(key: key);
|
|
||||||
|
|
||||||
@override
|
|
||||||
State<SearchClientsWidget> createState() => _SearchClientsWidgetState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class _SearchClientsWidgetState extends State<SearchClientsWidget> {
|
|
||||||
late ScrollController scrollController;
|
late ScrollController scrollController;
|
||||||
|
|
||||||
final TextEditingController searchController = TextEditingController();
|
final TextEditingController searchController = TextEditingController();
|
||||||
|
@ -87,11 +70,13 @@ class _SearchClientsWidgetState extends State<SearchClientsWidget> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
|
final clientsProvider = Provider.of<ClientsProvider>(context, listen: false);
|
||||||
|
|
||||||
scrollController = ScrollController()..addListener(scrollListener);
|
scrollController = ScrollController()..addListener(scrollListener);
|
||||||
|
|
||||||
setState(() {
|
setState(() {
|
||||||
clients = widget.serversProvider.clients.data!.clients;
|
clients = clientsProvider.clients!.clients;
|
||||||
autoClients = widget.serversProvider.clients.data!.autoClientsData;
|
autoClients = clientsProvider.clients!.autoClients;
|
||||||
});
|
});
|
||||||
|
|
||||||
super.initState();
|
super.initState();
|
||||||
|
@ -101,6 +86,7 @@ class _SearchClientsWidgetState extends State<SearchClientsWidget> {
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final serversProvider = Provider.of<ServersProvider>(context);
|
final serversProvider = Provider.of<ServersProvider>(context);
|
||||||
final statusProvider = Provider.of<StatusProvider>(context);
|
final statusProvider = Provider.of<StatusProvider>(context);
|
||||||
|
final clientsProvider = Provider.of<ClientsProvider>(context);
|
||||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||||
|
|
||||||
final width = MediaQuery.of(context).size.width;
|
final width = MediaQuery.of(context).size.width;
|
||||||
|
@ -114,9 +100,9 @@ class _SearchClientsWidgetState extends State<SearchClientsWidget> {
|
||||||
processModal.close();
|
processModal.close();
|
||||||
|
|
||||||
if (result['result'] == 'success') {
|
if (result['result'] == 'success') {
|
||||||
ClientsData clientsData = serversProvider.clients.data!;
|
Clients clientsData = clientsProvider.clients!;
|
||||||
clientsData.clients = clientsData.clients.where((c) => c.name != client.name).toList();
|
clientsData.clients = clientsData.clients.where((c) => c.name != client.name).toList();
|
||||||
serversProvider.setClientsData(clientsData);
|
clientsProvider.setClientsData(clientsData);
|
||||||
setState(() {
|
setState(() {
|
||||||
clients = clientsData.clients;
|
clients = clientsData.clients;
|
||||||
});
|
});
|
||||||
|
@ -151,7 +137,7 @@ class _SearchClientsWidgetState extends State<SearchClientsWidget> {
|
||||||
processModal.close();
|
processModal.close();
|
||||||
|
|
||||||
if (result['result'] == 'success') {
|
if (result['result'] == 'success') {
|
||||||
ClientsData clientsData = serversProvider.clients.data!;
|
Clients clientsData = clientsProvider.clients!;
|
||||||
clientsData.clients = clientsData.clients.map((e) {
|
clientsData.clients = clientsData.clients.map((e) {
|
||||||
if (e.name == client.name) {
|
if (e.name == client.name) {
|
||||||
return client;
|
return client;
|
||||||
|
@ -160,7 +146,7 @@ class _SearchClientsWidgetState extends State<SearchClientsWidget> {
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
}).toList();
|
}).toList();
|
||||||
serversProvider.setClientsData(clientsData);
|
clientsProvider.setClientsData(clientsData);
|
||||||
|
|
||||||
setState(() {
|
setState(() {
|
||||||
clients = clientsData.clients;
|
clients = clientsData.clients;
|
||||||
|
|
|
@ -7,54 +7,37 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||||
import 'package:adguard_home_manager/screens/settings/access_settings/clients_list.dart';
|
import 'package:adguard_home_manager/screens/settings/access_settings/clients_list.dart';
|
||||||
|
|
||||||
import 'package:adguard_home_manager/constants/enums.dart';
|
import 'package:adguard_home_manager/constants/enums.dart';
|
||||||
|
import 'package:adguard_home_manager/providers/clients_provider.dart';
|
||||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||||
import 'package:adguard_home_manager/providers/app_config_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/providers/servers_provider.dart';
|
||||||
|
|
||||||
class AccessSettings extends StatelessWidget {
|
class AccessSettings extends StatefulWidget {
|
||||||
const AccessSettings({Key? key}) : super(key: key);
|
const AccessSettings({Key? key}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
State<AccessSettings> createState() => _AccessSettingsState();
|
||||||
final serversProvider = Provider.of<ServersProvider>(context);
|
|
||||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
|
||||||
|
|
||||||
return AccessSettingsWidget(
|
|
||||||
serversProvider: serversProvider,
|
|
||||||
appConfigProvider: appConfigProvider,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class AccessSettingsWidget extends StatefulWidget {
|
class _AccessSettingsState extends State<AccessSettings> with TickerProviderStateMixin {
|
||||||
final ServersProvider serversProvider;
|
|
||||||
final AppConfigProvider appConfigProvider;
|
|
||||||
|
|
||||||
const AccessSettingsWidget({
|
|
||||||
Key? key,
|
|
||||||
required this.serversProvider,
|
|
||||||
required this.appConfigProvider,
|
|
||||||
}) : super(key: key);
|
|
||||||
|
|
||||||
@override
|
|
||||||
State<AccessSettingsWidget> createState() => _AccessSettingsWidgetState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class _AccessSettingsWidgetState extends State<AccessSettingsWidget> with TickerProviderStateMixin {
|
|
||||||
final ScrollController scrollController = ScrollController();
|
final ScrollController scrollController = ScrollController();
|
||||||
late TabController tabController;
|
late TabController tabController;
|
||||||
|
|
||||||
Future fetchClients() async {
|
Future fetchClients() async {
|
||||||
widget.serversProvider.setClientsLoadStatus(LoadStatus.loading, false);
|
final clientsProvider = Provider.of<ClientsProvider>(context, listen: false);
|
||||||
final result = await getClients(widget.serversProvider.selectedServer!);
|
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
|
||||||
|
final appConfigProvider = Provider.of<AppConfigProvider>(context, listen: false);
|
||||||
|
|
||||||
|
clientsProvider.setClientsLoadStatus(LoadStatus.loading, false);
|
||||||
|
final result = await getClients(serversProvider.selectedServer!);
|
||||||
if (mounted) {
|
if (mounted) {
|
||||||
if (result['result'] == 'success') {
|
if (result['result'] == 'success') {
|
||||||
widget.serversProvider.setClientsData(result['data']);
|
clientsProvider.setClientsData(result['data']);
|
||||||
widget.serversProvider.setClientsLoadStatus(LoadStatus.loaded, true);
|
clientsProvider.setClientsLoadStatus(LoadStatus.loaded, true);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
widget.appConfigProvider.addLog(result['log']);
|
appConfigProvider.addLog(result['log']);
|
||||||
widget.serversProvider.setClientsLoadStatus(LoadStatus.error, true);
|
clientsProvider.setClientsLoadStatus(LoadStatus.error, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -74,6 +57,7 @@ class _AccessSettingsWidgetState extends State<AccessSettingsWidget> with Ticker
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final serversProvider = Provider.of<ServersProvider>(context);
|
final serversProvider = Provider.of<ServersProvider>(context);
|
||||||
|
final clientsProvider = Provider.of<ClientsProvider>(context);
|
||||||
|
|
||||||
Widget body() {
|
Widget body() {
|
||||||
return TabBarView(
|
return TabBarView(
|
||||||
|
@ -82,25 +66,25 @@ class _AccessSettingsWidgetState extends State<AccessSettingsWidget> with Ticker
|
||||||
ClientsList(
|
ClientsList(
|
||||||
type: 'allowed',
|
type: 'allowed',
|
||||||
scrollController: scrollController,
|
scrollController: scrollController,
|
||||||
loadStatus: serversProvider.clients.loadStatus,
|
loadStatus: clientsProvider.loadStatus,
|
||||||
data: serversProvider.clients.loadStatus == LoadStatus.loaded
|
data: clientsProvider.loadStatus == LoadStatus.loaded
|
||||||
? serversProvider.clients.data!.clientsAllowedBlocked!.allowedClients : [],
|
? clientsProvider.clients!.clientsAllowedBlocked!.allowedClients : [],
|
||||||
fetchClients: fetchClients
|
fetchClients: fetchClients
|
||||||
),
|
),
|
||||||
ClientsList(
|
ClientsList(
|
||||||
type: 'disallowed',
|
type: 'disallowed',
|
||||||
scrollController: scrollController,
|
scrollController: scrollController,
|
||||||
loadStatus: serversProvider.clients.loadStatus,
|
loadStatus: clientsProvider.loadStatus,
|
||||||
data: serversProvider.clients.loadStatus == LoadStatus.loaded
|
data: clientsProvider.loadStatus == LoadStatus.loaded
|
||||||
? serversProvider.clients.data!.clientsAllowedBlocked!.disallowedClients : [],
|
? clientsProvider.clients!.clientsAllowedBlocked!.disallowedClients : [],
|
||||||
fetchClients: fetchClients
|
fetchClients: fetchClients
|
||||||
),
|
),
|
||||||
ClientsList(
|
ClientsList(
|
||||||
type: 'domains',
|
type: 'domains',
|
||||||
scrollController: scrollController,
|
scrollController: scrollController,
|
||||||
loadStatus: serversProvider.clients.loadStatus,
|
loadStatus: clientsProvider.loadStatus,
|
||||||
data: serversProvider.clients.loadStatus == LoadStatus.loaded
|
data: clientsProvider.loadStatus == LoadStatus.loaded
|
||||||
? serversProvider.clients.data!.clientsAllowedBlocked!.blockedHosts : [],
|
? clientsProvider.clients!.clientsAllowedBlocked!.blockedHosts : [],
|
||||||
fetchClients: fetchClients
|
fetchClients: fetchClients
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -16,6 +16,7 @@ import 'package:adguard_home_manager/providers/app_config_provider.dart';
|
||||||
import 'package:adguard_home_manager/models/clients_allowed_blocked.dart';
|
import 'package:adguard_home_manager/models/clients_allowed_blocked.dart';
|
||||||
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
||||||
import 'package:adguard_home_manager/constants/enums.dart';
|
import 'package:adguard_home_manager/constants/enums.dart';
|
||||||
|
import 'package:adguard_home_manager/providers/clients_provider.dart';
|
||||||
import 'package:adguard_home_manager/services/http_requests.dart';
|
import 'package:adguard_home_manager/services/http_requests.dart';
|
||||||
import 'package:adguard_home_manager/classes/process_modal.dart';
|
import 'package:adguard_home_manager/classes/process_modal.dart';
|
||||||
|
|
||||||
|
@ -69,14 +70,15 @@ class _ClientsListState extends State<ClientsList> {
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
final serversProvider = Provider.of<ServersProvider>(context);
|
final serversProvider = Provider.of<ServersProvider>(context);
|
||||||
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
final appConfigProvider = Provider.of<AppConfigProvider>(context);
|
||||||
|
final clientsProvider = Provider.of<ClientsProvider>(context);
|
||||||
|
|
||||||
final width = MediaQuery.of(context).size.width;
|
final width = MediaQuery.of(context).size.width;
|
||||||
|
|
||||||
void confirmRemoveItem(String client, String type) async {
|
void confirmRemoveItem(String client, String type) async {
|
||||||
Map<String, List<String>> body = {
|
Map<String, List<String>> body = {
|
||||||
"allowed_clients": serversProvider.clients.data!.clientsAllowedBlocked?.allowedClients ?? [],
|
"allowed_clients": clientsProvider.clients!.clientsAllowedBlocked?.allowedClients ?? [],
|
||||||
"disallowed_clients": serversProvider.clients.data!.clientsAllowedBlocked?.disallowedClients ?? [],
|
"disallowed_clients": clientsProvider.clients!.clientsAllowedBlocked?.disallowedClients ?? [],
|
||||||
"blocked_hosts": serversProvider.clients.data!.clientsAllowedBlocked?.blockedHosts ?? [],
|
"blocked_hosts": clientsProvider.clients!.clientsAllowedBlocked?.blockedHosts ?? [],
|
||||||
};
|
};
|
||||||
|
|
||||||
if (type == 'allowed') {
|
if (type == 'allowed') {
|
||||||
|
@ -97,7 +99,7 @@ class _ClientsListState extends State<ClientsList> {
|
||||||
processModal.close();
|
processModal.close();
|
||||||
|
|
||||||
if (result['result'] == 'success') {
|
if (result['result'] == 'success') {
|
||||||
serversProvider.setAllowedDisallowedClientsBlockedDomains(
|
clientsProvider.setAllowedDisallowedClientsBlockedDomains(
|
||||||
ClientsAllowedBlocked(
|
ClientsAllowedBlocked(
|
||||||
allowedClients: body['allowed_clients'] ?? [],
|
allowedClients: body['allowed_clients'] ?? [],
|
||||||
disallowedClients: body['disallowed_clients'] ?? [],
|
disallowedClients: body['disallowed_clients'] ?? [],
|
||||||
|
@ -125,9 +127,9 @@ class _ClientsListState extends State<ClientsList> {
|
||||||
|
|
||||||
void confirmAddItem(String item, String type) async {
|
void confirmAddItem(String item, String type) async {
|
||||||
Map<String, List<String>> body = {
|
Map<String, List<String>> body = {
|
||||||
"allowed_clients": serversProvider.clients.data!.clientsAllowedBlocked?.allowedClients ?? [],
|
"allowed_clients": clientsProvider.clients!.clientsAllowedBlocked?.allowedClients ?? [],
|
||||||
"disallowed_clients": serversProvider.clients.data!.clientsAllowedBlocked?.disallowedClients ?? [],
|
"disallowed_clients": clientsProvider.clients!.clientsAllowedBlocked?.disallowedClients ?? [],
|
||||||
"blocked_hosts": serversProvider.clients.data!.clientsAllowedBlocked?.blockedHosts ?? [],
|
"blocked_hosts": clientsProvider.clients!.clientsAllowedBlocked?.blockedHosts ?? [],
|
||||||
};
|
};
|
||||||
|
|
||||||
if (type == 'allowed') {
|
if (type == 'allowed') {
|
||||||
|
@ -148,7 +150,7 @@ class _ClientsListState extends State<ClientsList> {
|
||||||
processModal.close();
|
processModal.close();
|
||||||
|
|
||||||
if (result['result'] == 'success') {
|
if (result['result'] == 'success') {
|
||||||
serversProvider.setAllowedDisallowedClientsBlockedDomains(
|
clientsProvider.setAllowedDisallowedClientsBlockedDomains(
|
||||||
ClientsAllowedBlocked(
|
ClientsAllowedBlocked(
|
||||||
allowedClients: body['allowed_clients'] ?? [],
|
allowedClients: body['allowed_clients'] ?? [],
|
||||||
disallowedClients: body['disallowed_clients'] ?? [],
|
disallowedClients: body['disallowed_clients'] ?? [],
|
||||||
|
|
|
@ -591,7 +591,7 @@ Future getClients(Server server) async {
|
||||||
|
|
||||||
if (result[0]['hasResponse'] == true && result[1]['hasResponse'] == true) {
|
if (result[0]['hasResponse'] == true && result[1]['hasResponse'] == true) {
|
||||||
if (result[0]['statusCode'] == 200 && result[1]['statusCode'] == 200) {
|
if (result[0]['statusCode'] == 200 && result[1]['statusCode'] == 200) {
|
||||||
final clients = ClientsData.fromJson(jsonDecode(result[0]['body']));
|
final clients = Clients.fromJson(jsonDecode(result[0]['body']));
|
||||||
clients.clientsAllowedBlocked = ClientsAllowedBlocked.fromJson(jsonDecode(result[1]['body']));
|
clients.clientsAllowedBlocked = ClientsAllowedBlocked.fromJson(jsonDecode(result[1]['body']));
|
||||||
return {
|
return {
|
||||||
'result': 'success',
|
'result': 'success',
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue