From ed8c1762862aaeadc292e3c4e183d8cdf7b8dbb0 Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Sun, 16 Jun 2024 20:55:58 +0200 Subject: [PATCH] order most frequent bangs first for site search --- .../bangs/data/database/daos/bang.dart | 6 +++++- app/lib/features/bangs/domain/providers.dart | 2 ++ .../features/bangs/domain/providers.g.dart | 17 +++++++++++------ .../bangs/domain/repositories/data.dart | 2 ++ .../bangs/domain/repositories/data.g.dart | 2 +- .../bangs/presentation/screens/list.dart | 3 ++- .../presentation/widgets/site_search.dart | 19 ++++++++++++++++++- 7 files changed, 41 insertions(+), 10 deletions(-) diff --git a/app/lib/features/bangs/data/database/daos/bang.dart b/app/lib/features/bangs/data/database/daos/bang.dart index b0cb7a06..b7e16f08 100644 --- a/app/lib/features/bangs/data/database/daos/bang.dart +++ b/app/lib/features/bangs/data/database/daos/bang.dart @@ -33,6 +33,7 @@ class BangDao extends DatabaseAccessor with _$BangDaoMixin { String? domain, String? category, String? subCategory, + bool? orderMostFrequentFirst, }) { final selectable = select(db.bangDataView); if (groups != null) { @@ -49,7 +50,10 @@ class BangDao extends DatabaseAccessor with _$BangDaoMixin { } } - selectable.orderBy([(t) => OrderingTerm.asc(t.websiteName)]); + selectable.orderBy([ + if (orderMostFrequentFirst == true) (t) => OrderingTerm.desc(t.frequency), + (t) => OrderingTerm.asc(t.websiteName), + ]); return selectable; } diff --git a/app/lib/features/bangs/domain/providers.dart b/app/lib/features/bangs/domain/providers.dart index 1f52be86..77864a03 100644 --- a/app/lib/features/bangs/domain/providers.dart +++ b/app/lib/features/bangs/domain/providers.dart @@ -31,6 +31,7 @@ Stream> bangDataList( Iterable? groups, String? domain, ({String category, String? subCategory})? categoryFilter, + bool? orderMostFrequentFirst, })? filter, }) { final repository = ref.watch(bangDataRepositoryProvider.notifier); @@ -38,6 +39,7 @@ Stream> bangDataList( groups: filter?.groups, domain: filter?.domain, categoryFilter: filter?.categoryFilter, + orderMostFrequentFirst: filter?.orderMostFrequentFirst, ); } diff --git a/app/lib/features/bangs/domain/providers.g.dart b/app/lib/features/bangs/domain/providers.g.dart index 0c15510f..22de6866 100644 --- a/app/lib/features/bangs/domain/providers.g.dart +++ b/app/lib/features/bangs/domain/providers.g.dart @@ -187,7 +187,7 @@ final bangCategoriesProvider = typedef BangCategoriesRef = AutoDisposeStreamProviderRef>>; -String _$bangDataListHash() => r'64c3a3c55c481bf97f291f3befd8f958007daac6'; +String _$bangDataListHash() => r'c4fbc1676be933b29ec88f503110c119fe8b6d86'; /// See also [bangDataList]. @ProviderFor(bangDataList) @@ -203,7 +203,8 @@ class BangDataListFamily extends Family>> { ({ ({String category, String? subCategory})? categoryFilter, String? domain, - Iterable? groups + Iterable? groups, + bool? orderMostFrequentFirst })? filter, }) { return BangDataListProvider( @@ -242,7 +243,8 @@ class BangDataListProvider extends AutoDisposeStreamProvider> { ({ ({String category, String? subCategory})? categoryFilter, String? domain, - Iterable? groups + Iterable? groups, + bool? orderMostFrequentFirst })? filter, }) : this._internal( (ref) => bangDataList( @@ -274,7 +276,8 @@ class BangDataListProvider extends AutoDisposeStreamProvider> { final ({ ({String category, String? subCategory})? categoryFilter, String? domain, - Iterable? groups + Iterable? groups, + bool? orderMostFrequentFirst })? filter; @override @@ -319,7 +322,8 @@ mixin BangDataListRef on AutoDisposeStreamProviderRef> { ({ ({String category, String? subCategory})? categoryFilter, String? domain, - Iterable? groups + Iterable? groups, + bool? orderMostFrequentFirst })? get filter; } @@ -332,7 +336,8 @@ class _BangDataListProviderElement ({ ({String category, String? subCategory})? categoryFilter, String? domain, - Iterable? groups + Iterable? groups, + bool? orderMostFrequentFirst })? get filter => (origin as BangDataListProvider).filter; } diff --git a/app/lib/features/bangs/domain/repositories/data.dart b/app/lib/features/bangs/domain/repositories/data.dart index 658d1b1e..c51f672c 100644 --- a/app/lib/features/bangs/domain/repositories/data.dart +++ b/app/lib/features/bangs/domain/repositories/data.dart @@ -47,6 +47,7 @@ class BangDataRepository extends _$BangDataRepository { Iterable? groups, String? domain, ({String category, String? subCategory})? categoryFilter, + bool? orderMostFrequentFirst, }) { return _db.bangDao .getBangDataList( @@ -54,6 +55,7 @@ class BangDataRepository extends _$BangDataRepository { domain: domain, category: categoryFilter?.category, subCategory: categoryFilter?.subCategory, + orderMostFrequentFirst: orderMostFrequentFirst, ) .watch(); } diff --git a/app/lib/features/bangs/domain/repositories/data.g.dart b/app/lib/features/bangs/domain/repositories/data.g.dart index 2071f1ab..d79cf558 100644 --- a/app/lib/features/bangs/domain/repositories/data.g.dart +++ b/app/lib/features/bangs/domain/repositories/data.g.dart @@ -7,7 +7,7 @@ part of 'data.dart'; // ************************************************************************** String _$bangDataRepositoryHash() => - r'f23e81e45a69d5b5b9158b6601c3724d1b316715'; + r'369790e5e6b9c70daa04a898c40f0bed5e008400'; /// See also [BangDataRepository]. @ProviderFor(BangDataRepository) diff --git a/app/lib/features/bangs/presentation/screens/list.dart b/app/lib/features/bangs/presentation/screens/list.dart index cbb07bca..1333a286 100644 --- a/app/lib/features/bangs/presentation/screens/list.dart +++ b/app/lib/features/bangs/presentation/screens/list.dart @@ -24,7 +24,8 @@ class BangListScreen extends HookConsumerWidget { ? (category: category!, subCategory: subCategory) : null, domain: null, - groups: null + groups: null, + orderMostFrequentFirst: null, ), ), ); diff --git a/app/lib/features/bangs/presentation/widgets/site_search.dart b/app/lib/features/bangs/presentation/widgets/site_search.dart index d164b48e..7074d005 100644 --- a/app/lib/features/bangs/presentation/widgets/site_search.dart +++ b/app/lib/features/bangs/presentation/widgets/site_search.dart @@ -6,6 +6,7 @@ import 'package:bang_navigator/features/search_browser/domain/providers.dart'; import 'package:bang_navigator/features/web_view/presentation/controllers/switch_new_tab.dart'; import 'package:flutter/material.dart'; 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'; class SiteSearch extends HookConsumerWidget { @@ -19,7 +20,12 @@ class SiteSearch extends HookConsumerWidget { final availableBangsAsync = ref.watch( bangDataListProvider( - filter: (domain: domain, groups: null, categoryFilter: null), + filter: ( + domain: domain, + groups: null, + categoryFilter: null, + orderMostFrequentFirst: true, + ), ), ); final availableBangCount = availableBangsAsync.valueOrNull?.length ?? 0; @@ -92,6 +98,17 @@ class SiteSearch extends HookConsumerWidget { await submitSearch(); }, ), + const SizedBox( + height: 12, + ), + SizedBox( + width: double.infinity, + child: FilledButton.icon( + onPressed: submitSearch, + label: const Text('Search on Site'), + icon: const Icon(MdiIcons.invoiceTextSend), + ), + ), ], ), );