improve default search bang fetching
This commit is contained in:
@@ -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._();
|
||||
|
||||
+1
-1
@@ -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)
|
||||
|
||||
+1
-3
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user