majro update

This commit is contained in:
Fabian Freund
2025-02-28 14:30:49 +01:00
parent a8957f6cf8
commit 3c4d479bd9
181 changed files with 7090 additions and 5299 deletions
@@ -111,9 +111,9 @@ class BangDao extends DatabaseAccessor<BangDatabase> with _$BangDaoMixin {
),
onConflict: DoUpdate(
target: [db.bangHistory.searchQuery],
(old) => BangHistoryCompanion.custom(
trigger: Variable(trigger),
searchDate: Variable(DateTime.now()),
(old) => BangHistoryCompanion(
trigger: Value(trigger),
searchDate: Value(DateTime.now()),
),
),
);
@@ -22,7 +22,7 @@ class SyncDao extends DatabaseAccessor<BangDatabase> with _$SyncDaoMixin {
return db.bangSync.insertOne(
BangSyncCompanion.insert(group: Value(group), lastSync: lastSync),
onConflict: DoUpdate(
(old) => BangSyncCompanion.custom(lastSync: Variable(lastSync)),
(old) => BangSyncCompanion(lastSync: Value(lastSync)),
),
);
}
File diff suppressed because it is too large Load Diff
+57 -49
View File
@@ -72,7 +72,6 @@ class _$BangCWProxyImpl implements _$BangCWProxy {
Bang format(Set<BangFormat>? format) => this(format: format);
@override
/// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `Bang(...).copyWith.fieldName(...)` to override fields one at a time with nullification support.
///
/// Usage
@@ -90,38 +89,46 @@ class _$BangCWProxyImpl implements _$BangCWProxy {
Object? format = const $CopyWithPlaceholder(),
}) {
return Bang(
websiteName: websiteName == const $CopyWithPlaceholder()
? _value.websiteName
// ignore: cast_nullable_to_non_nullable
: websiteName as String,
domain: domain == const $CopyWithPlaceholder()
? _value.domain
// ignore: cast_nullable_to_non_nullable
: domain as String,
trigger: trigger == const $CopyWithPlaceholder()
? _value.trigger
// ignore: cast_nullable_to_non_nullable
: trigger as String,
urlTemplate: urlTemplate == const $CopyWithPlaceholder()
? _value.urlTemplate
// ignore: cast_nullable_to_non_nullable
: urlTemplate as String,
group: group == const $CopyWithPlaceholder()
? _value.group
// ignore: cast_nullable_to_non_nullable
: group as BangGroup?,
category: category == const $CopyWithPlaceholder()
? _value.category
// ignore: cast_nullable_to_non_nullable
: category as String?,
subCategory: subCategory == const $CopyWithPlaceholder()
? _value.subCategory
// ignore: cast_nullable_to_non_nullable
: subCategory as String?,
format: format == const $CopyWithPlaceholder()
? _value.format
// ignore: cast_nullable_to_non_nullable
: format as Set<BangFormat>?,
websiteName:
websiteName == const $CopyWithPlaceholder()
? _value.websiteName
// ignore: cast_nullable_to_non_nullable
: websiteName as String,
domain:
domain == const $CopyWithPlaceholder()
? _value.domain
// ignore: cast_nullable_to_non_nullable
: domain as String,
trigger:
trigger == const $CopyWithPlaceholder()
? _value.trigger
// ignore: cast_nullable_to_non_nullable
: trigger as String,
urlTemplate:
urlTemplate == const $CopyWithPlaceholder()
? _value.urlTemplate
// ignore: cast_nullable_to_non_nullable
: urlTemplate as String,
group:
group == const $CopyWithPlaceholder()
? _value.group
// ignore: cast_nullable_to_non_nullable
: group as BangGroup?,
category:
category == const $CopyWithPlaceholder()
? _value.category
// ignore: cast_nullable_to_non_nullable
: category as String?,
subCategory:
subCategory == const $CopyWithPlaceholder()
? _value.subCategory
// ignore: cast_nullable_to_non_nullable
: subCategory as String?,
format:
format == const $CopyWithPlaceholder()
? _value.format
// ignore: cast_nullable_to_non_nullable
: format as Set<BangFormat>?,
);
}
}
@@ -137,26 +144,27 @@ extension $BangCopyWith on Bang {
// **************************************************************************
Bang _$BangFromJson(Map<String, dynamic> json) => Bang(
websiteName: json['s'] as String,
domain: json['d'] as String,
trigger: json['t'] as String,
urlTemplate: json['u'] as String,
category: json['c'] as String?,
subCategory: json['sc'] as String?,
format: (json['fmt'] as List<dynamic>?)
websiteName: json['s'] as String,
domain: json['d'] as String,
trigger: json['t'] as String,
urlTemplate: json['u'] as String,
category: json['c'] as String?,
subCategory: json['sc'] as String?,
format:
(json['fmt'] as List<dynamic>?)
?.map((e) => $enumDecode(_$BangFormatEnumMap, e))
.toSet(),
);
);
Map<String, dynamic> _$BangToJson(Bang instance) => <String, dynamic>{
's': instance.websiteName,
'd': instance.domain,
't': instance.trigger,
'u': instance.urlTemplate,
'c': instance.category,
'sc': instance.subCategory,
'fmt': instance.format?.map((e) => _$BangFormatEnumMap[e]!).toList(),
};
's': instance.websiteName,
'd': instance.domain,
't': instance.trigger,
'u': instance.urlTemplate,
'c': instance.category,
'sc': instance.subCategory,
'fmt': instance.format?.map((e) => _$BangFormatEnumMap[e]!).toList(),
};
const _$BangFormatEnumMap = {
BangFormat.openBasePath: 'open_base_path',
@@ -84,7 +84,6 @@ class _$BangDataCWProxyImpl implements _$BangDataCWProxy {
BangData icon(BrowserIcon? icon) => this(icon: icon);
@override
/// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `BangData(...).copyWith.fieldName(...)` to override fields one at a time with nullification support.
///
/// Usage
@@ -104,46 +103,56 @@ class _$BangDataCWProxyImpl implements _$BangDataCWProxy {
Object? icon = const $CopyWithPlaceholder(),
}) {
return BangData(
websiteName: websiteName == const $CopyWithPlaceholder()
? _value.websiteName
// ignore: cast_nullable_to_non_nullable
: websiteName as String,
domain: domain == const $CopyWithPlaceholder()
? _value.domain
// ignore: cast_nullable_to_non_nullable
: domain as String,
trigger: trigger == const $CopyWithPlaceholder()
? _value.trigger
// ignore: cast_nullable_to_non_nullable
: trigger as String,
urlTemplate: urlTemplate == const $CopyWithPlaceholder()
? _value.urlTemplate
// ignore: cast_nullable_to_non_nullable
: urlTemplate as String,
category: category == const $CopyWithPlaceholder()
? _value.category
// ignore: cast_nullable_to_non_nullable
: category as String?,
subCategory: subCategory == const $CopyWithPlaceholder()
? _value.subCategory
// ignore: cast_nullable_to_non_nullable
: subCategory as String?,
format: format == const $CopyWithPlaceholder()
? _value.format
// ignore: cast_nullable_to_non_nullable
: format as Set<BangFormat>?,
frequency: frequency == const $CopyWithPlaceholder()
? _value.frequency
// ignore: cast_nullable_to_non_nullable
: frequency as int?,
lastUsed: lastUsed == const $CopyWithPlaceholder()
? _value.lastUsed
// ignore: cast_nullable_to_non_nullable
: lastUsed as DateTime?,
icon: icon == const $CopyWithPlaceholder()
? _value.icon
// ignore: cast_nullable_to_non_nullable
: icon as BrowserIcon?,
websiteName:
websiteName == const $CopyWithPlaceholder()
? _value.websiteName
// ignore: cast_nullable_to_non_nullable
: websiteName as String,
domain:
domain == const $CopyWithPlaceholder()
? _value.domain
// ignore: cast_nullable_to_non_nullable
: domain as String,
trigger:
trigger == const $CopyWithPlaceholder()
? _value.trigger
// ignore: cast_nullable_to_non_nullable
: trigger as String,
urlTemplate:
urlTemplate == const $CopyWithPlaceholder()
? _value.urlTemplate
// ignore: cast_nullable_to_non_nullable
: urlTemplate as String,
category:
category == const $CopyWithPlaceholder()
? _value.category
// ignore: cast_nullable_to_non_nullable
: category as String?,
subCategory:
subCategory == const $CopyWithPlaceholder()
? _value.subCategory
// ignore: cast_nullable_to_non_nullable
: subCategory as String?,
format:
format == const $CopyWithPlaceholder()
? _value.format
// ignore: cast_nullable_to_non_nullable
: format as Set<BangFormat>?,
frequency:
frequency == const $CopyWithPlaceholder()
? _value.frequency
// ignore: cast_nullable_to_non_nullable
: frequency as int?,
lastUsed:
lastUsed == const $CopyWithPlaceholder()
? _value.lastUsed
// ignore: cast_nullable_to_non_nullable
: lastUsed as DateTime?,
icon:
icon == const $CopyWithPlaceholder()
? _value.icon
// ignore: cast_nullable_to_non_nullable
: icon as BrowserIcon?,
);
}
}
@@ -15,7 +15,7 @@ class BangDataSourceService extends _$BangDataSourceService {
@override
void build() {}
Future<Result<List<Bang>>> getBangs(Uri url, BangGroup? group) async {
Future<Result<List<Bang>>> getBangs(Uri url, BangGroup? group) {
return Result.fromAsync(() async {
return await compute((args) async {
final client = http.Client();
@@ -7,20 +7,21 @@ part of 'data_source.dart';
// **************************************************************************
String _$bangDataSourceServiceHash() =>
r'28b774af3338e3e949ccd0f04205ccd4a7fe67a5';
r'f802b9fb3c467a24d65d170229d37f745ae869e5';
/// See also [BangDataSourceService].
@ProviderFor(BangDataSourceService)
final bangDataSourceServiceProvider =
AutoDisposeNotifierProvider<BangDataSourceService, void>.internal(
BangDataSourceService.new,
name: r'bangDataSourceServiceProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$bangDataSourceServiceHash,
dependencies: null,
allTransitiveDependencies: null,
);
BangDataSourceService.new,
name: r'bangDataSourceServiceProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$bangDataSourceServiceHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$BangDataSourceService = AutoDisposeNotifier<void>;
// ignore_for_file: type=lint
@@ -14,9 +14,10 @@ String _$defaultSearchBangDataHash() =>
final defaultSearchBangDataProvider = StreamProvider<BangData?>.internal(
defaultSearchBangData,
name: r'defaultSearchBangDataProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$defaultSearchBangDataHash,
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$defaultSearchBangDataHash,
dependencies: null,
allTransitiveDependencies: null,
);
@@ -30,19 +31,20 @@ String _$bangCategoriesHash() => r'947fcfd2dffcc7f585c6ed7379d319f4fe72293a';
@ProviderFor(bangCategories)
final bangCategoriesProvider =
AutoDisposeStreamProvider<Map<String, List<String>>>.internal(
bangCategories,
name: r'bangCategoriesProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$bangCategoriesHash,
dependencies: null,
allTransitiveDependencies: null,
);
bangCategories,
name: r'bangCategoriesProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$bangCategoriesHash,
dependencies: null,
allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef BangCategoriesRef
= AutoDisposeStreamProviderRef<Map<String, List<String>>>;
typedef BangCategoriesRef =
AutoDisposeStreamProviderRef<Map<String, List<String>>>;
String _$bangListHash() => r'dc168bd1246bea3e5f8015dd52fbf41c5f98ca13';
/// Copied from Dart SDK
@@ -91,9 +93,7 @@ class BangListFamily extends Family<AsyncValue<List<BangData>>> {
}
@override
BangListProvider getProviderOverride(
covariant BangListProvider provider,
) {
BangListProvider getProviderOverride(covariant BangListProvider provider) {
return call(
groups: provider.groups,
domain: provider.domain,
@@ -126,26 +126,26 @@ class BangListProvider extends AutoDisposeStreamProvider<List<BangData>> {
({String category, String? subCategory})? categoryFilter,
bool? orderMostFrequentFirst,
}) : this._internal(
(ref) => bangList(
ref as BangListRef,
groups: groups,
domain: domain,
categoryFilter: categoryFilter,
orderMostFrequentFirst: orderMostFrequentFirst,
),
from: bangListProvider,
name: r'bangListProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$bangListHash,
dependencies: BangListFamily._dependencies,
allTransitiveDependencies: BangListFamily._allTransitiveDependencies,
groups: groups,
domain: domain,
categoryFilter: categoryFilter,
orderMostFrequentFirst: orderMostFrequentFirst,
);
(ref) => bangList(
ref as BangListRef,
groups: groups,
domain: domain,
categoryFilter: categoryFilter,
orderMostFrequentFirst: orderMostFrequentFirst,
),
from: bangListProvider,
name: r'bangListProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$bangListHash,
dependencies: BangListFamily._dependencies,
allTransitiveDependencies: BangListFamily._allTransitiveDependencies,
groups: groups,
domain: domain,
categoryFilter: categoryFilter,
orderMostFrequentFirst: orderMostFrequentFirst,
);
BangListProvider._internal(
super._createNotifier, {
@@ -229,7 +229,8 @@ mixin BangListRef on AutoDisposeStreamProviderRef<List<BangData>> {
}
class _BangListProviderElement
extends AutoDisposeStreamProviderElement<List<BangData>> with BangListRef {
extends AutoDisposeStreamProviderElement<List<BangData>>
with BangListRef {
_BangListProviderElement(super.provider);
@override
@@ -250,14 +251,15 @@ String _$frequentBangListHash() => r'2c1ecb7e9416772fc1c32d01d767e1eb4f865975';
@ProviderFor(frequentBangList)
final frequentBangListProvider =
AutoDisposeStreamProvider<List<BangData>>.internal(
frequentBangList,
name: r'frequentBangListProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$frequentBangListHash,
dependencies: null,
allTransitiveDependencies: null,
);
frequentBangList,
name: r'frequentBangListProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$frequentBangListHash,
dependencies: null,
allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
@@ -268,19 +270,20 @@ String _$searchHistoryHash() => r'7b97798729643de8e44fd8024cdc02f35124b08b';
@ProviderFor(searchHistory)
final searchHistoryProvider =
AutoDisposeStreamProvider<List<SearchHistoryEntry>>.internal(
searchHistory,
name: r'searchHistoryProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$searchHistoryHash,
dependencies: null,
allTransitiveDependencies: null,
);
searchHistory,
name: r'searchHistoryProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$searchHistoryHash,
dependencies: null,
allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element
typedef SearchHistoryRef
= AutoDisposeStreamProviderRef<List<SearchHistoryEntry>>;
typedef SearchHistoryRef =
AutoDisposeStreamProviderRef<List<SearchHistoryEntry>>;
String _$lastSyncOfGroupHash() => r'23d07f3132ba9bb35a31f74e3a69698d31d4c569';
/// See also [lastSyncOfGroup].
@@ -293,21 +296,15 @@ class LastSyncOfGroupFamily extends Family<AsyncValue<DateTime?>> {
const LastSyncOfGroupFamily();
/// See also [lastSyncOfGroup].
LastSyncOfGroupProvider call(
BangGroup group,
) {
return LastSyncOfGroupProvider(
group,
);
LastSyncOfGroupProvider call(BangGroup group) {
return LastSyncOfGroupProvider(group);
}
@override
LastSyncOfGroupProvider getProviderOverride(
covariant LastSyncOfGroupProvider provider,
) {
return call(
provider.group,
);
return call(provider.group);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -328,24 +325,20 @@ class LastSyncOfGroupFamily extends Family<AsyncValue<DateTime?>> {
/// See also [lastSyncOfGroup].
class LastSyncOfGroupProvider extends AutoDisposeStreamProvider<DateTime?> {
/// See also [lastSyncOfGroup].
LastSyncOfGroupProvider(
BangGroup group,
) : this._internal(
(ref) => lastSyncOfGroup(
ref as LastSyncOfGroupRef,
group,
),
from: lastSyncOfGroupProvider,
name: r'lastSyncOfGroupProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$lastSyncOfGroupHash,
dependencies: LastSyncOfGroupFamily._dependencies,
allTransitiveDependencies:
LastSyncOfGroupFamily._allTransitiveDependencies,
group: group,
);
LastSyncOfGroupProvider(BangGroup group)
: this._internal(
(ref) => lastSyncOfGroup(ref as LastSyncOfGroupRef, group),
from: lastSyncOfGroupProvider,
name: r'lastSyncOfGroupProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$lastSyncOfGroupHash,
dependencies: LastSyncOfGroupFamily._dependencies,
allTransitiveDependencies:
LastSyncOfGroupFamily._allTransitiveDependencies,
group: group,
);
LastSyncOfGroupProvider._internal(
super._createNotifier, {
@@ -424,21 +417,15 @@ class BangCountOfGroupFamily extends Family<AsyncValue<int>> {
const BangCountOfGroupFamily();
/// See also [bangCountOfGroup].
BangCountOfGroupProvider call(
BangGroup group,
) {
return BangCountOfGroupProvider(
group,
);
BangCountOfGroupProvider call(BangGroup group) {
return BangCountOfGroupProvider(group);
}
@override
BangCountOfGroupProvider getProviderOverride(
covariant BangCountOfGroupProvider provider,
) {
return call(
provider.group,
);
return call(provider.group);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -459,24 +446,20 @@ class BangCountOfGroupFamily extends Family<AsyncValue<int>> {
/// See also [bangCountOfGroup].
class BangCountOfGroupProvider extends AutoDisposeStreamProvider<int> {
/// See also [bangCountOfGroup].
BangCountOfGroupProvider(
BangGroup group,
) : this._internal(
(ref) => bangCountOfGroup(
ref as BangCountOfGroupRef,
group,
),
from: bangCountOfGroupProvider,
name: r'bangCountOfGroupProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$bangCountOfGroupHash,
dependencies: BangCountOfGroupFamily._dependencies,
allTransitiveDependencies:
BangCountOfGroupFamily._allTransitiveDependencies,
group: group,
);
BangCountOfGroupProvider(BangGroup group)
: this._internal(
(ref) => bangCountOfGroup(ref as BangCountOfGroupRef, group),
from: bangCountOfGroupProvider,
name: r'bangCountOfGroupProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$bangCountOfGroupHash,
dependencies: BangCountOfGroupFamily._dependencies,
allTransitiveDependencies:
BangCountOfGroupFamily._allTransitiveDependencies,
group: group,
);
BangCountOfGroupProvider._internal(
super._createNotifier, {
@@ -535,11 +518,13 @@ mixin BangCountOfGroupRef on AutoDisposeStreamProviderRef<int> {
}
class _BangCountOfGroupProviderElement
extends AutoDisposeStreamProviderElement<int> with BangCountOfGroupRef {
extends AutoDisposeStreamProviderElement<int>
with BangCountOfGroupRef {
_BangCountOfGroupProviderElement(super.provider);
@override
BangGroup get group => (origin as BangCountOfGroupProvider).group;
}
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package
@@ -1,4 +1,8 @@
import 'dart:async';
import 'package:lensai/features/bangs/data/models/bang_data.dart';
import 'package:lensai/features/bangs/data/providers.dart';
import 'package:lensai/features/bangs/domain/providers/bangs.dart';
import 'package:lensai/features/bangs/domain/repositories/data.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
@@ -6,6 +10,8 @@ part 'search.g.dart';
@Riverpod()
class BangSearch extends _$BangSearch {
late StreamController<List<BangData>> _streamController;
Future<Uri> triggerBangSearch(BangData bang, String searchQuery) async {
final bangDataNotifier = ref.read(bangDataRepositoryProvider.notifier);
@@ -19,6 +25,52 @@ class BangSearch extends _$BangSearch {
return bang.getUrl(searchQuery);
}
Future<void> search(String input) async {
if (input.isNotEmpty) {
await ref.read(bangDatabaseProvider).bangDao.queryBangs(input).get().then(
(value) {
if (!_streamController.isClosed) {
_streamController.add(value);
}
},
);
}
}
@override
void build() {}
Stream<List<BangData>> build() {
_streamController = StreamController();
ref.onDispose(() async {
await _streamController.close();
});
return _streamController.stream;
}
}
@Riverpod()
class SeamlessBangProvider extends _$SeamlessBangProvider {
bool _hasSearch = false;
void search(String input) {
if (input.isNotEmpty) {
if (!_hasSearch) {
_hasSearch = true;
ref.invalidateSelf();
}
unawaited(ref.read(bangSearchProvider.notifier).search(input));
} else if (_hasSearch) {
_hasSearch = false;
ref.invalidateSelf();
}
}
@override
AsyncValue<List<BangData>> build() {
return _hasSearch
? ref.watch(bangSearchProvider)
: ref.watch(frequentBangListProvider);
}
}
@@ -6,20 +6,43 @@ part of 'search.dart';
// RiverpodGenerator
// **************************************************************************
String _$bangSearchHash() => r'a9bc5efc6e0df7b64bb648623f65911373a8e8e4';
String _$bangSearchHash() => r'ff7035d269041c6415f2a2afb0a71ef67d3b9841';
/// See also [BangSearch].
@ProviderFor(BangSearch)
final bangSearchProvider =
AutoDisposeNotifierProvider<BangSearch, void>.internal(
BangSearch.new,
name: r'bangSearchProvider',
AutoDisposeStreamNotifierProvider<BangSearch, List<BangData>>.internal(
BangSearch.new,
name: r'bangSearchProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$bangSearchHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$BangSearch = AutoDisposeStreamNotifier<List<BangData>>;
String _$seamlessBangProviderHash() =>
r'c4c0b452c94ba447be5b02dfef5bc16148cc3dc7';
/// See also [SeamlessBangProvider].
@ProviderFor(SeamlessBangProvider)
final seamlessBangProviderProvider = AutoDisposeNotifierProvider<
SeamlessBangProvider,
AsyncValue<List<BangData>>
>.internal(
SeamlessBangProvider.new,
name: r'seamlessBangProviderProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$bangSearchHash,
const bool.fromEnvironment('dart.vm.product')
? null
: _$seamlessBangProviderHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$BangSearch = AutoDisposeNotifier<void>;
typedef _$SeamlessBangProvider =
AutoDisposeNotifier<AsyncValue<List<BangData>>>;
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package
@@ -13,14 +13,15 @@ String _$bangDataRepositoryHash() =>
@ProviderFor(BangDataRepository)
final bangDataRepositoryProvider =
NotifierProvider<BangDataRepository, void>.internal(
BangDataRepository.new,
name: r'bangDataRepositoryProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$bangDataRepositoryHash,
dependencies: null,
allTransitiveDependencies: null,
);
BangDataRepository.new,
name: r'bangDataRepositoryProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$bangDataRepositoryHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$BangDataRepository = Notifier<void>;
// ignore_for_file: type=lint
@@ -1,62 +0,0 @@
import 'dart:async';
import 'package:lensai/features/bangs/data/models/bang_data.dart';
import 'package:lensai/features/bangs/data/providers.dart';
import 'package:lensai/features/bangs/domain/providers/bangs.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'search.g.dart';
@Riverpod()
class BangSearch extends _$BangSearch {
late StreamController<List<BangData>> _streamController;
Future<void> search(String input) async {
if (input.isNotEmpty) {
await ref.read(bangDatabaseProvider).bangDao.queryBangs(input).get().then(
(value) {
if (!_streamController.isClosed) {
_streamController.add(value);
}
},
);
}
}
@override
Stream<List<BangData>> build() {
_streamController = StreamController();
ref.onDispose(() async {
await _streamController.close();
});
return _streamController.stream;
}
}
@Riverpod()
class SeamlessBangProvider extends _$SeamlessBangProvider {
bool _hasSearch = false;
void search(String input) {
if (input.isNotEmpty) {
if (!_hasSearch) {
_hasSearch = true;
ref.invalidateSelf();
}
unawaited(ref.read(bangSearchProvider.notifier).search(input));
} else if (_hasSearch) {
_hasSearch = false;
ref.invalidateSelf();
}
}
@override
AsyncValue<List<BangData>> build() {
return _hasSearch
? ref.watch(bangSearchProvider)
: ref.watch(frequentBangListProvider);
}
}
@@ -1,43 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'search.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$bangSearchHash() => r'abf9ff5badf2ecfbcbde148fd2c849beac83bec4';
/// See also [BangSearch].
@ProviderFor(BangSearch)
final bangSearchProvider =
AutoDisposeStreamNotifierProvider<BangSearch, List<BangData>>.internal(
BangSearch.new,
name: r'bangSearchProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$bangSearchHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$BangSearch = AutoDisposeStreamNotifier<List<BangData>>;
String _$seamlessBangProviderHash() =>
r'c4c0b452c94ba447be5b02dfef5bc16148cc3dc7';
/// See also [SeamlessBangProvider].
@ProviderFor(SeamlessBangProvider)
final seamlessBangProviderProvider = AutoDisposeNotifierProvider<
SeamlessBangProvider, AsyncValue<List<BangData>>>.internal(
SeamlessBangProvider.new,
name: r'seamlessBangProviderProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$seamlessBangProviderHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$SeamlessBangProvider
= AutoDisposeNotifier<AsyncValue<List<BangData>>>;
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package
@@ -13,14 +13,15 @@ String _$bangSyncRepositoryHash() =>
@ProviderFor(BangSyncRepository)
final bangSyncRepositoryProvider =
NotifierProvider<BangSyncRepository, void>.internal(
BangSyncRepository.new,
name: r'bangSyncRepositoryProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$bangSyncRepositoryHash,
dependencies: null,
allTransitiveDependencies: null,
);
BangSyncRepository.new,
name: r'bangSyncRepositoryProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$bangSyncRepositoryHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$BangSyncRepository = Notifier<void>;
// ignore_for_file: type=lint
@@ -5,7 +5,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/features/bangs/domain/repositories/search.dart';
import 'package:lensai/features/bangs/domain/providers/search.dart';
import 'package:lensai/features/bangs/presentation/widgets/bang_details.dart';
import 'package:lensai/features/geckoview/features/browser/domain/providers.dart';
import 'package:lensai/features/user/domain/providers.dart';
@@ -26,7 +26,7 @@ class BangSearchScreen extends HookConsumerWidget {
text: initialSearchText,
);
useListenableCallback(textEditingController, () async {
useListenableCallback(textEditingController, () {
unawaited(
ref
.read(bangSearchProvider.notifier)
@@ -4,7 +4,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/core/routing/routes.dart';
import 'package:lensai/features/bangs/data/models/bang_data.dart';
import 'package:lensai/features/geckoview/domain/repositories/tab.dart';
import 'package:lensai/presentation/widgets/bang_icon.dart';
import 'package:lensai/presentation/widgets/url_icon.dart';
class BangDetails extends HookConsumerWidget {
final BangData bangData;
@@ -12,8 +12,8 @@ import 'package:lensai/features/geckoview/features/search/domain/providers/searc
import 'package:lensai/features/geckoview/features/search/presentation/widgets/search_field.dart';
import 'package:lensai/features/geckoview/features/search/presentation/widgets/search_modules/search_suggestions.dart';
import 'package:lensai/presentation/hooks/listenable_callback.dart';
import 'package:lensai/presentation/widgets/bang_icon.dart';
import 'package:lensai/presentation/widgets/selectable_chips.dart';
import 'package:lensai/presentation/widgets/url_icon.dart';
class SiteSearch extends HookConsumerWidget {
final String domain;
@@ -33,7 +33,7 @@ class SiteSearch extends HookConsumerWidget {
final searchTextController = useTextEditingController();
useListenableCallback(searchTextController, () async {
useListenableCallback(searchTextController, () {
ref
.read(searchSuggestionsProvider().notifier)
.addQuery(searchTextController.text);