switch to history repository

This commit is contained in:
Fabian Freund
2025-12-22 21:00:59 +01:00
parent 62f48f92f5
commit 8011a7f956
6 changed files with 120 additions and 16 deletions
@@ -108,7 +108,9 @@ class _BrowserViewState extends ConsumerState<BrowserView>
.deleteDataOnEngineStart(settings.deleteBrowsingDataOnQuit);
if (settings.historyAutoCleanInterval > Duration.zero) {
await GeckoHistoryService().deleteVisitsBetween(
await ref
.read(historyRepositoryProvider.notifier)
.deleteVisitsBetween(
DateTime(0),
DateTime.now().subtract(settings.historyAutoCleanInterval),
);
@@ -24,6 +24,7 @@ import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:riverpod/experimental/persist.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:weblibre/features/geckoview/features/history/domain/entities/history_filter_options.dart';
import 'package:weblibre/features/geckoview/features/history/domain/repositories/history.dart';
import 'package:weblibre/features/user/data/providers.dart';
part 'providers.g.dart';
@@ -67,14 +68,7 @@ class HistoryFilter extends _$HistoryFilter {
Future<List<VisitInfo>> browsingHistory(Ref ref) {
final options = ref.watch(historyFilterProvider);
final service = GeckoHistoryService();
return service
.getDetailedVisits(
options.dateRange?.start ?? DateTime(0),
options.dateRange?.end ?? DateTime(9999),
options.visitTypes,
)
.then(
(visits) => visits..sort((a, b) => b.visitTime.compareTo(a.visitTime)),
);
return ref
.read(historyRepositoryProvider.notifier)
.getDetailedVisits(options);
}
@@ -99,4 +99,4 @@ final class BrowsingHistoryProvider
}
}
String _$browsingHistoryHash() => r'6447fd4d8209c3befb07f2d82fa41a24bd3accb1';
String _$browsingHistoryHash() => r'3b6ee5853387481d7544bc9733741a5519f84f40';
@@ -0,0 +1,42 @@
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:weblibre/features/geckoview/features/history/domain/entities/history_filter_options.dart';
part 'history.g.dart';
@Riverpod(keepAlive: true)
class HistoryRepository extends _$HistoryRepository {
final _service = GeckoHistoryService();
Future<void> deleteVisitsBetween(DateTime start, DateTime end) {
return _service.deleteVisitsBetween(start, end);
}
Future<List<VisitInfo>> getDetailedVisits(HistoryFilterOptions options) {
return _service
.getDetailedVisits(
options.dateRange?.start ?? DateTime(0),
options.dateRange?.end ?? DateTime(9999),
options.visitTypes,
)
.then(
(visits) =>
visits..sort((a, b) => b.visitTime.compareTo(a.visitTime)),
);
}
Future<List<VisitInfo>> getVisitsPaginated({
required int count,
int offset = 0,
Set<VisitType> types = const {VisitType.link},
}) {
return _service.getVisitsPaginated(offset, count, types);
}
Future<void> deleteVisit(VisitInfo info) {
return _service.deleteVisit(info);
}
@override
void build() {}
}
@@ -0,0 +1,63 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'history.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
// GENERATED CODE - DO NOT MODIFY BY HAND
// ignore_for_file: type=lint, type=warning
@ProviderFor(HistoryRepository)
const historyRepositoryProvider = HistoryRepositoryProvider._();
final class HistoryRepositoryProvider
extends $NotifierProvider<HistoryRepository, void> {
const HistoryRepositoryProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'historyRepositoryProvider',
isAutoDispose: false,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$historyRepositoryHash();
@$internal
@override
HistoryRepository create() => HistoryRepository();
/// {@macro riverpod.override_with_value}
Override overrideWithValue(void value) {
return $ProviderOverride(
origin: this,
providerOverride: $SyncValueProvider<void>(value),
);
}
}
String _$historyRepositoryHash() => r'f9ccc32275bb2f95edbe53b2245b4843e8d0c439';
abstract class _$HistoryRepository extends $Notifier<void> {
void build();
@$mustCallSuper
@override
void runBuild() {
build();
final ref = this.ref as $Ref<void, void>;
final element =
ref.element
as $ClassProviderElement<
AnyNotifier<void, void>,
void,
Object?,
Object?
>;
element.handleValue(ref, null);
}
}
@@ -38,6 +38,7 @@ import 'package:weblibre/features/geckoview/domain/repositories/tab.dart';
import 'package:weblibre/features/geckoview/features/browser/presentation/dialogs/delete_data.dart';
import 'package:weblibre/features/geckoview/features/history/domain/entities/history_filter_options.dart';
import 'package:weblibre/features/geckoview/features/history/domain/providers.dart';
import 'package:weblibre/features/geckoview/features/history/domain/repositories/history.dart';
import 'package:weblibre/features/geckoview/features/history/presentation/dialogs/delete_file.dart';
import 'package:weblibre/features/user/data/models/general_settings.dart';
import 'package:weblibre/presentation/hooks/menu_controller.dart';
@@ -106,8 +107,9 @@ class Section extends MultiSliver {
builder: (context, ref, _) {
return IconButton(
onPressed: () async {
final service = GeckoHistoryService();
await service.deleteVisit(item);
await ref
.read(historyRepositoryProvider.notifier)
.deleteVisit(item);
final downloadedFile = item.title.mapNotNull(
(title) => File(title),
@@ -240,8 +242,9 @@ class HistoryScreen extends HookConsumerWidget {
DeleteDecision? deleteDecision;
for (final item in selectedItems.value) {
final service = GeckoHistoryService();
await service.deleteVisit(item);
await ref
.read(historyRepositoryProvider.notifier)
.deleteVisit(item);
final downloadedFile = item.title.mapNotNull(
(title) => File(title),