feat: auto clear history

This commit is contained in:
DenserMeerkat
2024-07-22 21:19:33 +05:30
parent f3e3d30f84
commit bed7ad347c
6 changed files with 73 additions and 1 deletions

View File

@ -9,6 +9,7 @@ void main() async {
WidgetsFlutterBinding.ensureInitialized();
GoogleFonts.config.allowRuntimeFetching = false;
await openBoxes();
await autoClearHistory();
if (kIsLinux) {
await setupInitialWindow();
}

View File

@ -0,0 +1,51 @@
import 'package:apidash/models/models.dart';
import 'package:apidash/utils/utils.dart';
import 'package:apidash/consts.dart';
import 'hive_services.dart';
Future<void> autoClearHistory() async {
final settingsMap = hiveHandler.settings;
final retentionPeriod = settingsMap['historyRetentionPeriod'];
HistoryRetentionPeriod historyRetentionPeriod =
HistoryRetentionPeriod.oneWeek;
if (retentionPeriod != null) {
historyRetentionPeriod =
HistoryRetentionPeriod.values.byName(retentionPeriod);
}
DateTime? retentionDate = getRetentionDate(historyRetentionPeriod);
if (retentionDate == null) {
return;
} else {
List<String>? historyIds = hiveHandler.getHistoryIds();
List<String> toRemoveIds = [];
if (historyIds == null || historyIds.isEmpty) {
return;
}
for (var historyId in historyIds) {
var jsonModel = hiveHandler.getHistoryMeta(historyId);
if (jsonModel != null) {
var jsonMap = Map<String, Object?>.from(jsonModel);
HistoryMetaModel historyMetaModelFromJson =
HistoryMetaModel.fromJson(jsonMap);
if (historyMetaModelFromJson.timeStamp.isBefore(retentionDate)) {
toRemoveIds.add(historyId);
}
}
}
if (toRemoveIds.isEmpty) {
return;
}
for (var id in toRemoveIds) {
await hiveHandler.deleteHistoryRequest(id);
hiveHandler.deleteHistoryMeta(id);
}
hiveHandler.setHistoryIds(
historyIds..removeWhere((id) => toRemoveIds.contains(id)));
}
}

View File

@ -97,7 +97,7 @@ class HiveHandler {
String id, Map<String, dynamic>? historyRequestJsoon) =>
historyLazyBox.put(id, historyRequestJsoon);
Future<void> deleteHistoryReqyest(String id) => historyLazyBox.delete(id);
Future<void> deleteHistoryRequest(String id) => historyLazyBox.delete(id);
Future clear() async {
await dataBox.clear();

View File

@ -1,3 +1,4 @@
export 'http_service.dart';
export 'hive_services.dart';
export 'history_service.dart';
export 'window_services.dart';

View File

@ -113,3 +113,19 @@ List<HistoryMetaModel> getRequestGroup(
requestGroup.sort((a, b) => b.timeStamp.compareTo(a.timeStamp));
return requestGroup;
}
DateTime? getRetentionDate(HistoryRetentionPeriod retentionPeriod) {
DateTime now = DateTime.now();
DateTime today = DateTime(now.year, now.month, now.day);
switch (retentionPeriod) {
case HistoryRetentionPeriod.oneWeek:
return today.subtract(const Duration(days: 7));
case HistoryRetentionPeriod.oneMonth:
return today.subtract(const Duration(days: 30));
case HistoryRetentionPeriod.threeMonths:
return today.subtract(const Duration(days: 90));
default:
return null;
}
}

View File

@ -1,4 +1,7 @@
import 'dart:io';
import 'package:spot/spot.dart';
import 'package:apidash/consts.dart';
import 'package:apidash/providers/providers.dart';
import 'package:apidash/screens/common_widgets/common_widgets.dart';
import 'package:apidash/screens/dashboard.dart';