adguard-home-manager/lib/screens/logs/configuration/logs_config_modal.dart

185 lines
5.5 KiB
Dart
Raw Normal View History

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();
}
},
)
);
}
}
}