2023-11-01 20:46:03 +01:00
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
import 'package:provider/provider.dart';
|
|
|
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
|
|
|
|
|
|
|
import 'package:adguard_home_manager/screens/logs/configuration/config_widgets.dart';
|
|
|
|
|
|
|
|
import 'package:adguard_home_manager/constants/enums.dart';
|
|
|
|
import 'package:adguard_home_manager/providers/servers_provider.dart';
|
|
|
|
|
|
|
|
class RetentionItem {
|
|
|
|
final String label;
|
|
|
|
final double value;
|
|
|
|
|
|
|
|
const RetentionItem({
|
|
|
|
required this.label,
|
|
|
|
required this.value,
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2023-11-19 22:52:40 +01:00
|
|
|
class LogsConfigModal extends StatefulWidget {
|
2023-11-01 20:46:03 +01:00
|
|
|
final BuildContext context;
|
|
|
|
final void Function(Map<String, dynamic>) onConfirm;
|
|
|
|
final void Function() onClear;
|
|
|
|
final bool dialog;
|
|
|
|
final String serverVersion;
|
|
|
|
|
2023-11-19 22:52:40 +01:00
|
|
|
const LogsConfigModal({
|
|
|
|
super.key,
|
2023-11-01 20:46:03 +01:00
|
|
|
required this.context,
|
|
|
|
required this.onConfirm,
|
|
|
|
required this.onClear,
|
|
|
|
required this.dialog,
|
|
|
|
required this.serverVersion
|
2023-11-19 22:52:40 +01:00
|
|
|
});
|
2023-11-01 20:46:03 +01:00
|
|
|
|
|
|
|
@override
|
2023-11-19 22:52:40 +01:00
|
|
|
State<LogsConfigModal> createState() => _LogsConfigModalState();
|
2023-11-01 20:46:03 +01:00
|
|
|
}
|
|
|
|
|
2023-11-19 22:52:40 +01:00
|
|
|
class _LogsConfigModalState extends State<LogsConfigModal> {
|
2023-11-01 20:46:03 +01:00
|
|
|
bool generalSwitch = false;
|
|
|
|
bool anonymizeClientIp = false;
|
2023-11-02 18:26:58 +01:00
|
|
|
double? retentionTime;
|
2023-11-01 20:46:03 +01:00
|
|
|
|
|
|
|
List<RetentionItem> retentionItems = [];
|
|
|
|
|
|
|
|
LoadStatus loadStatus = LoadStatus.loading;
|
|
|
|
|
|
|
|
void loadData() async {
|
|
|
|
final serversProvider = Provider.of<ServersProvider>(context, listen: false);
|
|
|
|
|
2023-11-19 22:52:40 +01:00
|
|
|
final result = await serversProvider.apiClient2!.getQueryLogInfo();
|
2023-11-01 20:46:03 +01:00
|
|
|
|
|
|
|
if (mounted) {
|
2023-11-19 22:52:40 +01:00
|
|
|
if (result.successful == true) {
|
2023-11-01 20:46:03 +01:00
|
|
|
setState(() {
|
2023-11-19 22:52:40 +01:00
|
|
|
generalSwitch = result.content['enabled'];
|
|
|
|
anonymizeClientIp = result.content['anonymize_client_ip'];
|
|
|
|
retentionTime = result.content['interval'] != null
|
|
|
|
? double.parse(result.content['interval'].toString())
|
2023-11-02 18:26:58 +01:00
|
|
|
: null;
|
|
|
|
loadStatus = LoadStatus.loaded;
|
2023-11-01 20:46:03 +01:00
|
|
|
});
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
setState(() => loadStatus = LoadStatus.error);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
void initState() {
|
2023-11-19 22:52:40 +01:00
|
|
|
retentionItems = [
|
2023-11-01 20:46:03 +01:00
|
|
|
RetentionItem(
|
|
|
|
label: AppLocalizations.of(widget.context)!.hours6,
|
|
|
|
value: 21600000
|
|
|
|
),
|
|
|
|
RetentionItem(
|
|
|
|
label: AppLocalizations.of(widget.context)!.hours24,
|
|
|
|
value: 86400000
|
|
|
|
),
|
|
|
|
RetentionItem(
|
|
|
|
label: AppLocalizations.of(widget.context)!.days7,
|
|
|
|
value: 604800000
|
|
|
|
),
|
|
|
|
RetentionItem(
|
|
|
|
label: AppLocalizations.of(widget.context)!.days30,
|
|
|
|
value: 2592000000
|
|
|
|
),
|
|
|
|
RetentionItem(
|
|
|
|
label: AppLocalizations.of(widget.context)!.days90,
|
|
|
|
value: 7776000000
|
|
|
|
),
|
|
|
|
];
|
|
|
|
|
|
|
|
loadData();
|
|
|
|
super.initState();
|
|
|
|
}
|
|
|
|
|
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
if (widget.dialog == true) {
|
|
|
|
return Dialog(
|
|
|
|
child: ConstrainedBox(
|
|
|
|
constraints: const BoxConstraints(
|
|
|
|
maxWidth: 500
|
|
|
|
),
|
|
|
|
child: Builder(
|
|
|
|
builder: (context) {
|
|
|
|
switch (loadStatus) {
|
|
|
|
case LoadStatus.loading:
|
|
|
|
return const ConfigLogsLoading();
|
|
|
|
|
|
|
|
case LoadStatus.loaded:
|
|
|
|
return LogsConfigOptions(
|
|
|
|
generalSwitch: generalSwitch,
|
|
|
|
updateGeneralSwitch: (v) => setState(() => generalSwitch = v),
|
|
|
|
anonymizeClientIp: anonymizeClientIp,
|
|
|
|
updateAnonymizeClientIp: (v) => setState(() => anonymizeClientIp = v),
|
|
|
|
retentionItems: retentionItems,
|
|
|
|
retentionTime: retentionTime,
|
|
|
|
updateRetentionTime: (v) => setState(() => retentionTime = v),
|
|
|
|
onClear: () => widget.onClear(),
|
|
|
|
onConfirm: () => widget.onConfirm({
|
|
|
|
"enabled": generalSwitch,
|
2023-11-02 18:26:58 +01:00
|
|
|
"interval": retentionTime,
|
2023-11-01 20:46:03 +01:00
|
|
|
"anonymize_client_ip": anonymizeClientIp
|
|
|
|
})
|
|
|
|
);
|
|
|
|
|
|
|
|
case LoadStatus.error:
|
|
|
|
return const ConfigLogsError();
|
|
|
|
|
|
|
|
default:
|
|
|
|
return const SizedBox();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
)
|
|
|
|
),
|
|
|
|
);
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
return Container(
|
|
|
|
decoration: BoxDecoration(
|
|
|
|
borderRadius: const BorderRadius.only(
|
|
|
|
topLeft: Radius.circular(28),
|
|
|
|
topRight: Radius.circular(28)
|
|
|
|
),
|
|
|
|
color: Theme.of(context).dialogBackgroundColor
|
|
|
|
),
|
|
|
|
child: Builder(
|
|
|
|
builder: (context) {
|
|
|
|
switch (loadStatus) {
|
|
|
|
case LoadStatus.loading:
|
|
|
|
return const ConfigLogsLoading();
|
|
|
|
|
|
|
|
case LoadStatus.loaded:
|
|
|
|
return LogsConfigOptions(
|
|
|
|
generalSwitch: generalSwitch,
|
|
|
|
updateGeneralSwitch: (v) => setState(() => generalSwitch = v),
|
|
|
|
anonymizeClientIp: anonymizeClientIp,
|
|
|
|
updateAnonymizeClientIp: (v) => setState(() => anonymizeClientIp = v),
|
|
|
|
retentionItems: retentionItems,
|
|
|
|
retentionTime: retentionTime,
|
|
|
|
updateRetentionTime: (v) => setState(() => retentionTime = v),
|
|
|
|
onClear: () => widget.onClear(),
|
|
|
|
onConfirm: () => widget.onConfirm({
|
|
|
|
"enabled": generalSwitch,
|
2023-11-02 18:26:58 +01:00
|
|
|
"interval": retentionTime,
|
2023-11-01 20:46:03 +01:00
|
|
|
"anonymize_client_ip": anonymizeClientIp
|
|
|
|
})
|
|
|
|
);
|
|
|
|
|
|
|
|
case LoadStatus.error:
|
|
|
|
return const ConfigLogsError();
|
|
|
|
|
|
|
|
default:
|
|
|
|
return const SizedBox();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|