import 'package:lensai/features/bangs/data/models/bang.dart'; import 'package:lensai/features/bangs/data/models/bang_data.dart'; import 'package:lensai/features/bangs/domain/repositories/data.dart'; import 'package:lensai/features/bangs/domain/repositories/sync.dart'; import 'package:riverpod/riverpod.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'bangs.g.dart'; @Riverpod() Stream bangData(Ref ref, String? trigger) { final repository = ref.watch(bangDataRepositoryProvider.notifier); return repository.watchBang(trigger); } @Riverpod(keepAlive: true) Stream defaultSearchBangData(Ref ref) { final repository = ref.watch(bangDataRepositoryProvider.notifier); return repository.watchBang('kagi'); } @Riverpod() Stream>> bangCategories(Ref ref) { final repository = ref.watch(bangDataRepositoryProvider.notifier); return repository.watchCategories(); } @Riverpod() Stream> bangDataList( Ref ref, { ({ Iterable? groups, String? domain, ({String category, String? subCategory})? categoryFilter, bool? orderMostFrequentFirst, })? filter, }) { final repository = ref.watch(bangDataRepositoryProvider.notifier); return repository.watchBangs( groups: filter?.groups, domain: filter?.domain, categoryFilter: filter?.categoryFilter, orderMostFrequentFirst: filter?.orderMostFrequentFirst, ); } @Riverpod() Stream> frequentBangDataList(Ref ref) { final repository = ref.watch(bangDataRepositoryProvider.notifier); return repository.watchFrequentBangs(); } @Riverpod() Future bangDataEnsureIcon( Ref ref, BangData bang, ) { final repository = ref.watch(bangDataRepositoryProvider.notifier); return repository.ensureIconAvailable(bang).then( (value) => value.value, ); } @Riverpod() Stream lastSyncOfGroup( Ref ref, BangGroup group, ) { final repository = ref.watch(bangSyncRepositoryProvider.notifier); return repository.watchLastSyncOfGroup(group); } @Riverpod() Stream bangCountOfGroup( Ref ref, BangGroup group, ) { final repository = ref.watch(bangDataRepositoryProvider.notifier); return repository.watchBangCount(group); } @Riverpod() Stream bangIconCacheSizeMegabytes(Ref ref) { final repository = ref.watch(bangDataRepositoryProvider.notifier); return repository.watchIconCacheSize(); }