improve default search bang fetching

This commit is contained in:
Fabian Freund
2026-04-19 17:07:30 +02:00
parent 94e223ba78
commit f980a94682
6 changed files with 100 additions and 31 deletions
@@ -41,6 +41,21 @@ Stream<BangData?> defaultSearchBangData(Ref ref) {
return repository.watchBang(key);
}
@Riverpod(keepAlive: true)
Future<BangData?> defaultSearchBang(Ref ref) {
final key = ref.watch(
generalSettingsWithDefaultsProvider.select(
(value) => value.defaultSearchProvider,
),
);
if (key == null) {
return Future.value();
}
return ref.read(bangDataRepositoryProvider.notifier).getBang(key);
}
@Riverpod()
Stream<BangData?> bangData(Ref ref, BangKey key) {
final repository = ref.watch(bangDataRepositoryProvider.notifier);
@@ -44,6 +44,44 @@ final class DefaultSearchBangDataProvider
String _$defaultSearchBangDataHash() =>
r'5f43b8989219cf3cb2f5ca65df351b6cb100427f';
@ProviderFor(defaultSearchBang)
final defaultSearchBangProvider = DefaultSearchBangProvider._();
final class DefaultSearchBangProvider
extends
$FunctionalProvider<
AsyncValue<BangData?>,
BangData?,
FutureOr<BangData?>
>
with $FutureModifier<BangData?>, $FutureProvider<BangData?> {
DefaultSearchBangProvider._()
: super(
from: null,
argument: null,
retry: null,
name: r'defaultSearchBangProvider',
isAutoDispose: false,
dependencies: null,
$allTransitiveDependencies: null,
);
@override
String debugGetCreateSourceHash() => _$defaultSearchBangHash();
@$internal
@override
$FutureProviderElement<BangData?> $createElement($ProviderPointer pointer) =>
$FutureProviderElement(pointer);
@override
FutureOr<BangData?> create(Ref ref) {
return defaultSearchBang(ref);
}
}
String _$defaultSearchBangHash() => r'39c5b18231a56763e2c620cae5f2889f7c95f6ee';
@ProviderFor(bangData)
final bangDataProvider = BangDataFamily._();
@@ -64,36 +64,54 @@ GeckoSelectionActionService selectionActionService(Ref ref) {
}
}),
DefaultSearchAction((text) async {
if (ref.mounted) {
final defaultSearchBang = await ref.read(
defaultSearchBangDataProvider.future,
);
if (!ref.mounted) return;
if (ref.mounted && defaultSearchBang != null) {
final currentTab = ref.read(
tabStatesProvider,
)[ref.read(selectedTabProvider)];
final searchBang = await ref.read(defaultSearchBangProvider.future);
final tabMode =
currentTab?.tabMode ??
TabMode.fromTabType(
ref
.read(generalSettingsWithDefaultsProvider)
.effectiveDefaultCreateTabType,
);
if (!ref.mounted) return;
await ref
.read(tabRepositoryProvider.notifier)
.addTab(
url: defaultSearchBang.getTemplateUrl(text),
parentId: currentTab?.id,
tabMode: tabMode,
selectTab: true,
);
} else {
logger.e('No default search bang found');
}
if (searchBang != null) {
final currentTab = ref.read(
tabStatesProvider,
)[ref.read(selectedTabProvider)];
final tabMode =
currentTab?.tabMode ??
TabMode.fromTabType(
ref
.read(generalSettingsWithDefaultsProvider)
.effectiveDefaultCreateTabType,
);
await ref
.read(tabRepositoryProvider.notifier)
.addTab(
url: searchBang.getTemplateUrl(text),
parentId: currentTab?.id,
tabMode: tabMode,
selectTab: true,
);
return;
}
logger.w('No search bang found, falling back to search screen');
final router = await ref.read(routerProvider.future);
if (!ref.mounted) return;
final settings = ref.read(generalSettingsWithDefaultsProvider);
final selectedTabState = ref.read(
tabStatesProvider,
)[ref.read(selectedTabProvider)];
await router.push(
SearchRoute(
tabType:
selectedTabState?.tabMode.toTabType() ??
settings.effectiveDefaultCreateTabType,
searchText: text,
).location,
);
}),
FindInPageAction((text) async {
if (ref.mounted) {
@@ -55,7 +55,7 @@ final class SelectionActionServiceProvider
}
String _$selectionActionServiceHash() =>
r'5faf8c13c414406dfc2eb55fdd372677dbccdf8c';
r'78593799e8d903de415cf49ebb3acfb73e45d878';
@ProviderFor(eventService)
final eventServiceProvider = EventServiceProvider._();
@@ -421,7 +421,7 @@ class _BrowserViewState extends ConsumerState<BrowserView>
case SharedText():
final bang =
ref.read(selectedBangDataProvider()) ??
await ref.read(defaultSearchBangDataProvider.future);
await ref.read(defaultSearchBangProvider.future);
await ref
.read(tabRepositoryProvider.notifier)
@@ -580,9 +580,7 @@ class SearchScreen extends HookConsumerWidget {
final bang =
siteBang ??
globalBang ??
await ref.read(
defaultSearchBangDataProvider.future,
);
await ref.read(defaultSearchBangProvider.future);
if (bang != null) {
newUrl = bang.getTemplateUrl(searchQuery);