increase min sdk and apply new formatter
This commit is contained in:
@@ -95,13 +95,9 @@ class BangDao extends DatabaseAccessor<BangDatabase> with _$BangDaoMixin {
|
||||
final ftsQuery = db.buildFtsQuery(searchString);
|
||||
|
||||
if (ftsQuery.isNotEmpty) {
|
||||
return db.queryBangs(
|
||||
query: ftsQuery,
|
||||
);
|
||||
return db.queryBangs(query: ftsQuery);
|
||||
} else {
|
||||
return db.queryBangsBasic(
|
||||
query: db.buildLikeQuery(searchString),
|
||||
);
|
||||
return db.queryBangsBasic(query: db.buildLikeQuery(searchString));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,19 +9,17 @@ class SyncDao extends DatabaseAccessor<BangDatabase> with _$SyncDaoMixin {
|
||||
SyncDao(super.db);
|
||||
|
||||
SingleOrNullSelectable<DateTime?> lastSyncOfGroup(BangGroup group) {
|
||||
final query = selectOnly(db.bangSync)
|
||||
..addColumns([db.bangSync.lastSync])
|
||||
..where(db.bangSync.group.equalsValue(group));
|
||||
final query =
|
||||
selectOnly(db.bangSync)
|
||||
..addColumns([db.bangSync.lastSync])
|
||||
..where(db.bangSync.group.equalsValue(group));
|
||||
|
||||
return query.map((row) => row.read(db.bangSync.lastSync));
|
||||
}
|
||||
|
||||
Future<void> upsertLastSyncOfGroup(BangGroup group, DateTime lastSync) {
|
||||
return db.bangSync.insertOne(
|
||||
BangSyncCompanion.insert(
|
||||
group: Value(group),
|
||||
lastSync: lastSync,
|
||||
),
|
||||
BangSyncCompanion.insert(group: Value(group), lastSync: lastSync),
|
||||
onConflict: DoUpdate(
|
||||
(old) => BangSyncCompanion.custom(lastSync: Variable(lastSync)),
|
||||
),
|
||||
@@ -33,11 +31,9 @@ class SyncDao extends DatabaseAccessor<BangDatabase> with _$SyncDaoMixin {
|
||||
}
|
||||
|
||||
Future<void> replaceBangs(Iterable<Bang> bangs) {
|
||||
return batch(
|
||||
(batch) {
|
||||
batch.replaceAll(db.bang, bangs);
|
||||
},
|
||||
);
|
||||
return batch((batch) {
|
||||
batch.replaceAll(db.bang, bangs);
|
||||
});
|
||||
}
|
||||
|
||||
Future<int> deleteBangs(Iterable<String> triggers) {
|
||||
@@ -50,36 +46,34 @@ class SyncDao extends DatabaseAccessor<BangDatabase> with _$SyncDaoMixin {
|
||||
required Iterable<Bang> remoteBangs,
|
||||
required DateTime syncTime,
|
||||
}) async {
|
||||
final remoteBangMap =
|
||||
Map.fromEntries(remoteBangs.map((e) => MapEntry(e.trigger, e)));
|
||||
final localBangMap =
|
||||
await db.bangDao.getBangList(groups: [group]).get().then(
|
||||
(bangs) =>
|
||||
Map.fromEntries(bangs.map((e) => MapEntry(e.trigger, e))),
|
||||
);
|
||||
final remoteBangMap = Map.fromEntries(
|
||||
remoteBangs.map((e) => MapEntry(e.trigger, e)),
|
||||
);
|
||||
final localBangMap = await db.bangDao
|
||||
.getBangList(groups: [group])
|
||||
.get()
|
||||
.then(
|
||||
(bangs) => Map.fromEntries(bangs.map((e) => MapEntry(e.trigger, e))),
|
||||
);
|
||||
|
||||
final remoteBangTriggers = remoteBangMap.keys.toSet();
|
||||
final localBangTriggers = localBangMap.keys.toSet();
|
||||
|
||||
final removedBangs = localBangTriggers.difference(remoteBangTriggers);
|
||||
final addedBangs = remoteBangTriggers.difference(localBangTriggers).map(
|
||||
(e) => remoteBangMap[e]!,
|
||||
);
|
||||
final addedBangs = remoteBangTriggers
|
||||
.difference(localBangTriggers)
|
||||
.map((e) => remoteBangMap[e]!);
|
||||
|
||||
final changedBangs = remoteBangTriggers
|
||||
.intersection(localBangTriggers)
|
||||
.where((e) => remoteBangMap[e] != localBangMap[e])
|
||||
.map(
|
||||
(e) => remoteBangMap[e]!,
|
||||
);
|
||||
.map((e) => remoteBangMap[e]!);
|
||||
|
||||
await db.transaction(
|
||||
() async {
|
||||
await deleteBangs(removedBangs);
|
||||
await insertBangs(addedBangs);
|
||||
await replaceBangs(changedBangs);
|
||||
await upsertLastSyncOfGroup(group, syncTime);
|
||||
},
|
||||
);
|
||||
await db.transaction(() async {
|
||||
await deleteBangs(removedBangs);
|
||||
await insertBangs(addedBangs);
|
||||
await replaceBangs(changedBangs);
|
||||
await upsertLastSyncOfGroup(group, syncTime);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,10 +9,7 @@ import 'package:lensai/features/search/domain/fts_tokenizer.dart';
|
||||
|
||||
part 'database.g.dart';
|
||||
|
||||
@DriftDatabase(
|
||||
include: {'database.drift'},
|
||||
daos: [BangDao, SyncDao],
|
||||
)
|
||||
@DriftDatabase(include: {'database.drift'}, daos: [BangDao, SyncDao])
|
||||
class BangDatabase extends _$BangDatabase with PrefixQueryBuilderMixin {
|
||||
@override
|
||||
final int schemaVersion = 1;
|
||||
@@ -24,10 +21,10 @@ class BangDatabase extends _$BangDatabase with PrefixQueryBuilderMixin {
|
||||
|
||||
@override
|
||||
MigrationStrategy get migration => MigrationStrategy(
|
||||
beforeOpen: (details) async {
|
||||
await customStatement('PRAGMA foreign_keys = ON;');
|
||||
},
|
||||
);
|
||||
beforeOpen: (details) async {
|
||||
await customStatement('PRAGMA foreign_keys = ON;');
|
||||
},
|
||||
);
|
||||
|
||||
BangDatabase(super.e);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -8,9 +8,7 @@ import 'package:lensai/features/bangs/data/database/database.dart'
|
||||
part 'bang.g.dart';
|
||||
|
||||
enum BangGroup {
|
||||
general(
|
||||
'https://raw.githubusercontent.com/FaFre/bangs/main/data/bangs.json',
|
||||
),
|
||||
general('https://raw.githubusercontent.com/FaFre/bangs/main/data/bangs.json'),
|
||||
assistant(
|
||||
'https://raw.githubusercontent.com/FaFre/bangs/main/data/assistant_bangs.json',
|
||||
),
|
||||
@@ -90,16 +88,19 @@ class Bang with FastEquatable implements Insertable<Bang> {
|
||||
}
|
||||
|
||||
Uri getUrl(String? query) {
|
||||
final url = (query != null)
|
||||
? urlTemplate.replaceAll(_templateQueryPlaceholder, formatQuery(query))
|
||||
: urlTemplate;
|
||||
final url =
|
||||
(query != null)
|
||||
? urlTemplate.replaceAll(
|
||||
_templateQueryPlaceholder,
|
||||
formatQuery(query),
|
||||
)
|
||||
: urlTemplate;
|
||||
|
||||
var template = Uri.parse(url);
|
||||
if (!template.hasScheme || template.origin.isEmpty) {
|
||||
template = Uri.https(domain).replace(
|
||||
path: template.path,
|
||||
query: template.query,
|
||||
);
|
||||
template = Uri.https(
|
||||
domain,
|
||||
).replace(path: template.path, query: template.query);
|
||||
}
|
||||
|
||||
return template;
|
||||
@@ -133,15 +134,15 @@ class Bang with FastEquatable implements Insertable<Bang> {
|
||||
|
||||
@override
|
||||
List<Object?> get hashParameters => [
|
||||
group,
|
||||
websiteName,
|
||||
domain,
|
||||
trigger,
|
||||
urlTemplate,
|
||||
category,
|
||||
subCategory,
|
||||
format,
|
||||
];
|
||||
group,
|
||||
websiteName,
|
||||
domain,
|
||||
trigger,
|
||||
urlTemplate,
|
||||
category,
|
||||
subCategory,
|
||||
format,
|
||||
];
|
||||
|
||||
@override
|
||||
Map<String, Expression<Object>> toColumns(bool nullToAbsent) {
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -29,9 +29,9 @@ class BangData extends Bang {
|
||||
|
||||
@override
|
||||
List<Object?> get hashParameters => [
|
||||
...super.hashParameters,
|
||||
frequency,
|
||||
lastUsed,
|
||||
icon,
|
||||
];
|
||||
...super.hashParameters,
|
||||
frequency,
|
||||
lastUsed,
|
||||
icon,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -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,9 +15,5 @@ class SearchHistoryEntry with FastEquatable {
|
||||
bool get cacheHash => true;
|
||||
|
||||
@override
|
||||
List<Object?> get hashParameters => [
|
||||
searchQuery,
|
||||
trigger,
|
||||
searchDate,
|
||||
];
|
||||
List<Object?> get hashParameters => [searchQuery, trigger, searchDate];
|
||||
}
|
||||
|
||||
@@ -19,25 +19,22 @@ class BangSourceService extends _$BangSourceService {
|
||||
}
|
||||
|
||||
Future<Result<List<Bang>>> getBangs(Uri url, BangGroup? group) async {
|
||||
return Result.fromAsync(
|
||||
() async {
|
||||
final response = await _client.get(url);
|
||||
return await compute(
|
||||
(args) => jsonDecode(utf8.decode(args[0])) as List,
|
||||
[response.bodyBytes],
|
||||
).then(
|
||||
(json) => json.map((e) {
|
||||
var bang = Bang.fromJson(e as Map<String, dynamic>);
|
||||
return Result.fromAsync(() async {
|
||||
final response = await _client.get(url);
|
||||
return await compute((args) => jsonDecode(utf8.decode(args[0])) as List, [
|
||||
response.bodyBytes,
|
||||
]).then(
|
||||
(json) =>
|
||||
json.map((e) {
|
||||
var bang = Bang.fromJson(e as Map<String, dynamic>);
|
||||
|
||||
if (group != null) {
|
||||
bang = bang.copyWith.group(group);
|
||||
}
|
||||
if (group != null) {
|
||||
bang = bang.copyWith.group(group);
|
||||
}
|
||||
|
||||
return bang;
|
||||
}).toList(),
|
||||
);
|
||||
},
|
||||
exceptionHandler: handleHttpError,
|
||||
);
|
||||
return bang;
|
||||
}).toList(),
|
||||
);
|
||||
}, exceptionHandler: handleHttpError);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,14 +12,15 @@ String _$bangSourceServiceHash() => r'2f734d563fa20de306a72013526ef1f72f910fe1';
|
||||
@ProviderFor(BangSourceService)
|
||||
final bangSourceServiceProvider =
|
||||
AutoDisposeNotifierProvider<BangSourceService, void>.internal(
|
||||
BangSourceService.new,
|
||||
name: r'bangSourceServiceProvider',
|
||||
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$bangSourceServiceHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
BangSourceService.new,
|
||||
name: r'bangSourceServiceProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$bangSourceServiceHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
typedef _$BangSourceService = AutoDisposeNotifier<void>;
|
||||
// ignore_for_file: type=lint
|
||||
|
||||
@@ -34,7 +34,8 @@ Stream<List<BangData>> bangDataList(
|
||||
String? domain,
|
||||
({String category, String? subCategory})? categoryFilter,
|
||||
bool? orderMostFrequentFirst,
|
||||
})? filter,
|
||||
})?
|
||||
filter,
|
||||
}) {
|
||||
final repository = ref.watch(bangDataRepositoryProvider.notifier);
|
||||
return repository.watchBangs(
|
||||
@@ -58,19 +59,13 @@ Stream<List<SearchHistoryEntry>> searchHistory(Ref ref) {
|
||||
}
|
||||
|
||||
@Riverpod()
|
||||
Stream<DateTime?> lastSyncOfGroup(
|
||||
Ref ref,
|
||||
BangGroup group,
|
||||
) {
|
||||
Stream<DateTime?> lastSyncOfGroup(Ref ref, BangGroup group) {
|
||||
final repository = ref.watch(bangSyncRepositoryProvider.notifier);
|
||||
return repository.watchLastSyncOfGroup(group);
|
||||
}
|
||||
|
||||
@Riverpod()
|
||||
Stream<int> bangCountOfGroup(
|
||||
Ref ref,
|
||||
BangGroup group,
|
||||
) {
|
||||
Stream<int> bangCountOfGroup(Ref ref, BangGroup group) {
|
||||
final repository = ref.watch(bangDataRepositoryProvider.notifier);
|
||||
return repository.watchBangCount(group);
|
||||
}
|
||||
|
||||
@@ -39,21 +39,13 @@ class BangDataFamily extends Family<AsyncValue<BangData?>> {
|
||||
const BangDataFamily();
|
||||
|
||||
/// See also [bangData].
|
||||
BangDataProvider call(
|
||||
String? trigger,
|
||||
) {
|
||||
return BangDataProvider(
|
||||
trigger,
|
||||
);
|
||||
BangDataProvider call(String? trigger) {
|
||||
return BangDataProvider(trigger);
|
||||
}
|
||||
|
||||
@override
|
||||
BangDataProvider getProviderOverride(
|
||||
covariant BangDataProvider provider,
|
||||
) {
|
||||
return call(
|
||||
provider.trigger,
|
||||
);
|
||||
BangDataProvider getProviderOverride(covariant BangDataProvider provider) {
|
||||
return call(provider.trigger);
|
||||
}
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
||||
@@ -74,23 +66,19 @@ class BangDataFamily extends Family<AsyncValue<BangData?>> {
|
||||
/// See also [bangData].
|
||||
class BangDataProvider extends AutoDisposeStreamProvider<BangData?> {
|
||||
/// See also [bangData].
|
||||
BangDataProvider(
|
||||
String? trigger,
|
||||
) : this._internal(
|
||||
(ref) => bangData(
|
||||
ref as BangDataRef,
|
||||
trigger,
|
||||
),
|
||||
from: bangDataProvider,
|
||||
name: r'bangDataProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$bangDataHash,
|
||||
dependencies: BangDataFamily._dependencies,
|
||||
allTransitiveDependencies: BangDataFamily._allTransitiveDependencies,
|
||||
trigger: trigger,
|
||||
);
|
||||
BangDataProvider(String? trigger)
|
||||
: this._internal(
|
||||
(ref) => bangData(ref as BangDataRef, trigger),
|
||||
from: bangDataProvider,
|
||||
name: r'bangDataProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$bangDataHash,
|
||||
dependencies: BangDataFamily._dependencies,
|
||||
allTransitiveDependencies: BangDataFamily._allTransitiveDependencies,
|
||||
trigger: trigger,
|
||||
);
|
||||
|
||||
BangDataProvider._internal(
|
||||
super._createNotifier, {
|
||||
@@ -149,7 +137,8 @@ mixin BangDataRef on AutoDisposeStreamProviderRef<BangData?> {
|
||||
}
|
||||
|
||||
class _BangDataProviderElement
|
||||
extends AutoDisposeStreamProviderElement<BangData?> with BangDataRef {
|
||||
extends AutoDisposeStreamProviderElement<BangData?>
|
||||
with BangDataRef {
|
||||
_BangDataProviderElement(super.provider);
|
||||
|
||||
@override
|
||||
@@ -164,9 +153,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,
|
||||
);
|
||||
@@ -180,19 +170,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 _$bangDataListHash() => r'cd034fdf046b156ac452edd0857ac054ab477917';
|
||||
|
||||
/// See also [bangDataList].
|
||||
@@ -210,21 +201,18 @@ class BangDataListFamily extends Family<AsyncValue<List<BangData>>> {
|
||||
({String category, String? subCategory})? categoryFilter,
|
||||
String? domain,
|
||||
Iterable<BangGroup>? groups,
|
||||
bool? orderMostFrequentFirst
|
||||
})? filter,
|
||||
bool? orderMostFrequentFirst,
|
||||
})?
|
||||
filter,
|
||||
}) {
|
||||
return BangDataListProvider(
|
||||
filter: filter,
|
||||
);
|
||||
return BangDataListProvider(filter: filter);
|
||||
}
|
||||
|
||||
@override
|
||||
BangDataListProvider getProviderOverride(
|
||||
covariant BangDataListProvider provider,
|
||||
) {
|
||||
return call(
|
||||
filter: provider.filter,
|
||||
);
|
||||
return call(filter: provider.filter);
|
||||
}
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
||||
@@ -250,24 +238,22 @@ class BangDataListProvider extends AutoDisposeStreamProvider<List<BangData>> {
|
||||
({String category, String? subCategory})? categoryFilter,
|
||||
String? domain,
|
||||
Iterable<BangGroup>? groups,
|
||||
bool? orderMostFrequentFirst
|
||||
})? filter,
|
||||
bool? orderMostFrequentFirst,
|
||||
})?
|
||||
filter,
|
||||
}) : this._internal(
|
||||
(ref) => bangDataList(
|
||||
ref as BangDataListRef,
|
||||
filter: filter,
|
||||
),
|
||||
from: bangDataListProvider,
|
||||
name: r'bangDataListProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$bangDataListHash,
|
||||
dependencies: BangDataListFamily._dependencies,
|
||||
allTransitiveDependencies:
|
||||
BangDataListFamily._allTransitiveDependencies,
|
||||
filter: filter,
|
||||
);
|
||||
(ref) => bangDataList(ref as BangDataListRef, filter: filter),
|
||||
from: bangDataListProvider,
|
||||
name: r'bangDataListProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$bangDataListHash,
|
||||
dependencies: BangDataListFamily._dependencies,
|
||||
allTransitiveDependencies:
|
||||
BangDataListFamily._allTransitiveDependencies,
|
||||
filter: filter,
|
||||
);
|
||||
|
||||
BangDataListProvider._internal(
|
||||
super._createNotifier, {
|
||||
@@ -283,8 +269,9 @@ class BangDataListProvider extends AutoDisposeStreamProvider<List<BangData>> {
|
||||
({String category, String? subCategory})? categoryFilter,
|
||||
String? domain,
|
||||
Iterable<BangGroup>? groups,
|
||||
bool? orderMostFrequentFirst
|
||||
})? filter;
|
||||
bool? orderMostFrequentFirst,
|
||||
})?
|
||||
filter;
|
||||
|
||||
@override
|
||||
Override overrideWith(
|
||||
@@ -331,8 +318,9 @@ mixin BangDataListRef on AutoDisposeStreamProviderRef<List<BangData>> {
|
||||
({String category, String? subCategory})? categoryFilter,
|
||||
String? domain,
|
||||
Iterable<BangGroup>? groups,
|
||||
bool? orderMostFrequentFirst
|
||||
})? get filter;
|
||||
bool? orderMostFrequentFirst,
|
||||
})?
|
||||
get filter;
|
||||
}
|
||||
|
||||
class _BangDataListProviderElement
|
||||
@@ -345,8 +333,9 @@ class _BangDataListProviderElement
|
||||
({String category, String? subCategory})? categoryFilter,
|
||||
String? domain,
|
||||
Iterable<BangGroup>? groups,
|
||||
bool? orderMostFrequentFirst
|
||||
})? get filter => (origin as BangDataListProvider).filter;
|
||||
bool? orderMostFrequentFirst,
|
||||
})?
|
||||
get filter => (origin as BangDataListProvider).filter;
|
||||
}
|
||||
|
||||
String _$frequentBangDataListHash() =>
|
||||
@@ -356,14 +345,15 @@ String _$frequentBangDataListHash() =>
|
||||
@ProviderFor(frequentBangDataList)
|
||||
final frequentBangDataListProvider =
|
||||
AutoDisposeStreamProvider<List<BangData>>.internal(
|
||||
frequentBangDataList,
|
||||
name: r'frequentBangDataListProvider',
|
||||
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$frequentBangDataListHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
frequentBangDataList,
|
||||
name: r'frequentBangDataListProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$frequentBangDataListHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
@@ -374,19 +364,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].
|
||||
@@ -399,21 +390,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;
|
||||
@@ -434,24 +419,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, {
|
||||
@@ -530,21 +511,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;
|
||||
@@ -565,24 +540,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, {
|
||||
@@ -641,11 +612,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
|
||||
|
||||
@@ -39,24 +39,15 @@ class TriggerBangSearchFamily extends Family<AsyncValue<Uri>> {
|
||||
const TriggerBangSearchFamily();
|
||||
|
||||
/// See also [triggerBangSearch].
|
||||
TriggerBangSearchProvider call(
|
||||
BangData bang,
|
||||
String searchQuery,
|
||||
) {
|
||||
return TriggerBangSearchProvider(
|
||||
bang,
|
||||
searchQuery,
|
||||
);
|
||||
TriggerBangSearchProvider call(BangData bang, String searchQuery) {
|
||||
return TriggerBangSearchProvider(bang, searchQuery);
|
||||
}
|
||||
|
||||
@override
|
||||
TriggerBangSearchProvider getProviderOverride(
|
||||
covariant TriggerBangSearchProvider provider,
|
||||
) {
|
||||
return call(
|
||||
provider.bang,
|
||||
provider.searchQuery,
|
||||
);
|
||||
return call(provider.bang, provider.searchQuery);
|
||||
}
|
||||
|
||||
static const Iterable<ProviderOrFamily>? _dependencies = null;
|
||||
@@ -77,27 +68,22 @@ class TriggerBangSearchFamily extends Family<AsyncValue<Uri>> {
|
||||
/// See also [triggerBangSearch].
|
||||
class TriggerBangSearchProvider extends AutoDisposeFutureProvider<Uri> {
|
||||
/// See also [triggerBangSearch].
|
||||
TriggerBangSearchProvider(
|
||||
BangData bang,
|
||||
String searchQuery,
|
||||
) : this._internal(
|
||||
(ref) => triggerBangSearch(
|
||||
ref as TriggerBangSearchRef,
|
||||
bang,
|
||||
searchQuery,
|
||||
),
|
||||
from: triggerBangSearchProvider,
|
||||
name: r'triggerBangSearchProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$triggerBangSearchHash,
|
||||
dependencies: TriggerBangSearchFamily._dependencies,
|
||||
allTransitiveDependencies:
|
||||
TriggerBangSearchFamily._allTransitiveDependencies,
|
||||
bang: bang,
|
||||
searchQuery: searchQuery,
|
||||
);
|
||||
TriggerBangSearchProvider(BangData bang, String searchQuery)
|
||||
: this._internal(
|
||||
(ref) =>
|
||||
triggerBangSearch(ref as TriggerBangSearchRef, bang, searchQuery),
|
||||
from: triggerBangSearchProvider,
|
||||
name: r'triggerBangSearchProvider',
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$triggerBangSearchHash,
|
||||
dependencies: TriggerBangSearchFamily._dependencies,
|
||||
allTransitiveDependencies:
|
||||
TriggerBangSearchFamily._allTransitiveDependencies,
|
||||
bang: bang,
|
||||
searchQuery: searchQuery,
|
||||
);
|
||||
|
||||
TriggerBangSearchProvider._internal(
|
||||
super._createNotifier, {
|
||||
@@ -165,7 +151,8 @@ mixin TriggerBangSearchRef on AutoDisposeFutureProviderRef<Uri> {
|
||||
}
|
||||
|
||||
class _TriggerBangSearchProviderElement
|
||||
extends AutoDisposeFutureProviderElement<Uri> with TriggerBangSearchRef {
|
||||
extends AutoDisposeFutureProviderElement<Uri>
|
||||
with TriggerBangSearchRef {
|
||||
_TriggerBangSearchProviderElement(super.provider);
|
||||
|
||||
@override
|
||||
@@ -173,5 +160,6 @@ class _TriggerBangSearchProviderElement
|
||||
@override
|
||||
String get searchQuery => (origin as TriggerBangSearchProvider).searchQuery;
|
||||
}
|
||||
|
||||
// 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
|
||||
|
||||
@@ -27,11 +27,9 @@ class BangDataRepository extends _$BangDataRepository {
|
||||
}
|
||||
|
||||
Stream<Map<String, List<String>>> watchCategories() {
|
||||
return ref
|
||||
.read(bangDatabaseProvider)
|
||||
.categoriesJson()
|
||||
.watchSingle()
|
||||
.map((json) {
|
||||
return ref.read(bangDatabaseProvider).categoriesJson().watchSingle().map((
|
||||
json,
|
||||
) {
|
||||
final decoded = jsonDecode(json) as Map<String, dynamic>;
|
||||
return decoded.map(
|
||||
(key, value) => MapEntry(key, (value as List<dynamic>).cast()),
|
||||
@@ -43,7 +41,8 @@ class BangDataRepository extends _$BangDataRepository {
|
||||
return ref
|
||||
.read(bangDatabaseProvider)
|
||||
.bangDao
|
||||
.getBangCount(groups: [group]).watchSingle();
|
||||
.getBangCount(groups: [group])
|
||||
.watchSingle();
|
||||
}
|
||||
|
||||
Stream<List<BangData>> watchBangs({
|
||||
@@ -94,12 +93,10 @@ 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.evictHistoryEntries(limit: maxEntryCount);
|
||||
},
|
||||
);
|
||||
return db.transaction(() async {
|
||||
await db.bangDao.addSearchEntry(trigger, searchQuery);
|
||||
await db.evictHistoryEntries(limit: maxEntryCount);
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> removeSearchEntry(String searchQuery) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -12,13 +12,15 @@ String _$bangSearchHash() => r'abf9ff5badf2ecfbcbde148fd2c849beac83bec4';
|
||||
@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,
|
||||
);
|
||||
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() =>
|
||||
@@ -27,17 +29,20 @@ String _$seamlessBangProviderHash() =>
|
||||
/// See also [SeamlessBangProvider].
|
||||
@ProviderFor(SeamlessBangProvider)
|
||||
final seamlessBangProviderProvider = AutoDisposeNotifierProvider<
|
||||
SeamlessBangProvider, AsyncValue<List<BangData>>>.internal(
|
||||
SeamlessBangProvider,
|
||||
AsyncValue<List<BangData>>
|
||||
>.internal(
|
||||
SeamlessBangProvider.new,
|
||||
name: r'seamlessBangProviderProvider',
|
||||
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$seamlessBangProviderHash,
|
||||
debugGetCreateSourceHash:
|
||||
const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$seamlessBangProviderHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
typedef _$SeamlessBangProvider
|
||||
= AutoDisposeNotifier<AsyncValue<List<BangData>>>;
|
||||
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
|
||||
|
||||
@@ -29,16 +29,14 @@ class BangSyncRepository extends _$BangSyncRepository {
|
||||
}
|
||||
|
||||
final result = await sourceService.getBangs(url, group);
|
||||
return result.flatMapAsync(
|
||||
(remoteBangs) async {
|
||||
await db.syncDao.syncBangs(
|
||||
group: group,
|
||||
remoteBangs: remoteBangs,
|
||||
syncTime: DateTime.now(),
|
||||
);
|
||||
await db.optimizeFtsIndex();
|
||||
},
|
||||
);
|
||||
return result.flatMapAsync((remoteBangs) async {
|
||||
await db.syncDao.syncBangs(
|
||||
group: group,
|
||||
remoteBangs: remoteBangs,
|
||||
syncTime: DateTime.now(),
|
||||
);
|
||||
await db.optimizeFtsIndex();
|
||||
});
|
||||
}
|
||||
|
||||
Future<Result<void>> syncBangGroup(
|
||||
@@ -47,7 +45,9 @@ class BangSyncRepository extends _$BangSyncRepository {
|
||||
) async {
|
||||
try {
|
||||
return Result.success(
|
||||
await ref.read(bangDatabaseProvider).computeWithDatabase(
|
||||
await ref
|
||||
.read(bangDatabaseProvider)
|
||||
.computeWithDatabase(
|
||||
connect: BangDatabase.new,
|
||||
computation: (db) async {
|
||||
final ref = ProviderContainer();
|
||||
@@ -92,8 +92,10 @@ class BangSyncRepository extends _$BangSyncRepository {
|
||||
|
||||
//Run isolated operations
|
||||
final futures = groups.map(
|
||||
(source) => syncBangGroup(source, syncInterval)
|
||||
.then((result) => MapEntry(source, result)),
|
||||
(source) => syncBangGroup(
|
||||
source,
|
||||
syncInterval,
|
||||
).then((result) => MapEntry(source, result)),
|
||||
);
|
||||
|
||||
return Map.fromEntries(await Future.wait(futures));
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -45,38 +45,43 @@ class BangCategoriesScreen extends HookConsumerWidget {
|
||||
expanded.value = {...expanded.value}..remove(key);
|
||||
}
|
||||
},
|
||||
children: categories.entries
|
||||
.map(
|
||||
(category) => ExpansionPanel(
|
||||
canTapOnHeader: true,
|
||||
isExpanded: expanded.value.contains(category.key),
|
||||
headerBuilder: (context, isExpanded) => ListTile(
|
||||
title: Text(category.key),
|
||||
),
|
||||
body: Padding(
|
||||
padding: const EdgeInsets.only(left: 16.0),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: category.value
|
||||
.map(
|
||||
(subCategory) => ListTile(
|
||||
title: Text(subCategory),
|
||||
onTap: () async {
|
||||
await context.push(
|
||||
BangSubCategoryRoute(
|
||||
category: category.key,
|
||||
subCategory: subCategory,
|
||||
).location,
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
.toList(),
|
||||
children:
|
||||
categories.entries
|
||||
.map(
|
||||
(category) => ExpansionPanel(
|
||||
canTapOnHeader: true,
|
||||
isExpanded: expanded.value.contains(
|
||||
category.key,
|
||||
),
|
||||
headerBuilder:
|
||||
(context, isExpanded) =>
|
||||
ListTile(title: Text(category.key)),
|
||||
body: Padding(
|
||||
padding: const EdgeInsets.only(left: 16.0),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children:
|
||||
category.value
|
||||
.map(
|
||||
(subCategory) => ListTile(
|
||||
title: Text(subCategory),
|
||||
onTap: () async {
|
||||
await context.push(
|
||||
BangSubCategoryRoute(
|
||||
category: category.key,
|
||||
subCategory:
|
||||
subCategory,
|
||||
).location,
|
||||
);
|
||||
},
|
||||
),
|
||||
)
|
||||
.toList(),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
.toList(),
|
||||
)
|
||||
.toList(),
|
||||
);
|
||||
},
|
||||
),
|
||||
@@ -84,12 +89,13 @@ class BangCategoriesScreen extends HookConsumerWidget {
|
||||
},
|
||||
);
|
||||
},
|
||||
error: (error, stackTrace) => Center(
|
||||
child: FailureWidget(
|
||||
title: 'Failed to load Bang Categories',
|
||||
exception: error,
|
||||
),
|
||||
),
|
||||
error:
|
||||
(error, stackTrace) => Center(
|
||||
child: FailureWidget(
|
||||
title: 'Failed to load Bang Categories',
|
||||
exception: error,
|
||||
),
|
||||
),
|
||||
loading: () => const Center(child: CircularProgressIndicator()),
|
||||
),
|
||||
);
|
||||
|
||||
@@ -35,9 +35,7 @@ class BangListScreen extends HookConsumerWidget {
|
||||
return Scaffold(
|
||||
body: CustomScrollView(
|
||||
slivers: [
|
||||
SliverAppBar.medium(
|
||||
title: Text('$category: $subCategory'),
|
||||
),
|
||||
SliverAppBar.medium(title: Text('$category: $subCategory')),
|
||||
bangsAsync.when(
|
||||
data: (bangs) {
|
||||
return SliverList.builder(
|
||||
@@ -53,10 +51,10 @@ class BangListScreen extends HookConsumerWidget {
|
||||
|
||||
if (ref.read(bottomSheetControllerProvider)
|
||||
is! CreateTabSheet) {
|
||||
ref.read(bottomSheetControllerProvider.notifier).show(
|
||||
CreateTabSheet(
|
||||
preferredTool: KagiTool.search,
|
||||
),
|
||||
ref
|
||||
.read(bottomSheetControllerProvider.notifier)
|
||||
.show(
|
||||
CreateTabSheet(preferredTool: KagiTool.search),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -66,17 +64,19 @@ class BangListScreen extends HookConsumerWidget {
|
||||
},
|
||||
);
|
||||
},
|
||||
error: (error, stackTrace) => SliverToBoxAdapter(
|
||||
child: Center(
|
||||
child: FailureWidget(
|
||||
title: 'Failed to load Bangs',
|
||||
exception: error,
|
||||
error:
|
||||
(error, stackTrace) => SliverToBoxAdapter(
|
||||
child: Center(
|
||||
child: FailureWidget(
|
||||
title: 'Failed to load Bangs',
|
||||
exception: error,
|
||||
),
|
||||
),
|
||||
),
|
||||
loading:
|
||||
() => const SliverToBoxAdapter(
|
||||
child: Center(child: CircularProgressIndicator()),
|
||||
),
|
||||
),
|
||||
),
|
||||
loading: () => const SliverToBoxAdapter(
|
||||
child: Center(child: CircularProgressIndicator()),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -22,8 +22,9 @@ class BangSearchScreen extends HookConsumerWidget {
|
||||
final resultsAsync = ref.watch(bangSearchProvider);
|
||||
final incognitoEnabled = ref.watch(incognitoModeEnabledProvider);
|
||||
|
||||
final textEditingController =
|
||||
useTextEditingController(text: initialSearchText);
|
||||
final textEditingController = useTextEditingController(
|
||||
text: initialSearchText,
|
||||
);
|
||||
|
||||
useListenableCallback(textEditingController, () async {
|
||||
unawaited(
|
||||
@@ -57,42 +58,44 @@ class BangSearchScreen extends HookConsumerWidget {
|
||||
),
|
||||
body: resultsAsync.when(
|
||||
skipLoadingOnReload: true,
|
||||
data: (bangs) => FadingScroll(
|
||||
fadingSize: 25,
|
||||
builder: (context, controller) {
|
||||
return ListView.builder(
|
||||
controller: controller,
|
||||
itemCount: bangs.length,
|
||||
itemBuilder: (context, index) {
|
||||
final bang = bangs[index];
|
||||
return BangDetails(
|
||||
bang,
|
||||
onTap: () {
|
||||
ref
|
||||
.read(selectedBangTriggerProvider().notifier)
|
||||
.setTrigger(bang.trigger);
|
||||
data:
|
||||
(bangs) => FadingScroll(
|
||||
fadingSize: 25,
|
||||
builder: (context, controller) {
|
||||
return ListView.builder(
|
||||
controller: controller,
|
||||
itemCount: bangs.length,
|
||||
itemBuilder: (context, index) {
|
||||
final bang = bangs[index];
|
||||
return BangDetails(
|
||||
bang,
|
||||
onTap: () {
|
||||
ref
|
||||
.read(selectedBangTriggerProvider().notifier)
|
||||
.setTrigger(bang.trigger);
|
||||
|
||||
// if (ref.read(bottomSheetControllerProvider)
|
||||
// is! CreateTabSheet) {
|
||||
// ref.read(bottomSheetControllerProvider.notifier).show(
|
||||
// CreateTabSheet(preferredTool: KagiTool.search),
|
||||
// );
|
||||
// }
|
||||
// if (ref.read(bottomSheetControllerProvider)
|
||||
// is! CreateTabSheet) {
|
||||
// ref.read(bottomSheetControllerProvider.notifier).show(
|
||||
// CreateTabSheet(preferredTool: KagiTool.search),
|
||||
// );
|
||||
// }
|
||||
|
||||
// context.go(BrowserRoute().location);
|
||||
context.pop();
|
||||
// context.go(BrowserRoute().location);
|
||||
context.pop();
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
),
|
||||
error: (error, stackTrace) => Center(
|
||||
child: FailureWidget(
|
||||
title: 'Bang Search failed',
|
||||
exception: error,
|
||||
),
|
||||
),
|
||||
),
|
||||
error:
|
||||
(error, stackTrace) => Center(
|
||||
child: FailureWidget(
|
||||
title: 'Bang Search failed',
|
||||
exception: error,
|
||||
),
|
||||
),
|
||||
loading: () => const SizedBox.shrink(),
|
||||
),
|
||||
);
|
||||
|
||||
@@ -63,8 +63,9 @@ class BangDetails extends HookConsumerWidget {
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
FilledButton.tonalIcon(
|
||||
style:
|
||||
const ButtonStyle(visualDensity: VisualDensity.compact),
|
||||
style: const ButtonStyle(
|
||||
visualDensity: VisualDensity.compact,
|
||||
),
|
||||
onPressed: () async {
|
||||
final url = Uri.parse(bangData.getUrl('').origin);
|
||||
|
||||
@@ -79,9 +80,7 @@ class BangDetails extends HookConsumerWidget {
|
||||
label: Text(bangData.domain),
|
||||
icon: const Icon(Icons.open_in_new),
|
||||
),
|
||||
const SizedBox(
|
||||
width: 8,
|
||||
),
|
||||
const SizedBox(width: 8),
|
||||
Expanded(
|
||||
child: Text(
|
||||
'!${bangData.trigger}',
|
||||
|
||||
@@ -30,14 +30,11 @@ class SiteSearch extends HookConsumerWidget {
|
||||
|
||||
final searchTextController = useTextEditingController();
|
||||
|
||||
useListenableCallback(
|
||||
searchTextController,
|
||||
() async {
|
||||
ref
|
||||
.read(searchSuggestionsProvider().notifier)
|
||||
.addQuery(searchTextController.text);
|
||||
},
|
||||
);
|
||||
useListenableCallback(searchTextController, () async {
|
||||
ref
|
||||
.read(searchSuggestionsProvider().notifier)
|
||||
.addQuery(searchTextController.text);
|
||||
});
|
||||
|
||||
final selectedBang = ref.watch(selectedBangDataProvider(domain: domain));
|
||||
|
||||
@@ -73,15 +70,11 @@ class SiteSearch extends HookConsumerWidget {
|
||||
selectedItem: selectedBang,
|
||||
onSelected: (bang) {
|
||||
ref
|
||||
.read(
|
||||
selectedBangTriggerProvider(domain: domain).notifier,
|
||||
)
|
||||
.read(selectedBangTriggerProvider(domain: domain).notifier)
|
||||
.setTrigger(bang.trigger);
|
||||
},
|
||||
onDeleted: (bang) {
|
||||
if (ref.read(
|
||||
selectedBangTriggerProvider(domain: domain),
|
||||
) ==
|
||||
if (ref.read(selectedBangTriggerProvider(domain: domain)) ==
|
||||
bang.trigger) {
|
||||
ref
|
||||
.read(
|
||||
|
||||
Reference in New Issue
Block a user