swith to bang composite key

This commit is contained in:
Fabian Freund
2025-09-29 12:51:35 +02:00
parent d215aad3e4
commit 8c05eff173
29 changed files with 433 additions and 700 deletions
@@ -21,6 +21,7 @@ import 'package:riverpod/riverpod.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:weblibre/features/bangs/data/models/bang_data.dart';
import 'package:weblibre/features/bangs/data/models/bang_group.dart';
import 'package:weblibre/features/bangs/data/models/bang_key.dart';
import 'package:weblibre/features/bangs/data/models/search_history_entry.dart';
import 'package:weblibre/features/bangs/domain/repositories/data.dart';
import 'package:weblibre/features/bangs/domain/repositories/sync.dart';
@@ -30,20 +31,20 @@ part 'bangs.g.dart';
@Riverpod(keepAlive: true)
Stream<BangData?> defaultSearchBangData(Ref ref) {
final trigger = ref.watch(
final key = ref.watch(
generalSettingsWithDefaultsProvider.select(
(value) => value.defaultSearchProvider,
),
);
final repository = ref.watch(bangDataRepositoryProvider.notifier);
return repository.watchBang(trigger);
return repository.watchBang(key);
}
@Riverpod()
Stream<BangData?> bangData(Ref ref, String trigger) {
Stream<BangData?> bangData(Ref ref, BangKey key) {
final repository = ref.watch(bangDataRepositoryProvider.notifier);
return repository.watchBang(trigger);
return repository.watchBang(key);
}
@Riverpod()
@@ -42,7 +42,7 @@ final class DefaultSearchBangDataProvider
}
String _$defaultSearchBangDataHash() =>
r'5fa3f588b57a82dd8fffb2082e495108a242ef72';
r'5f43b8989219cf3cb2f5ca65df351b6cb100427f';
@ProviderFor(bangData)
const bangDataProvider = BangDataFamily._();
@@ -53,7 +53,7 @@ final class BangDataProvider
with $FutureModifier<BangData?>, $StreamProvider<BangData?> {
const BangDataProvider._({
required BangDataFamily super.from,
required String super.argument,
required BangKey super.argument,
}) : super(
retry: null,
name: r'bangDataProvider',
@@ -79,7 +79,7 @@ final class BangDataProvider
@override
Stream<BangData?> create(Ref ref) {
final argument = this.argument as String;
final argument = this.argument as BangKey;
return bangData(ref, argument);
}
@@ -94,10 +94,10 @@ final class BangDataProvider
}
}
String _$bangDataHash() => r'b10d3a74e19d30fc372b9ecbf7146bccd9fdf83b';
String _$bangDataHash() => r'bd9f5ec8b29aab74620a9b5a4246cb7e3b2fd377';
final class BangDataFamily extends $Family
with $FunctionalFamilyOverride<Stream<BangData?>, String> {
with $FunctionalFamilyOverride<Stream<BangData?>, BangKey> {
const BangDataFamily._()
: super(
retry: null,
@@ -107,8 +107,8 @@ final class BangDataFamily extends $Family
isAutoDispose: true,
);
BangDataProvider call(String trigger) =>
BangDataProvider._(argument: trigger, from: this);
BangDataProvider call(BangKey key) =>
BangDataProvider._(argument: key, from: this);
@override
String toString() => r'bangDataProvider';
@@ -34,8 +34,9 @@ class BangSearch extends _$BangSearch {
Future<Uri> triggerBangSearch(BangData bang, String searchQuery) async {
final bangDataNotifier = ref.read(bangDataRepositoryProvider.notifier);
await bangDataNotifier.increaseFrequency(bang.trigger);
await bangDataNotifier.increaseFrequency(bang.group, bang.trigger);
await bangDataNotifier.addSearchEntry(
bang.group,
bang.trigger,
searchQuery,
maxEntryCount: 3,
@@ -33,7 +33,7 @@ final class BangSearchProvider
BangSearch create() => BangSearch();
}
String _$bangSearchHash() => r'6b7452d48698c01870c5c75f0c10cadaafc481c8';
String _$bangSearchHash() => r'66080335f1677e6a4636c41dd5619de3828375e6';
abstract class _$BangSearch extends $StreamNotifier<List<BangData>> {
Stream<List<BangData>> build();
@@ -23,6 +23,7 @@ import 'package:drift/drift.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:weblibre/features/bangs/data/models/bang_data.dart';
import 'package:weblibre/features/bangs/data/models/bang_group.dart';
import 'package:weblibre/features/bangs/data/models/bang_key.dart';
import 'package:weblibre/features/bangs/data/models/search_history_entry.dart';
import 'package:weblibre/features/bangs/data/providers.dart';
@@ -33,12 +34,12 @@ class BangDataRepository extends _$BangDataRepository {
@override
void build() {}
Stream<BangData?> watchBang(String? trigger) {
if (trigger != null) {
Stream<BangData?> watchBang(BangKey? key) {
if (key != null) {
return ref
.read(bangDatabaseProvider)
.bangDao
.getBangData(trigger)
.getBangData(key.group, key.trigger)
.watchSingleOrNull();
} else {
return Stream.value(null);
@@ -104,14 +105,15 @@ class BangDataRepository extends _$BangDataRepository {
.watch();
}
Future<void> increaseFrequency(String trigger) {
Future<void> increaseFrequency(BangGroup group, String trigger) {
return ref
.read(bangDatabaseProvider)
.bangDao
.increaseBangFrequency(trigger);
.increaseBangFrequency(group, trigger);
}
Future<void> addSearchEntry(
BangGroup group,
String trigger,
String searchQuery, {
required int maxEntryCount,
@@ -119,7 +121,7 @@ class BangDataRepository extends _$BangDataRepository {
final db = ref.read(bangDatabaseProvider);
//Pack in a transaction to bundle rebuilds of watch() queries
return db.transaction(() async {
await db.bangDao.addSearchEntry(trigger, searchQuery);
await db.bangDao.addSearchEntry(group, trigger, searchQuery);
await db.definitionsDrift.evictHistoryEntries(limit: maxEntryCount);
});
}
@@ -42,7 +42,7 @@ final class BangDataRepositoryProvider
}
String _$bangDataRepositoryHash() =>
r'5e25ce123d4667a0b12316f5b771b6776c40f280';
r'93f1338da86c693f524df377fe01d0ecf7f5ff80';
abstract class _$BangDataRepository extends $Notifier<void> {
void build();