intermediate
This commit is contained in:
@@ -91,7 +91,7 @@ class BangDao extends DatabaseAccessor<BangDatabase> with _$BangDaoMixin {
|
||||
}
|
||||
|
||||
Selectable<BangData> queryBangs(String searchString) {
|
||||
return db.bangQuery(query: db.buildQuery(searchString));
|
||||
return db.bangQuery(query: db.buildFtsQuery(searchString));
|
||||
}
|
||||
|
||||
// Future<int> upsertBangIcon(String trigger, BrowserIcon icon) async {
|
||||
|
||||
@@ -4,7 +4,7 @@ import 'package:lensai/features/bangs/data/database/daos/sync.dart';
|
||||
import 'package:lensai/features/bangs/data/database/drift/converters/bang_format.dart';
|
||||
import 'package:lensai/features/bangs/data/models/bang.dart';
|
||||
import 'package:lensai/features/bangs/data/models/bang_data.dart';
|
||||
import 'package:lensai/features/query/domain/tokenizer.dart';
|
||||
import 'package:lensai/features/search/domain/fts_tokenizer.dart';
|
||||
|
||||
part 'database.g.dart';
|
||||
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ import 'package:lensai/features/bangs/domain/repositories/sync.dart';
|
||||
import 'package:riverpod/riverpod.dart';
|
||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||
|
||||
part 'providers.g.dart';
|
||||
part 'bangs.g.dart';
|
||||
|
||||
@Riverpod()
|
||||
Stream<BangData?> bangData(Ref ref, String? trigger) {
|
||||
@@ -14,7 +14,7 @@ Stream<BangData?> bangData(Ref ref, String? trigger) {
|
||||
}
|
||||
|
||||
@Riverpod(keepAlive: true)
|
||||
Stream<BangData?> kagiSearchBangData(Ref ref) {
|
||||
Stream<BangData?> defaultSearchBangData(Ref ref) {
|
||||
final repository = ref.watch(bangDataRepositoryProvider.notifier);
|
||||
return repository.watchBang('kagi');
|
||||
}
|
||||
+10
-10
@@ -1,6 +1,6 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'providers.dart';
|
||||
part of 'bangs.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// RiverpodGenerator
|
||||
@@ -156,24 +156,24 @@ class _BangDataProviderElement
|
||||
String? get trigger => (origin as BangDataProvider).trigger;
|
||||
}
|
||||
|
||||
String _$kagiSearchBangDataHash() =>
|
||||
r'0bb5014a7af73ef6f5a36b0545d7a73e7ad0580a';
|
||||
String _$defaultSearchBangDataHash() =>
|
||||
r'b7547084b261ccb1dc02a6c7230fe57f6902dd58';
|
||||
|
||||
/// See also [kagiSearchBangData].
|
||||
@ProviderFor(kagiSearchBangData)
|
||||
final kagiSearchBangDataProvider = StreamProvider<BangData?>.internal(
|
||||
kagiSearchBangData,
|
||||
name: r'kagiSearchBangDataProvider',
|
||||
/// See also [defaultSearchBangData].
|
||||
@ProviderFor(defaultSearchBangData)
|
||||
final defaultSearchBangDataProvider = StreamProvider<BangData?>.internal(
|
||||
defaultSearchBangData,
|
||||
name: r'defaultSearchBangDataProvider',
|
||||
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
|
||||
? null
|
||||
: _$kagiSearchBangDataHash,
|
||||
: _$defaultSearchBangDataHash,
|
||||
dependencies: null,
|
||||
allTransitiveDependencies: null,
|
||||
);
|
||||
|
||||
@Deprecated('Will be removed in 3.0. Use Ref instead')
|
||||
// ignore: unused_element
|
||||
typedef KagiSearchBangDataRef = StreamProviderRef<BangData?>;
|
||||
typedef DefaultSearchBangDataRef = StreamProviderRef<BangData?>;
|
||||
String _$bangCategoriesHash() => r'947fcfd2dffcc7f585c6ed7379d319f4fe72293a';
|
||||
|
||||
/// See also [bangCategories].
|
||||
@@ -3,6 +3,7 @@ import 'dart:async';
|
||||
import 'package:lensai/features/bangs/data/database/database.dart';
|
||||
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';
|
||||
@@ -30,3 +31,29 @@ class BangSearch extends _$BangSearch {
|
||||
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(frequentBangDataListProvider);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,5 +21,23 @@ final bangSearchProvider =
|
||||
);
|
||||
|
||||
typedef _$BangSearch = AutoDisposeStreamNotifier<List<BangData>>;
|
||||
String _$seamlessBangProviderHash() =>
|
||||
r'd2c8e94d6305a6a37cc27f8bc3617521f513e537';
|
||||
|
||||
/// 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
|
||||
|
||||
@@ -4,7 +4,7 @@ import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:lensai/core/routing/routes.dart';
|
||||
import 'package:lensai/features/bangs/domain/providers.dart';
|
||||
import 'package:lensai/features/bangs/domain/providers/bangs.dart';
|
||||
import 'package:lensai/presentation/widgets/failure_widget.dart';
|
||||
|
||||
class BangCategoriesScreen extends HookConsumerWidget {
|
||||
@@ -19,7 +19,7 @@ class BangCategoriesScreen extends HookConsumerWidget {
|
||||
actions: [
|
||||
IconButton(
|
||||
onPressed: () async {
|
||||
await context.push(BangSearchRoute().location);
|
||||
await context.push(const BangSearchRoute().location);
|
||||
},
|
||||
icon: const Icon(Icons.search),
|
||||
),
|
||||
|
||||
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:lensai/core/routing/routes.dart';
|
||||
import 'package:lensai/features/bangs/domain/providers.dart';
|
||||
import 'package:lensai/features/bangs/domain/providers/bangs.dart';
|
||||
import 'package:lensai/features/bangs/presentation/widgets/bang_details.dart';
|
||||
import 'package:lensai/features/geckoview/features/browser/domain/entities/sheet.dart';
|
||||
import 'package:lensai/features/geckoview/features/browser/domain/providers.dart';
|
||||
|
||||
@@ -5,20 +5,18 @@ 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/core/routing/routes.dart';
|
||||
import 'package:lensai/features/bangs/domain/repositories/search.dart';
|
||||
import 'package:lensai/features/bangs/presentation/widgets/bang_details.dart';
|
||||
import 'package:lensai/features/geckoview/features/browser/domain/entities/sheet.dart';
|
||||
import 'package:lensai/features/geckoview/features/browser/domain/providers.dart';
|
||||
import 'package:lensai/features/geckoview/features/controllers/bottom_sheet.dart';
|
||||
import 'package:lensai/features/kagi/data/entities/modes.dart';
|
||||
import 'package:lensai/features/settings/data/models/settings.dart';
|
||||
import 'package:lensai/features/settings/data/repositories/settings_repository.dart';
|
||||
import 'package:lensai/presentation/hooks/listenable_callback.dart';
|
||||
import 'package:lensai/presentation/widgets/failure_widget.dart';
|
||||
|
||||
class BangSearchScreen extends HookConsumerWidget {
|
||||
const BangSearchScreen({super.key});
|
||||
final String? initialSearchText;
|
||||
|
||||
const BangSearchScreen({super.key, this.initialSearchText});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context, WidgetRef ref) {
|
||||
@@ -29,7 +27,8 @@ class BangSearchScreen extends HookConsumerWidget {
|
||||
),
|
||||
);
|
||||
|
||||
final textEditingController = useTextEditingController();
|
||||
final textEditingController =
|
||||
useTextEditingController(text: initialSearchText);
|
||||
|
||||
useListenableCallback(textEditingController, () async {
|
||||
unawaited(
|
||||
@@ -78,14 +77,15 @@ class BangSearchScreen extends HookConsumerWidget {
|
||||
.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.go(BrowserRoute().location);
|
||||
context.pop();
|
||||
},
|
||||
);
|
||||
},
|
||||
|
||||
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
|
||||
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:lensai/features/bangs/data/models/bang_data.dart';
|
||||
import 'package:lensai/features/bangs/domain/providers.dart';
|
||||
import 'package:lensai/features/bangs/domain/providers/bangs.dart';
|
||||
import 'package:skeletonizer/skeletonizer.dart';
|
||||
|
||||
class BangIcon extends HookConsumerWidget {
|
||||
|
||||
@@ -4,9 +4,9 @@ import 'package:flutter_hooks/flutter_hooks.dart';
|
||||
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
|
||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:lensai/features/bangs/data/models/bang_data.dart';
|
||||
import 'package:lensai/features/search/domain/providers/search_suggestions.dart';
|
||||
import 'package:lensai/features/bangs/presentation/widgets/bang_icon.dart';
|
||||
import 'package:lensai/features/geckoview/features/browser/presentation/widgets/speech_to_text_button.dart';
|
||||
import 'package:lensai/features/kagi/domain/repositories/autosuggest.dart';
|
||||
import 'package:lensai/features/settings/data/models/settings.dart';
|
||||
import 'package:lensai/features/settings/data/repositories/settings_repository.dart';
|
||||
import 'package:lensai/presentation/widgets/autocomplete.dart';
|
||||
@@ -36,7 +36,7 @@ class SearchField extends HookConsumerWidget {
|
||||
),
|
||||
);
|
||||
|
||||
final optionsStream = ref.watch(autosuggestRepositoryProvider);
|
||||
final optionsStream = ref.watch(searchSuggestionsProvider());
|
||||
|
||||
final focusNode = useFocusNode();
|
||||
|
||||
@@ -69,7 +69,7 @@ class SearchField extends HookConsumerWidget {
|
||||
},
|
||||
onTextChanged: (textEditingValue) {
|
||||
ref
|
||||
.read(autosuggestRepositoryProvider.notifier)
|
||||
.read(searchSuggestionsProvider().notifier)
|
||||
.addQuery(textEditingValue.text);
|
||||
},
|
||||
fieldViewBuilder: (
|
||||
|
||||
Reference in New Issue
Block a user