implement user bangs

This commit is contained in:
Fabian Freund
2025-11-21 05:27:44 +01:00
parent d764149759
commit 23b758e729
32 changed files with 3428 additions and 67 deletions
@@ -21,6 +21,7 @@ import 'dart:convert';
import 'package:drift/drift.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
import 'package:weblibre/features/bangs/data/models/bang.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';
@@ -143,4 +144,12 @@ class BangDataRepository extends _$BangDataRepository {
.bangFrequency
.deleteWhere((t) => t.trigger.equals(trigger));
}
Future<void> upsertBang(Bang bang) {
return ref.read(bangDatabaseProvider).bangDao.upsertBang(bang);
}
Future<void> deleteBang(BangGroup group, String trigger) {
return ref.read(bangDatabaseProvider).syncDao.deleteBangs(group, [trigger]);
}
}
@@ -42,7 +42,7 @@ final class BangDataRepositoryProvider
}
String _$bangDataRepositoryHash() =>
r'93f1338da86c693f524df377fe01d0ecf7f5ff80';
r'0001f3e21fc1bff4fc942e6e468fb580cf2afe4b';
abstract class _$BangDataRepository extends $Notifier<void> {
void build();
@@ -64,6 +64,18 @@ class BangSyncRepository extends _$BangSyncRepository {
required BangDatabase db,
required BangGroup group,
}) async {
if (group.bundled == null) {
return Result.failure(
const ErrorMessage(source: 'BangSync', message: 'Not bundled'),
);
}
if (group.remote == null) {
return Result.failure(
const ErrorMessage(source: 'BangSync', message: 'No remote source'),
);
}
final lastSync = await db.syncDao
.getLastSyncOfGroup(group)
.getSingleOrNull();
@@ -78,7 +90,7 @@ class BangSyncRepository extends _$BangSyncRepository {
return Result.success(null);
}
final result = await sourceService.getBundledBangs(group.bundled, group);
final result = await sourceService.getBundledBangs(group.bundled!, group);
return result.flatMapAsync((remoteBangs) async {
await db.syncDao.syncBangs(
group: group,
@@ -107,7 +119,7 @@ class BangSyncRepository extends _$BangSyncRepository {
bangDataSourceServiceProvider.notifier,
),
db: db,
url: Uri.parse(group.remote),
url: Uri.parse(group.remote!),
group: group,
syncInterval: syncInterval,
);
@@ -163,7 +175,7 @@ class BangSyncRepository extends _$BangSyncRepository {
Set<BangGroup>? groups,
}) async {
//Default to all sources
groups ??= BangGroup.values.toSet();
groups ??= BangGroup.values.where((e) => e.bundled != null).toSet();
//Run isolated operations
final futures = groups.map(
@@ -42,7 +42,7 @@ final class BangSyncRepositoryProvider
}
String _$bangSyncRepositoryHash() =>
r'e3ce355e5332ff1fe7ac8ecaa277a431b74f2da0';
r'1347dcbd03f6a1a4fa3bbbae5d9302098d260c50';
abstract class _$BangSyncRepository extends $Notifier<void> {
void build();