majro update

This commit is contained in:
Fabian Freund
2025-02-28 14:30:49 +01:00
parent a8957f6cf8
commit 3c4d479bd9
181 changed files with 7090 additions and 5299 deletions
+3
View File
@@ -18,3 +18,6 @@ targets:
modules: modules:
- json1 - json1
- fts5 - fts5
json_serializable:
options:
explicit_to_json: true
+8 -6
View File
@@ -14,9 +14,10 @@ String _$lightSeedColorFallbackHash() =>
final lightSeedColorFallbackProvider = Provider<Color>.internal( final lightSeedColorFallbackProvider = Provider<Color>.internal(
lightSeedColorFallback, lightSeedColorFallback,
name: r'lightSeedColorFallbackProvider', name: r'lightSeedColorFallbackProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$lightSeedColorFallbackHash, ? null
: _$lightSeedColorFallbackHash,
dependencies: null, dependencies: null,
allTransitiveDependencies: null, allTransitiveDependencies: null,
); );
@@ -32,9 +33,10 @@ String _$darkSeedColorFallbackHash() =>
final darkSeedColorFallbackProvider = Provider<Color>.internal( final darkSeedColorFallbackProvider = Provider<Color>.internal(
darkSeedColorFallback, darkSeedColorFallback,
name: r'darkSeedColorFallbackProvider', name: r'darkSeedColorFallbackProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$darkSeedColorFallbackHash, ? null
: _$darkSeedColorFallbackHash,
dependencies: null, dependencies: null,
allTransitiveDependencies: null, allTransitiveDependencies: null,
); );
+19
View File
@@ -0,0 +1,19 @@
import 'package:intl/date_symbol_data_local.dart';
import 'package:intl/intl.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'format.g.dart';
@Riverpod(keepAlive: true)
class Format extends _$Format {
String fullDateTimeWithTimezone(DateTime date) {
final pattern = DateFormat('yMMMMd').addPattern('Hm');
return pattern.format(date);
}
@override
Future<void> build() async {
await initializeDateFormatting();
}
}
+24
View File
@@ -0,0 +1,24 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'format.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$formatHash() => r'fe7fcdd19b512784a36f3838c57701030475e429';
/// See also [Format].
@ProviderFor(Format)
final formatProvider = AsyncNotifierProvider<Format, void>.internal(
Format.new,
name: r'formatProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$formatHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$Format = AsyncNotifier<void>;
// 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
+9 -8
View File
@@ -12,14 +12,15 @@ String _$willAcceptDropHash() => r'97b47784ef9101757602b4408d1f545ef2308830';
@ProviderFor(WillAcceptDrop) @ProviderFor(WillAcceptDrop)
final willAcceptDropProvider = final willAcceptDropProvider =
AutoDisposeNotifierProvider<WillAcceptDrop, DropTargetData?>.internal( AutoDisposeNotifierProvider<WillAcceptDrop, DropTargetData?>.internal(
WillAcceptDrop.new, WillAcceptDrop.new,
name: r'willAcceptDropProvider', name: r'willAcceptDropProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$willAcceptDropHash, ? null
dependencies: null, : _$willAcceptDropHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
typedef _$WillAcceptDrop = AutoDisposeNotifier<DropTargetData?>; typedef _$WillAcceptDrop = AutoDisposeNotifier<DropTargetData?>;
// ignore_for_file: type=lint // ignore_for_file: type=lint
+8 -6
View File
@@ -29,9 +29,10 @@ String _$embeddingModelHash() => r'40111a5f08b43afe6edd399ff0e6c022b3387265';
final embeddingModelProvider = Provider<OpenAIEmbeddings>.internal( final embeddingModelProvider = Provider<OpenAIEmbeddings>.internal(
embeddingModel, embeddingModel,
name: r'embeddingModelProvider', name: r'embeddingModelProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$embeddingModelHash, ? null
: _$embeddingModelHash,
dependencies: null, dependencies: null,
allTransitiveDependencies: null, allTransitiveDependencies: null,
); );
@@ -47,9 +48,10 @@ String _$embeddingDimensionsHash() =>
final embeddingDimensionsProvider = Provider<int>.internal( final embeddingDimensionsProvider = Provider<int>.internal(
embeddingDimensions, embeddingDimensions,
name: r'embeddingDimensionsProvider', name: r'embeddingDimensionsProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$embeddingDimensionsHash, ? null
: _$embeddingDimensionsHash,
dependencies: null, dependencies: null,
allTransitiveDependencies: null, allTransitiveDependencies: null,
); );
+6
View File
@@ -22,11 +22,17 @@ import 'package:lensai/features/settings/presentation/screens/web_engine_hardeni
import 'package:lensai/features/settings/presentation/screens/web_engine_settings.dart'; import 'package:lensai/features/settings/presentation/screens/web_engine_settings.dart';
import 'package:lensai/features/tor/presentation/screens/tor_proxy.dart'; import 'package:lensai/features/tor/presentation/screens/tor_proxy.dart';
import 'package:lensai/features/user/presentation/screens/auth.dart'; import 'package:lensai/features/user/presentation/screens/auth.dart';
import 'package:lensai/features/web_feed/data/database/database.dart';
import 'package:lensai/features/web_feed/presentation/screens/feed_article.dart';
import 'package:lensai/features/web_feed/presentation/screens/feed_article_list.dart';
import 'package:lensai/features/web_feed/presentation/screens/feed_edit.dart';
import 'package:lensai/features/web_feed/presentation/screens/feed_list.dart';
part 'routes.g.dart'; part 'routes.g.dart';
part 'routes.settings.dart'; part 'routes.settings.dart';
part 'routes.browser.dart'; part 'routes.browser.dart';
part 'routes.bangs.dart'; part 'routes.bangs.dart';
part 'routes.feeds.dart';
@TypedGoRoute<AboutRoute>(name: 'AboutRoute', path: '/about') @TypedGoRoute<AboutRoute>(name: 'AboutRoute', path: '/about')
class AboutRoute extends GoRouteData { class AboutRoute extends GoRouteData {
+52
View File
@@ -0,0 +1,52 @@
part of 'routes.dart';
@TypedGoRoute<FeedListRoute>(
name: 'FeedListRoute',
path: '/feeds',
routes: [
TypedGoRoute<FeedArticleListRoute>(
name: 'FeedArticleListRoute',
path: 'articles/:feedId',
),
TypedGoRoute<FeedArticleRoute>(
name: 'FeedArticleRoute',
path: 'article/:articleId',
),
TypedGoRoute<FeedCreateRoute>(name: 'FeedCreateRoute', path: 'create'),
],
)
class FeedListRoute extends GoRouteData {
@override
Widget build(BuildContext context, GoRouterState state) {
return const FeedListScreen();
}
}
class FeedCreateRoute extends GoRouteData {
@override
Widget build(BuildContext context, GoRouterState state) {
return FeedEditScreen.create(initialFeed: state.extra! as FeedData);
}
}
class FeedArticleListRoute extends GoRouteData {
final Uri feedId;
FeedArticleListRoute({required this.feedId});
@override
Widget build(BuildContext context, GoRouterState state) {
return FeedArticleListScreen(feedId: feedId);
}
}
class FeedArticleRoute extends GoRouteData {
final String articleId;
FeedArticleRoute({required this.articleId});
@override
Widget build(BuildContext context, GoRouterState state) {
return FeedArticleScreen(articleId: articleId);
}
}
+248 -170
View File
@@ -7,25 +7,25 @@ part of 'routes.dart';
// ************************************************************************** // **************************************************************************
List<RouteBase> get $appRoutes => [ List<RouteBase> get $appRoutes => [
$aboutRoute, $aboutRoute,
$userAuthRoute, $userAuthRoute,
$settingsRoute, $settingsRoute,
$browserRoute, $browserRoute,
$bangCategoriesRoute, $bangCategoriesRoute,
]; $feedListRoute,
];
RouteBase get $aboutRoute => GoRouteData.$route( RouteBase get $aboutRoute => GoRouteData.$route(
path: '/about', path: '/about',
name: 'AboutRoute', name: 'AboutRoute',
factory: $AboutRouteExtension._fromState,
); factory: $AboutRouteExtension._fromState,
);
extension $AboutRouteExtension on AboutRoute { extension $AboutRouteExtension on AboutRoute {
static AboutRoute _fromState(GoRouterState state) => AboutRoute(); static AboutRoute _fromState(GoRouterState state) => AboutRoute();
String get location => GoRouteData.$location( String get location => GoRouteData.$location('/about');
'/about',
);
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -38,17 +38,16 @@ extension $AboutRouteExtension on AboutRoute {
} }
RouteBase get $userAuthRoute => GoRouteData.$route( RouteBase get $userAuthRoute => GoRouteData.$route(
path: '/userAuth', path: '/userAuth',
name: 'UserAuthRoute', name: 'UserAuthRoute',
factory: $UserAuthRouteExtension._fromState,
); factory: $UserAuthRouteExtension._fromState,
);
extension $UserAuthRouteExtension on UserAuthRoute { extension $UserAuthRouteExtension on UserAuthRoute {
static UserAuthRoute _fromState(GoRouterState state) => UserAuthRoute(); static UserAuthRoute _fromState(GoRouterState state) => UserAuthRoute();
String get location => GoRouteData.$location( String get location => GoRouteData.$location('/userAuth');
'/userAuth',
);
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -61,48 +60,52 @@ extension $UserAuthRouteExtension on UserAuthRoute {
} }
RouteBase get $settingsRoute => GoRouteData.$route( RouteBase get $settingsRoute => GoRouteData.$route(
path: '/settings', path: '/settings',
name: 'SettingsRoute', name: 'SettingsRoute',
factory: $SettingsRouteExtension._fromState,
factory: $SettingsRouteExtension._fromState,
routes: [
GoRouteData.$route(
path: 'general',
name: 'GeneralSettingsRoute',
factory: $GeneralSettingsRouteExtension._fromState,
),
GoRouteData.$route(
path: 'bang',
name: 'BangSettingsRoute',
factory: $BangSettingsRouteExtension._fromState,
),
GoRouteData.$route(
path: 'web_engine',
name: 'WebEngineSettingsRoute',
factory: $WebEngineSettingsRouteExtension._fromState,
routes: [ routes: [
GoRouteData.$route( GoRouteData.$route(
path: 'general', path: 'hardening',
name: 'GeneralSettingsRoute', name: 'WebEngineHardeningRoute',
factory: $GeneralSettingsRouteExtension._fromState,
), factory: $WebEngineHardeningRouteExtension._fromState,
GoRouteData.$route(
path: 'bang',
name: 'BangSettingsRoute',
factory: $BangSettingsRouteExtension._fromState,
),
GoRouteData.$route(
path: 'web_engine',
name: 'WebEngineSettingsRoute',
factory: $WebEngineSettingsRouteExtension._fromState,
routes: [ routes: [
GoRouteData.$route( GoRouteData.$route(
path: 'hardening', path: 'group/:group',
name: 'WebEngineHardeningRoute', name: 'WebEngineHardeningGroupRoute',
factory: $WebEngineHardeningRouteExtension._fromState,
routes: [ factory: $WebEngineHardeningGroupRouteExtension._fromState,
GoRouteData.$route(
path: 'group/:group',
name: 'WebEngineHardeningGroupRoute',
factory: $WebEngineHardeningGroupRouteExtension._fromState,
),
],
), ),
], ],
), ),
], ],
); ),
],
);
extension $SettingsRouteExtension on SettingsRoute { extension $SettingsRouteExtension on SettingsRoute {
static SettingsRoute _fromState(GoRouterState state) => SettingsRoute(); static SettingsRoute _fromState(GoRouterState state) => SettingsRoute();
String get location => GoRouteData.$location( String get location => GoRouteData.$location('/settings');
'/settings',
);
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -118,9 +121,7 @@ extension $GeneralSettingsRouteExtension on GeneralSettingsRoute {
static GeneralSettingsRoute _fromState(GoRouterState state) => static GeneralSettingsRoute _fromState(GoRouterState state) =>
GeneralSettingsRoute(); GeneralSettingsRoute();
String get location => GoRouteData.$location( String get location => GoRouteData.$location('/settings/general');
'/settings/general',
);
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -136,9 +137,7 @@ extension $BangSettingsRouteExtension on BangSettingsRoute {
static BangSettingsRoute _fromState(GoRouterState state) => static BangSettingsRoute _fromState(GoRouterState state) =>
BangSettingsRoute(); BangSettingsRoute();
String get location => GoRouteData.$location( String get location => GoRouteData.$location('/settings/bang');
'/settings/bang',
);
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -154,9 +153,7 @@ extension $WebEngineSettingsRouteExtension on WebEngineSettingsRoute {
static WebEngineSettingsRoute _fromState(GoRouterState state) => static WebEngineSettingsRoute _fromState(GoRouterState state) =>
WebEngineSettingsRoute(); WebEngineSettingsRoute();
String get location => GoRouteData.$location( String get location => GoRouteData.$location('/settings/web_engine');
'/settings/web_engine',
);
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -172,9 +169,8 @@ extension $WebEngineHardeningRouteExtension on WebEngineHardeningRoute {
static WebEngineHardeningRoute _fromState(GoRouterState state) => static WebEngineHardeningRoute _fromState(GoRouterState state) =>
WebEngineHardeningRoute(); WebEngineHardeningRoute();
String get location => GoRouteData.$location( String get location =>
'/settings/web_engine/hardening', GoRouteData.$location('/settings/web_engine/hardening');
);
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -189,13 +185,11 @@ extension $WebEngineHardeningRouteExtension on WebEngineHardeningRoute {
extension $WebEngineHardeningGroupRouteExtension extension $WebEngineHardeningGroupRouteExtension
on WebEngineHardeningGroupRoute { on WebEngineHardeningGroupRoute {
static WebEngineHardeningGroupRoute _fromState(GoRouterState state) => static WebEngineHardeningGroupRoute _fromState(GoRouterState state) =>
WebEngineHardeningGroupRoute( WebEngineHardeningGroupRoute(group: state.pathParameters['group']!);
group: state.pathParameters['group']!,
);
String get location => GoRouteData.$location( String get location => GoRouteData.$location(
'/settings/web_engine/hardening/group/${Uri.encodeComponent(group)}', '/settings/web_engine/hardening/group/${Uri.encodeComponent(group)}',
); );
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -208,56 +202,62 @@ extension $WebEngineHardeningGroupRouteExtension
} }
RouteBase get $browserRoute => GoRouteData.$route( RouteBase get $browserRoute => GoRouteData.$route(
path: '/', path: '/',
name: 'BrowserRoute', name: 'BrowserRoute',
factory: $BrowserRouteExtension._fromState,
factory: $BrowserRouteExtension._fromState,
routes: [
GoRouteData.$route(
path: 'page/:url',
name: 'WebPageRoute',
factory: $WebPageRouteExtension._fromState,
),
GoRouteData.$route(
path: 'search/:searchText',
name: 'SearchRoute',
factory: $SearchRouteExtension._fromState,
),
GoRouteData.$route(
path: 'tor_proxy',
name: 'TorProxyRoute',
factory: $TorProxyRouteExtension._fromState,
),
GoRouteData.$route(
path: 'context_menu',
name: 'ContextMenuRoute',
factory: $ContextMenuRouteExtension._fromState,
),
GoRouteData.$route(
path: 'containers',
name: 'ContainerListRoute',
factory: $ContainerListRouteExtension._fromState,
routes: [ routes: [
GoRouteData.$route( GoRouteData.$route(
path: 'page/:url', path: 'create',
name: 'WebPageRoute', name: 'ContainerCreateRoute',
factory: $WebPageRouteExtension._fromState,
factory: $ContainerCreateRouteExtension._fromState,
), ),
GoRouteData.$route( GoRouteData.$route(
path: 'search/:searchText', path: 'edit',
name: 'SearchRoute', name: 'ContainerEditRoute',
factory: $SearchRouteExtension._fromState,
), factory: $ContainerEditRouteExtension._fromState,
GoRouteData.$route(
path: 'tor_proxy',
name: 'TorProxyRoute',
factory: $TorProxyRouteExtension._fromState,
),
GoRouteData.$route(
path: 'context_menu',
name: 'ContextMenuRoute',
factory: $ContextMenuRouteExtension._fromState,
),
GoRouteData.$route(
path: 'containers',
name: 'ContainerListRoute',
factory: $ContainerListRouteExtension._fromState,
routes: [
GoRouteData.$route(
path: 'create',
name: 'ContainerCreateRoute',
factory: $ContainerCreateRouteExtension._fromState,
),
GoRouteData.$route(
path: 'edit',
name: 'ContainerEditRoute',
factory: $ContainerEditRouteExtension._fromState,
),
],
), ),
], ],
); ),
],
);
extension $BrowserRouteExtension on BrowserRoute { extension $BrowserRouteExtension on BrowserRoute {
static BrowserRoute _fromState(GoRouterState state) => BrowserRoute(); static BrowserRoute _fromState(GoRouterState state) => BrowserRoute();
String get location => GoRouteData.$location( String get location => GoRouteData.$location('/');
'/',
);
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -270,13 +270,11 @@ extension $BrowserRouteExtension on BrowserRoute {
} }
extension $WebPageRouteExtension on WebPageRoute { extension $WebPageRouteExtension on WebPageRoute {
static WebPageRoute _fromState(GoRouterState state) => WebPageRoute( static WebPageRoute _fromState(GoRouterState state) =>
url: state.pathParameters['url']!, WebPageRoute(url: state.pathParameters['url']!);
);
String get location => GoRouteData.$location( String get location =>
'/page/${Uri.encodeComponent(url)}', GoRouteData.$location('/page/${Uri.encodeComponent(url)}');
);
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -290,13 +288,12 @@ extension $WebPageRouteExtension on WebPageRoute {
extension $SearchRouteExtension on SearchRoute { extension $SearchRouteExtension on SearchRoute {
static SearchRoute _fromState(GoRouterState state) => SearchRoute( static SearchRoute _fromState(GoRouterState state) => SearchRoute(
searchText: searchText:
state.pathParameters['searchText']! ?? SearchRoute.emptySearchText, state.pathParameters['searchText'] ?? SearchRoute.emptySearchText,
); );
String get location => GoRouteData.$location( String get location =>
'/search/${Uri.encodeComponent(searchText)}', GoRouteData.$location('/search/${Uri.encodeComponent(searchText)}');
);
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -311,9 +308,7 @@ extension $SearchRouteExtension on SearchRoute {
extension $TorProxyRouteExtension on TorProxyRoute { extension $TorProxyRouteExtension on TorProxyRoute {
static TorProxyRoute _fromState(GoRouterState state) => TorProxyRoute(); static TorProxyRoute _fromState(GoRouterState state) => TorProxyRoute();
String get location => GoRouteData.$location( String get location => GoRouteData.$location('/tor_proxy');
'/tor_proxy',
);
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -329,9 +324,7 @@ extension $ContextMenuRouteExtension on ContextMenuRoute {
static ContextMenuRoute _fromState(GoRouterState state) => static ContextMenuRoute _fromState(GoRouterState state) =>
const ContextMenuRoute(); const ContextMenuRoute();
String get location => GoRouteData.$location( String get location => GoRouteData.$location('/context_menu');
'/context_menu',
);
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -347,9 +340,7 @@ extension $ContainerListRouteExtension on ContainerListRoute {
static ContainerListRoute _fromState(GoRouterState state) => static ContainerListRoute _fromState(GoRouterState state) =>
ContainerListRoute(); ContainerListRoute();
String get location => GoRouteData.$location( String get location => GoRouteData.$location('/containers');
'/containers',
);
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -365,9 +356,7 @@ extension $ContainerCreateRouteExtension on ContainerCreateRoute {
static ContainerCreateRoute _fromState(GoRouterState state) => static ContainerCreateRoute _fromState(GoRouterState state) =>
ContainerCreateRoute(); ContainerCreateRoute();
String get location => GoRouteData.$location( String get location => GoRouteData.$location('/containers/create');
'/containers/create',
);
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -383,9 +372,7 @@ extension $ContainerEditRouteExtension on ContainerEditRoute {
static ContainerEditRoute _fromState(GoRouterState state) => static ContainerEditRoute _fromState(GoRouterState state) =>
ContainerEditRoute(); ContainerEditRoute();
String get location => GoRouteData.$location( String get location => GoRouteData.$location('/containers/edit');
'/containers/edit',
);
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -398,37 +385,39 @@ extension $ContainerEditRouteExtension on ContainerEditRoute {
} }
RouteBase get $bangCategoriesRoute => GoRouteData.$route( RouteBase get $bangCategoriesRoute => GoRouteData.$route(
path: '/bangs', path: '/bangs',
name: 'BangRoute', name: 'BangRoute',
factory: $BangCategoriesRouteExtension._fromState,
factory: $BangCategoriesRouteExtension._fromState,
routes: [
GoRouteData.$route(
path: 'search/:searchText',
name: 'BangSearchRoute',
factory: $BangSearchRouteExtension._fromState,
),
GoRouteData.$route(
path: 'category/:category',
name: 'BangCategoryRoute',
factory: $BangCategoryRouteExtension._fromState,
routes: [ routes: [
GoRouteData.$route( GoRouteData.$route(
path: 'search/:searchText', path: ':subCategory',
name: 'BangSearchRoute', name: 'BangSubCategoryRoute',
factory: $BangSearchRouteExtension._fromState,
), factory: $BangSubCategoryRouteExtension._fromState,
GoRouteData.$route(
path: 'category/:category',
name: 'BangCategoryRoute',
factory: $BangCategoryRouteExtension._fromState,
routes: [
GoRouteData.$route(
path: ':subCategory',
name: 'BangSubCategoryRoute',
factory: $BangSubCategoryRouteExtension._fromState,
),
],
), ),
], ],
); ),
],
);
extension $BangCategoriesRouteExtension on BangCategoriesRoute { extension $BangCategoriesRouteExtension on BangCategoriesRoute {
static BangCategoriesRoute _fromState(GoRouterState state) => static BangCategoriesRoute _fromState(GoRouterState state) =>
BangCategoriesRoute(); BangCategoriesRoute();
String get location => GoRouteData.$location( String get location => GoRouteData.$location('/bangs');
'/bangs',
);
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -442,13 +431,12 @@ extension $BangCategoriesRouteExtension on BangCategoriesRoute {
extension $BangSearchRouteExtension on BangSearchRoute { extension $BangSearchRouteExtension on BangSearchRoute {
static BangSearchRoute _fromState(GoRouterState state) => BangSearchRoute( static BangSearchRoute _fromState(GoRouterState state) => BangSearchRoute(
searchText: state.pathParameters['searchText']! ?? searchText:
BangSearchRoute.emptySearchText, state.pathParameters['searchText'] ?? BangSearchRoute.emptySearchText,
); );
String get location => GoRouteData.$location( String get location =>
'/bangs/search/${Uri.encodeComponent(searchText)}', GoRouteData.$location('/bangs/search/${Uri.encodeComponent(searchText)}');
);
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -461,13 +449,11 @@ extension $BangSearchRouteExtension on BangSearchRoute {
} }
extension $BangCategoryRouteExtension on BangCategoryRoute { extension $BangCategoryRouteExtension on BangCategoryRoute {
static BangCategoryRoute _fromState(GoRouterState state) => BangCategoryRoute( static BangCategoryRoute _fromState(GoRouterState state) =>
category: state.pathParameters['category']!, BangCategoryRoute(category: state.pathParameters['category']!);
);
String get location => GoRouteData.$location( String get location =>
'/bangs/category/${Uri.encodeComponent(category)}', GoRouteData.$location('/bangs/category/${Uri.encodeComponent(category)}');
);
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -487,8 +473,100 @@ extension $BangSubCategoryRouteExtension on BangSubCategoryRoute {
); );
String get location => GoRouteData.$location( String get location => GoRouteData.$location(
'/bangs/category/${Uri.encodeComponent(category)}/${Uri.encodeComponent(subCategory)}', '/bangs/category/${Uri.encodeComponent(category)}/${Uri.encodeComponent(subCategory)}',
); );
void go(BuildContext context) => context.go(location);
Future<T?> push<T>(BuildContext context) => context.push<T>(location);
void pushReplacement(BuildContext context) =>
context.pushReplacement(location);
void replace(BuildContext context) => context.replace(location);
}
RouteBase get $feedListRoute => GoRouteData.$route(
path: '/feeds',
name: 'FeedListRoute',
factory: $FeedListRouteExtension._fromState,
routes: [
GoRouteData.$route(
path: 'articles/:feedId',
name: 'FeedArticleListRoute',
factory: $FeedArticleListRouteExtension._fromState,
),
GoRouteData.$route(
path: 'article/:articleId',
name: 'FeedArticleRoute',
factory: $FeedArticleRouteExtension._fromState,
),
GoRouteData.$route(
path: 'create',
name: 'FeedCreateRoute',
factory: $FeedCreateRouteExtension._fromState,
),
],
);
extension $FeedListRouteExtension on FeedListRoute {
static FeedListRoute _fromState(GoRouterState state) => FeedListRoute();
String get location => GoRouteData.$location('/feeds');
void go(BuildContext context) => context.go(location);
Future<T?> push<T>(BuildContext context) => context.push<T>(location);
void pushReplacement(BuildContext context) =>
context.pushReplacement(location);
void replace(BuildContext context) => context.replace(location);
}
extension $FeedArticleListRouteExtension on FeedArticleListRoute {
static FeedArticleListRoute _fromState(GoRouterState state) =>
FeedArticleListRoute(feedId: Uri.parse(state.pathParameters['feedId']!)!);
String get location => GoRouteData.$location(
'/feeds/articles/${Uri.encodeComponent(feedId.toString())}',
);
void go(BuildContext context) => context.go(location);
Future<T?> push<T>(BuildContext context) => context.push<T>(location);
void pushReplacement(BuildContext context) =>
context.pushReplacement(location);
void replace(BuildContext context) => context.replace(location);
}
extension $FeedArticleRouteExtension on FeedArticleRoute {
static FeedArticleRoute _fromState(GoRouterState state) =>
FeedArticleRoute(articleId: state.pathParameters['articleId']!);
String get location =>
GoRouteData.$location('/feeds/article/${Uri.encodeComponent(articleId)}');
void go(BuildContext context) => context.go(location);
Future<T?> push<T>(BuildContext context) => context.push<T>(location);
void pushReplacement(BuildContext context) =>
context.pushReplacement(location);
void replace(BuildContext context) => context.replace(location);
}
extension $FeedCreateRouteExtension on FeedCreateRoute {
static FeedCreateRoute _fromState(GoRouterState state) => FeedCreateRoute();
String get location => GoRouteData.$location('/feeds/create');
void go(BuildContext context) => context.go(location); void go(BuildContext context) => context.go(location);
@@ -0,0 +1,17 @@
import 'dart:convert';
import 'package:drift/drift.dart';
class StringListConverter extends TypeConverter<List<String>, String> {
const StringListConverter();
@override
List<String> fromSql(String fromDb) {
return jsonDecode(fromDb) as List<String>;
}
@override
String toSql(List<String> value) {
return jsonEncode(value);
}
}
+2 -1
View File
@@ -1,5 +1,6 @@
import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:copy_with_extension/copy_with_extension.dart';
import 'package:fast_equatable/fast_equatable.dart'; import 'package:fast_equatable/fast_equatable.dart';
import 'package:lensai/extensions/nullable.dart';
import 'package:lensai/features/geckoview/domain/entities/browser_icon.dart'; import 'package:lensai/features/geckoview/domain/entities/browser_icon.dart';
part 'web_page_info.g.dart'; part 'web_page_info.g.dart';
@@ -12,7 +13,7 @@ class WebPageInfo with FastEquatable {
final Set<String>? feeds; final Set<String>? feeds;
bool get isPageInfoComplete => bool get isPageInfoComplete =>
(title?.isNotEmpty ?? false) && favicon != null; title.isNotEmpty && favicon != null && feeds != null;
WebPageInfo({required this.url, this.title, this.favicon, this.feeds}); WebPageInfo({required this.url, this.title, this.favicon, this.feeds});
+20 -17
View File
@@ -48,7 +48,6 @@ class _$WebPageInfoCWProxyImpl implements _$WebPageInfoCWProxy {
WebPageInfo feeds(Set<String>? feeds) => this(feeds: feeds); WebPageInfo feeds(Set<String>? feeds) => this(feeds: feeds);
@override @override
/// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `WebPageInfo(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `WebPageInfo(...).copyWith.fieldName(...)` to override fields one at a time with nullification support.
/// ///
/// Usage /// Usage
@@ -62,22 +61,26 @@ class _$WebPageInfoCWProxyImpl implements _$WebPageInfoCWProxy {
Object? feeds = const $CopyWithPlaceholder(), Object? feeds = const $CopyWithPlaceholder(),
}) { }) {
return WebPageInfo( return WebPageInfo(
url: url == const $CopyWithPlaceholder() url:
? _value.url url == const $CopyWithPlaceholder()
// ignore: cast_nullable_to_non_nullable ? _value.url
: url as Uri, // ignore: cast_nullable_to_non_nullable
title: title == const $CopyWithPlaceholder() : url as Uri,
? _value.title title:
// ignore: cast_nullable_to_non_nullable title == const $CopyWithPlaceholder()
: title as String?, ? _value.title
favicon: favicon == const $CopyWithPlaceholder() // ignore: cast_nullable_to_non_nullable
? _value.favicon : title as String?,
// ignore: cast_nullable_to_non_nullable favicon:
: favicon as BrowserIcon?, favicon == const $CopyWithPlaceholder()
feeds: feeds == const $CopyWithPlaceholder() ? _value.favicon
? _value.feeds // ignore: cast_nullable_to_non_nullable
// ignore: cast_nullable_to_non_nullable : favicon as BrowserIcon?,
: feeds as Set<String>?, feeds:
feeds == const $CopyWithPlaceholder()
? _value.feeds
// ignore: cast_nullable_to_non_nullable
: feeds as Set<String>?,
); );
} }
} }
@@ -1,6 +1,7 @@
import 'dart:async'; import 'dart:async';
import 'package:exceptions/exceptions.dart'; import 'package:exceptions/exceptions.dart';
import 'package:lensai/core/providers/format.dart';
import 'package:lensai/features/about/data/repositories/package_info_repository.dart'; import 'package:lensai/features/about/data/repositories/package_info_repository.dart';
import 'package:lensai/features/bangs/data/models/bang_group.dart'; import 'package:lensai/features/bangs/data/models/bang_group.dart';
import 'package:lensai/features/bangs/domain/repositories/sync.dart'; import 'package:lensai/features/bangs/domain/repositories/sync.dart';
@@ -43,6 +44,8 @@ class AppInitializationService extends _$AppInitializationService {
state = await Result.fromAsync(() async { state = await Result.fromAsync(() async {
final errors = <ErrorMessage>[]; final errors = <ErrorMessage>[];
await ref.read(formatProvider.future);
await _initPackageInfo(); await _initPackageInfo();
final bangSyncResults = await _initBangs(); final bangSyncResults = await _initBangs();
@@ -7,28 +7,27 @@ part of 'app_initialization.dart';
// ************************************************************************** // **************************************************************************
String _$appInitializationServiceHash() => String _$appInitializationServiceHash() =>
r'fa383398929c8f3c8b430986304775e044b9af7a'; r'5e537f916825d6c5f660cf62ff133c2ef00ab091';
/// See also [AppInitializationService]. /// See also [AppInitializationService].
@ProviderFor(AppInitializationService) @ProviderFor(AppInitializationService)
final appInitializationServiceProvider = NotifierProvider< final appInitializationServiceProvider = NotifierProvider<
AppInitializationService, AppInitializationService,
Result< Result<({bool initialized, String? stage, List<ErrorMessage> errors})>
({ >.internal(
bool initialized,
String? stage,
List<ErrorMessage> errors
})>>.internal(
AppInitializationService.new, AppInitializationService.new,
name: r'appInitializationServiceProvider', name: r'appInitializationServiceProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$appInitializationServiceHash, ? null
: _$appInitializationServiceHash,
dependencies: null, dependencies: null,
allTransitiveDependencies: null, allTransitiveDependencies: null,
); );
typedef _$AppInitializationService = Notifier< typedef _$AppInitializationService =
Result<({bool initialized, String? stage, List<ErrorMessage> errors})>>; Notifier<
Result<({bool initialized, String? stage, List<ErrorMessage> errors})>
>;
// ignore_for_file: type=lint // 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 // 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
+5 -7
View File
@@ -13,8 +13,8 @@ import 'package:lensai/data/models/web_page_info.dart';
import 'package:lensai/extensions/nullable.dart'; import 'package:lensai/extensions/nullable.dart';
import 'package:lensai/features/geckoview/domain/entities/browser_icon.dart'; import 'package:lensai/features/geckoview/domain/entities/browser_icon.dart';
import 'package:lensai/features/user/domain/repositories/cache.dart'; import 'package:lensai/features/user/domain/repositories/cache.dart';
import 'package:lensai/features/web_feed/utils/feed_finder.dart';
import 'package:lensai/presentation/controllers/website_title.dart'; import 'package:lensai/presentation/controllers/website_title.dart';
import 'package:lensai/utils/feed_finder.dart';
import 'package:lensai/utils/lru_cache.dart'; import 'package:lensai/utils/lru_cache.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
@@ -119,7 +119,7 @@ class GenericWebsiteService extends _$GenericWebsiteService {
url: _resolveRelativeUri(baseUrl, url).toString(), url: _resolveRelativeUri(baseUrl, url).toString(),
type: type, type: type,
sizes: sizesToList(link.attributes['sizes']).toList(), sizes: sizesToList(link.attributes['sizes']).toList(),
mimeType: (mimeType?.isNotEmpty ?? true) ? null : mimeType, mimeType: mimeType.isNotEmpty ? mimeType : null,
maskable: false, maskable: false,
), ),
); );
@@ -186,7 +186,7 @@ class GenericWebsiteService extends _$GenericWebsiteService {
return icons; return icons;
} }
Future<Result<WebPageInfo>> fetchPageInfo(Uri url) async { Future<Result<WebPageInfo>> fetchPageInfo(Uri url) {
return Result.fromAsync(() async { return Result.fromAsync(() async {
final result = await compute((String urlString) async { final result = await compute((String urlString) async {
final client = http.Client(); final client = http.Client();
@@ -200,10 +200,8 @@ class GenericWebsiteService extends _$GenericWebsiteService {
final title = document.querySelector('title')?.text; final title = document.querySelector('title')?.text;
final resources = _extractIcons(baseUri, document); final resources = _extractIcons(baseUri, document);
final feeds = await FeedFinder( final feeds =
url: baseUri, await FeedFinder(url: baseUri, document: document).parse();
document: document,
).parse(verifyCandidates: false);
return { return {
'title': title, 'title': title,
+10 -9
View File
@@ -7,20 +7,21 @@ part of 'generic_website.dart';
// ************************************************************************** // **************************************************************************
String _$genericWebsiteServiceHash() => String _$genericWebsiteServiceHash() =>
r'12396df7370ebc31b0a53b786e5a3e27c6d05177'; r'9d17f41596579c289a6cd021ed8d8049e1fb7aff';
/// See also [GenericWebsiteService]. /// See also [GenericWebsiteService].
@ProviderFor(GenericWebsiteService) @ProviderFor(GenericWebsiteService)
final genericWebsiteServiceProvider = final genericWebsiteServiceProvider =
NotifierProvider<GenericWebsiteService, void>.internal( NotifierProvider<GenericWebsiteService, void>.internal(
GenericWebsiteService.new, GenericWebsiteService.new,
name: r'genericWebsiteServiceProvider', name: r'genericWebsiteServiceProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$genericWebsiteServiceHash, ? null
dependencies: null, : _$genericWebsiteServiceHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
typedef _$GenericWebsiteService = Notifier<void>; typedef _$GenericWebsiteService = Notifier<void>;
// ignore_for_file: type=lint // ignore_for_file: type=lint
+9
View File
@@ -0,0 +1,9 @@
extension DurationX on Duration {
String formatTimeZoneOffset() {
final hours = inHours.abs().toString().padLeft(2, '0');
final minutes = (inMinutes.abs() % 60).toString().padLeft(2, '0');
final sign = isNegative ? '-' : '+';
return '$sign$hours$minutes';
}
}
+4 -4
View File
@@ -1,12 +1,12 @@
import 'dart:ui'; import 'dart:ui';
import 'package:xxh3/xxh3.dart'; import 'package:fast_equatable/hash.dart';
extension ImageHash on Image { extension ImageHash on Image {
Future<int?> calculateHash() async { Future<int?> calculateHash() async {
final bytes = await toByteData(); final byteData = await toByteData();
if (bytes != null) { if (byteData != null) {
final digest = xxh3(bytes.buffer.asUint8List()); final digest = secureHash(byteData);
return digest; return digest;
} }
+22 -3
View File
@@ -1,7 +1,26 @@
extension NullableX<T> on T? { extension NullableX<T extends Object?> on T? {
@pragma('vm:prefer-inline') @pragma('vm:prefer-inline')
R? mapNotNull<R>(R? Function(T) callback) { R? mapNotNull<R>(R? Function(T) callback) {
// ignore: null_check_on_nullable_type_parameter validated // We can simplify this by using the null-aware operator
return (this != null) ? callback(this!) : null; return this != null ? callback(this as T) : null;
} }
} }
extension NullableStringX on String? {
@pragma('vm:prefer-inline')
String? get whenNotEmpty => (this?.isNotEmpty ?? false) ? this : null;
@pragma('vm:prefer-inline')
bool get isNotEmpty => this?.isNotEmpty ?? false;
@pragma('vm:prefer-inline')
bool get isEmpty => this?.isEmpty ?? true;
}
extension NullableIterable on Iterable? {
@pragma('vm:prefer-inline')
bool get isNotEmpty => this?.isNotEmpty ?? false;
@pragma('vm:prefer-inline')
bool get isEmpty => this?.isEmpty ?? true;
}
+3
View File
@@ -0,0 +1,3 @@
extension UriX on Uri {
Uri get base => Uri.parse('$scheme://$authority');
}
@@ -13,9 +13,10 @@ String _$widgetPinnableHash() => r'f91041f0f051ad0f00dd765cafea5571ca8c8088';
final widgetPinnableProvider = FutureProvider<bool>.internal( final widgetPinnableProvider = FutureProvider<bool>.internal(
widgetPinnable, widgetPinnable,
name: r'widgetPinnableProvider', name: r'widgetPinnableProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$widgetPinnableHash, ? null
: _$widgetPinnableHash,
dependencies: null, dependencies: null,
allTransitiveDependencies: null, allTransitiveDependencies: null,
); );
@@ -30,18 +31,19 @@ String _$appWidgetLaunchStreamHash() =>
@ProviderFor(appWidgetLaunchStream) @ProviderFor(appWidgetLaunchStream)
final appWidgetLaunchStreamProvider = final appWidgetLaunchStreamProvider =
AutoDisposeProvider<Raw<Stream<ReceivedIntentParameter>>>.internal( AutoDisposeProvider<Raw<Stream<ReceivedIntentParameter>>>.internal(
appWidgetLaunchStream, appWidgetLaunchStream,
name: r'appWidgetLaunchStreamProvider', name: r'appWidgetLaunchStreamProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$appWidgetLaunchStreamHash, ? null
dependencies: null, : _$appWidgetLaunchStreamHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead') @Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element // ignore: unused_element
typedef AppWidgetLaunchStreamRef typedef AppWidgetLaunchStreamRef =
= AutoDisposeProviderRef<Raw<Stream<ReceivedIntentParameter>>>; AutoDisposeProviderRef<Raw<Stream<ReceivedIntentParameter>>>;
// ignore_for_file: type=lint // 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 // 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
@@ -111,9 +111,9 @@ class BangDao extends DatabaseAccessor<BangDatabase> with _$BangDaoMixin {
), ),
onConflict: DoUpdate( onConflict: DoUpdate(
target: [db.bangHistory.searchQuery], target: [db.bangHistory.searchQuery],
(old) => BangHistoryCompanion.custom( (old) => BangHistoryCompanion(
trigger: Variable(trigger), trigger: Value(trigger),
searchDate: Variable(DateTime.now()), searchDate: Value(DateTime.now()),
), ),
), ),
); );
@@ -22,7 +22,7 @@ class SyncDao extends DatabaseAccessor<BangDatabase> with _$SyncDaoMixin {
return db.bangSync.insertOne( return db.bangSync.insertOne(
BangSyncCompanion.insert(group: Value(group), lastSync: lastSync), BangSyncCompanion.insert(group: Value(group), lastSync: lastSync),
onConflict: DoUpdate( onConflict: DoUpdate(
(old) => BangSyncCompanion.custom(lastSync: Variable(lastSync)), (old) => BangSyncCompanion(lastSync: Value(lastSync)),
), ),
); );
} }
File diff suppressed because it is too large Load Diff
+57 -49
View File
@@ -72,7 +72,6 @@ class _$BangCWProxyImpl implements _$BangCWProxy {
Bang format(Set<BangFormat>? format) => this(format: format); Bang format(Set<BangFormat>? format) => this(format: format);
@override @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. /// 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 /// Usage
@@ -90,38 +89,46 @@ class _$BangCWProxyImpl implements _$BangCWProxy {
Object? format = const $CopyWithPlaceholder(), Object? format = const $CopyWithPlaceholder(),
}) { }) {
return Bang( return Bang(
websiteName: websiteName == const $CopyWithPlaceholder() websiteName:
? _value.websiteName websiteName == const $CopyWithPlaceholder()
// ignore: cast_nullable_to_non_nullable ? _value.websiteName
: websiteName as String, // ignore: cast_nullable_to_non_nullable
domain: domain == const $CopyWithPlaceholder() : websiteName as String,
? _value.domain domain:
// ignore: cast_nullable_to_non_nullable domain == const $CopyWithPlaceholder()
: domain as String, ? _value.domain
trigger: trigger == const $CopyWithPlaceholder() // ignore: cast_nullable_to_non_nullable
? _value.trigger : domain as String,
// ignore: cast_nullable_to_non_nullable trigger:
: trigger as String, trigger == const $CopyWithPlaceholder()
urlTemplate: urlTemplate == const $CopyWithPlaceholder() ? _value.trigger
? _value.urlTemplate // ignore: cast_nullable_to_non_nullable
// ignore: cast_nullable_to_non_nullable : trigger as String,
: urlTemplate as String, urlTemplate:
group: group == const $CopyWithPlaceholder() urlTemplate == const $CopyWithPlaceholder()
? _value.group ? _value.urlTemplate
// ignore: cast_nullable_to_non_nullable // ignore: cast_nullable_to_non_nullable
: group as BangGroup?, : urlTemplate as String,
category: category == const $CopyWithPlaceholder() group:
? _value.category group == const $CopyWithPlaceholder()
// ignore: cast_nullable_to_non_nullable ? _value.group
: category as String?, // ignore: cast_nullable_to_non_nullable
subCategory: subCategory == const $CopyWithPlaceholder() : group as BangGroup?,
? _value.subCategory category:
// ignore: cast_nullable_to_non_nullable category == const $CopyWithPlaceholder()
: subCategory as String?, ? _value.category
format: format == const $CopyWithPlaceholder() // ignore: cast_nullable_to_non_nullable
? _value.format : category as String?,
// ignore: cast_nullable_to_non_nullable subCategory:
: format as Set<BangFormat>?, 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( Bang _$BangFromJson(Map<String, dynamic> json) => Bang(
websiteName: json['s'] as String, websiteName: json['s'] as String,
domain: json['d'] as String, domain: json['d'] as String,
trigger: json['t'] as String, trigger: json['t'] as String,
urlTemplate: json['u'] as String, urlTemplate: json['u'] as String,
category: json['c'] as String?, category: json['c'] as String?,
subCategory: json['sc'] as String?, subCategory: json['sc'] as String?,
format: (json['fmt'] as List<dynamic>?) format:
(json['fmt'] as List<dynamic>?)
?.map((e) => $enumDecode(_$BangFormatEnumMap, e)) ?.map((e) => $enumDecode(_$BangFormatEnumMap, e))
.toSet(), .toSet(),
); );
Map<String, dynamic> _$BangToJson(Bang instance) => <String, dynamic>{ Map<String, dynamic> _$BangToJson(Bang instance) => <String, dynamic>{
's': instance.websiteName, 's': instance.websiteName,
'd': instance.domain, 'd': instance.domain,
't': instance.trigger, 't': instance.trigger,
'u': instance.urlTemplate, 'u': instance.urlTemplate,
'c': instance.category, 'c': instance.category,
'sc': instance.subCategory, 'sc': instance.subCategory,
'fmt': instance.format?.map((e) => _$BangFormatEnumMap[e]!).toList(), 'fmt': instance.format?.map((e) => _$BangFormatEnumMap[e]!).toList(),
}; };
const _$BangFormatEnumMap = { const _$BangFormatEnumMap = {
BangFormat.openBasePath: 'open_base_path', BangFormat.openBasePath: 'open_base_path',
@@ -84,7 +84,6 @@ class _$BangDataCWProxyImpl implements _$BangDataCWProxy {
BangData icon(BrowserIcon? icon) => this(icon: icon); BangData icon(BrowserIcon? icon) => this(icon: icon);
@override @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. /// 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 /// Usage
@@ -104,46 +103,56 @@ class _$BangDataCWProxyImpl implements _$BangDataCWProxy {
Object? icon = const $CopyWithPlaceholder(), Object? icon = const $CopyWithPlaceholder(),
}) { }) {
return BangData( return BangData(
websiteName: websiteName == const $CopyWithPlaceholder() websiteName:
? _value.websiteName websiteName == const $CopyWithPlaceholder()
// ignore: cast_nullable_to_non_nullable ? _value.websiteName
: websiteName as String, // ignore: cast_nullable_to_non_nullable
domain: domain == const $CopyWithPlaceholder() : websiteName as String,
? _value.domain domain:
// ignore: cast_nullable_to_non_nullable domain == const $CopyWithPlaceholder()
: domain as String, ? _value.domain
trigger: trigger == const $CopyWithPlaceholder() // ignore: cast_nullable_to_non_nullable
? _value.trigger : domain as String,
// ignore: cast_nullable_to_non_nullable trigger:
: trigger as String, trigger == const $CopyWithPlaceholder()
urlTemplate: urlTemplate == const $CopyWithPlaceholder() ? _value.trigger
? _value.urlTemplate // ignore: cast_nullable_to_non_nullable
// ignore: cast_nullable_to_non_nullable : trigger as String,
: urlTemplate as String, urlTemplate:
category: category == const $CopyWithPlaceholder() urlTemplate == const $CopyWithPlaceholder()
? _value.category ? _value.urlTemplate
// ignore: cast_nullable_to_non_nullable // ignore: cast_nullable_to_non_nullable
: category as String?, : urlTemplate as String,
subCategory: subCategory == const $CopyWithPlaceholder() category:
? _value.subCategory category == const $CopyWithPlaceholder()
// ignore: cast_nullable_to_non_nullable ? _value.category
: subCategory as String?, // ignore: cast_nullable_to_non_nullable
format: format == const $CopyWithPlaceholder() : category as String?,
? _value.format subCategory:
// ignore: cast_nullable_to_non_nullable subCategory == const $CopyWithPlaceholder()
: format as Set<BangFormat>?, ? _value.subCategory
frequency: frequency == const $CopyWithPlaceholder() // ignore: cast_nullable_to_non_nullable
? _value.frequency : subCategory as String?,
// ignore: cast_nullable_to_non_nullable format:
: frequency as int?, format == const $CopyWithPlaceholder()
lastUsed: lastUsed == const $CopyWithPlaceholder() ? _value.format
? _value.lastUsed // ignore: cast_nullable_to_non_nullable
// ignore: cast_nullable_to_non_nullable : format as Set<BangFormat>?,
: lastUsed as DateTime?, frequency:
icon: icon == const $CopyWithPlaceholder() frequency == const $CopyWithPlaceholder()
? _value.icon ? _value.frequency
// ignore: cast_nullable_to_non_nullable // ignore: cast_nullable_to_non_nullable
: icon as BrowserIcon?, : 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,7 +15,7 @@ class BangDataSourceService extends _$BangDataSourceService {
@override @override
void build() {} void build() {}
Future<Result<List<Bang>>> getBangs(Uri url, BangGroup? group) async { Future<Result<List<Bang>>> getBangs(Uri url, BangGroup? group) {
return Result.fromAsync(() async { return Result.fromAsync(() async {
return await compute((args) async { return await compute((args) async {
final client = http.Client(); final client = http.Client();
@@ -7,20 +7,21 @@ part of 'data_source.dart';
// ************************************************************************** // **************************************************************************
String _$bangDataSourceServiceHash() => String _$bangDataSourceServiceHash() =>
r'28b774af3338e3e949ccd0f04205ccd4a7fe67a5'; r'f802b9fb3c467a24d65d170229d37f745ae869e5';
/// See also [BangDataSourceService]. /// See also [BangDataSourceService].
@ProviderFor(BangDataSourceService) @ProviderFor(BangDataSourceService)
final bangDataSourceServiceProvider = final bangDataSourceServiceProvider =
AutoDisposeNotifierProvider<BangDataSourceService, void>.internal( AutoDisposeNotifierProvider<BangDataSourceService, void>.internal(
BangDataSourceService.new, BangDataSourceService.new,
name: r'bangDataSourceServiceProvider', name: r'bangDataSourceServiceProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$bangDataSourceServiceHash, ? null
dependencies: null, : _$bangDataSourceServiceHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
typedef _$BangDataSourceService = AutoDisposeNotifier<void>; typedef _$BangDataSourceService = AutoDisposeNotifier<void>;
// ignore_for_file: type=lint // ignore_for_file: type=lint
@@ -14,9 +14,10 @@ String _$defaultSearchBangDataHash() =>
final defaultSearchBangDataProvider = StreamProvider<BangData?>.internal( final defaultSearchBangDataProvider = StreamProvider<BangData?>.internal(
defaultSearchBangData, defaultSearchBangData,
name: r'defaultSearchBangDataProvider', name: r'defaultSearchBangDataProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$defaultSearchBangDataHash, ? null
: _$defaultSearchBangDataHash,
dependencies: null, dependencies: null,
allTransitiveDependencies: null, allTransitiveDependencies: null,
); );
@@ -30,19 +31,20 @@ String _$bangCategoriesHash() => r'947fcfd2dffcc7f585c6ed7379d319f4fe72293a';
@ProviderFor(bangCategories) @ProviderFor(bangCategories)
final bangCategoriesProvider = final bangCategoriesProvider =
AutoDisposeStreamProvider<Map<String, List<String>>>.internal( AutoDisposeStreamProvider<Map<String, List<String>>>.internal(
bangCategories, bangCategories,
name: r'bangCategoriesProvider', name: r'bangCategoriesProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$bangCategoriesHash, ? null
dependencies: null, : _$bangCategoriesHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead') @Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element // ignore: unused_element
typedef BangCategoriesRef typedef BangCategoriesRef =
= AutoDisposeStreamProviderRef<Map<String, List<String>>>; AutoDisposeStreamProviderRef<Map<String, List<String>>>;
String _$bangListHash() => r'dc168bd1246bea3e5f8015dd52fbf41c5f98ca13'; String _$bangListHash() => r'dc168bd1246bea3e5f8015dd52fbf41c5f98ca13';
/// Copied from Dart SDK /// Copied from Dart SDK
@@ -91,9 +93,7 @@ class BangListFamily extends Family<AsyncValue<List<BangData>>> {
} }
@override @override
BangListProvider getProviderOverride( BangListProvider getProviderOverride(covariant BangListProvider provider) {
covariant BangListProvider provider,
) {
return call( return call(
groups: provider.groups, groups: provider.groups,
domain: provider.domain, domain: provider.domain,
@@ -126,26 +126,26 @@ class BangListProvider extends AutoDisposeStreamProvider<List<BangData>> {
({String category, String? subCategory})? categoryFilter, ({String category, String? subCategory})? categoryFilter,
bool? orderMostFrequentFirst, bool? orderMostFrequentFirst,
}) : this._internal( }) : this._internal(
(ref) => bangList( (ref) => bangList(
ref as BangListRef, ref as BangListRef,
groups: groups, groups: groups,
domain: domain, domain: domain,
categoryFilter: categoryFilter, categoryFilter: categoryFilter,
orderMostFrequentFirst: orderMostFrequentFirst, orderMostFrequentFirst: orderMostFrequentFirst,
), ),
from: bangListProvider, from: bangListProvider,
name: r'bangListProvider', name: r'bangListProvider',
debugGetCreateSourceHash: debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') const bool.fromEnvironment('dart.vm.product')
? null ? null
: _$bangListHash, : _$bangListHash,
dependencies: BangListFamily._dependencies, dependencies: BangListFamily._dependencies,
allTransitiveDependencies: BangListFamily._allTransitiveDependencies, allTransitiveDependencies: BangListFamily._allTransitiveDependencies,
groups: groups, groups: groups,
domain: domain, domain: domain,
categoryFilter: categoryFilter, categoryFilter: categoryFilter,
orderMostFrequentFirst: orderMostFrequentFirst, orderMostFrequentFirst: orderMostFrequentFirst,
); );
BangListProvider._internal( BangListProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -229,7 +229,8 @@ mixin BangListRef on AutoDisposeStreamProviderRef<List<BangData>> {
} }
class _BangListProviderElement class _BangListProviderElement
extends AutoDisposeStreamProviderElement<List<BangData>> with BangListRef { extends AutoDisposeStreamProviderElement<List<BangData>>
with BangListRef {
_BangListProviderElement(super.provider); _BangListProviderElement(super.provider);
@override @override
@@ -250,14 +251,15 @@ String _$frequentBangListHash() => r'2c1ecb7e9416772fc1c32d01d767e1eb4f865975';
@ProviderFor(frequentBangList) @ProviderFor(frequentBangList)
final frequentBangListProvider = final frequentBangListProvider =
AutoDisposeStreamProvider<List<BangData>>.internal( AutoDisposeStreamProvider<List<BangData>>.internal(
frequentBangList, frequentBangList,
name: r'frequentBangListProvider', name: r'frequentBangListProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$frequentBangListHash, ? null
dependencies: null, : _$frequentBangListHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead') @Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element // ignore: unused_element
@@ -268,19 +270,20 @@ String _$searchHistoryHash() => r'7b97798729643de8e44fd8024cdc02f35124b08b';
@ProviderFor(searchHistory) @ProviderFor(searchHistory)
final searchHistoryProvider = final searchHistoryProvider =
AutoDisposeStreamProvider<List<SearchHistoryEntry>>.internal( AutoDisposeStreamProvider<List<SearchHistoryEntry>>.internal(
searchHistory, searchHistory,
name: r'searchHistoryProvider', name: r'searchHistoryProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$searchHistoryHash, ? null
dependencies: null, : _$searchHistoryHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead') @Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element // ignore: unused_element
typedef SearchHistoryRef typedef SearchHistoryRef =
= AutoDisposeStreamProviderRef<List<SearchHistoryEntry>>; AutoDisposeStreamProviderRef<List<SearchHistoryEntry>>;
String _$lastSyncOfGroupHash() => r'23d07f3132ba9bb35a31f74e3a69698d31d4c569'; String _$lastSyncOfGroupHash() => r'23d07f3132ba9bb35a31f74e3a69698d31d4c569';
/// See also [lastSyncOfGroup]. /// See also [lastSyncOfGroup].
@@ -293,21 +296,15 @@ class LastSyncOfGroupFamily extends Family<AsyncValue<DateTime?>> {
const LastSyncOfGroupFamily(); const LastSyncOfGroupFamily();
/// See also [lastSyncOfGroup]. /// See also [lastSyncOfGroup].
LastSyncOfGroupProvider call( LastSyncOfGroupProvider call(BangGroup group) {
BangGroup group, return LastSyncOfGroupProvider(group);
) {
return LastSyncOfGroupProvider(
group,
);
} }
@override @override
LastSyncOfGroupProvider getProviderOverride( LastSyncOfGroupProvider getProviderOverride(
covariant LastSyncOfGroupProvider provider, covariant LastSyncOfGroupProvider provider,
) { ) {
return call( return call(provider.group);
provider.group,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -328,24 +325,20 @@ class LastSyncOfGroupFamily extends Family<AsyncValue<DateTime?>> {
/// See also [lastSyncOfGroup]. /// See also [lastSyncOfGroup].
class LastSyncOfGroupProvider extends AutoDisposeStreamProvider<DateTime?> { class LastSyncOfGroupProvider extends AutoDisposeStreamProvider<DateTime?> {
/// See also [lastSyncOfGroup]. /// See also [lastSyncOfGroup].
LastSyncOfGroupProvider( LastSyncOfGroupProvider(BangGroup group)
BangGroup group, : this._internal(
) : this._internal( (ref) => lastSyncOfGroup(ref as LastSyncOfGroupRef, group),
(ref) => lastSyncOfGroup( from: lastSyncOfGroupProvider,
ref as LastSyncOfGroupRef, name: r'lastSyncOfGroupProvider',
group, debugGetCreateSourceHash:
), const bool.fromEnvironment('dart.vm.product')
from: lastSyncOfGroupProvider, ? null
name: r'lastSyncOfGroupProvider', : _$lastSyncOfGroupHash,
debugGetCreateSourceHash: dependencies: LastSyncOfGroupFamily._dependencies,
const bool.fromEnvironment('dart.vm.product') allTransitiveDependencies:
? null LastSyncOfGroupFamily._allTransitiveDependencies,
: _$lastSyncOfGroupHash, group: group,
dependencies: LastSyncOfGroupFamily._dependencies, );
allTransitiveDependencies:
LastSyncOfGroupFamily._allTransitiveDependencies,
group: group,
);
LastSyncOfGroupProvider._internal( LastSyncOfGroupProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -424,21 +417,15 @@ class BangCountOfGroupFamily extends Family<AsyncValue<int>> {
const BangCountOfGroupFamily(); const BangCountOfGroupFamily();
/// See also [bangCountOfGroup]. /// See also [bangCountOfGroup].
BangCountOfGroupProvider call( BangCountOfGroupProvider call(BangGroup group) {
BangGroup group, return BangCountOfGroupProvider(group);
) {
return BangCountOfGroupProvider(
group,
);
} }
@override @override
BangCountOfGroupProvider getProviderOverride( BangCountOfGroupProvider getProviderOverride(
covariant BangCountOfGroupProvider provider, covariant BangCountOfGroupProvider provider,
) { ) {
return call( return call(provider.group);
provider.group,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -459,24 +446,20 @@ class BangCountOfGroupFamily extends Family<AsyncValue<int>> {
/// See also [bangCountOfGroup]. /// See also [bangCountOfGroup].
class BangCountOfGroupProvider extends AutoDisposeStreamProvider<int> { class BangCountOfGroupProvider extends AutoDisposeStreamProvider<int> {
/// See also [bangCountOfGroup]. /// See also [bangCountOfGroup].
BangCountOfGroupProvider( BangCountOfGroupProvider(BangGroup group)
BangGroup group, : this._internal(
) : this._internal( (ref) => bangCountOfGroup(ref as BangCountOfGroupRef, group),
(ref) => bangCountOfGroup( from: bangCountOfGroupProvider,
ref as BangCountOfGroupRef, name: r'bangCountOfGroupProvider',
group, debugGetCreateSourceHash:
), const bool.fromEnvironment('dart.vm.product')
from: bangCountOfGroupProvider, ? null
name: r'bangCountOfGroupProvider', : _$bangCountOfGroupHash,
debugGetCreateSourceHash: dependencies: BangCountOfGroupFamily._dependencies,
const bool.fromEnvironment('dart.vm.product') allTransitiveDependencies:
? null BangCountOfGroupFamily._allTransitiveDependencies,
: _$bangCountOfGroupHash, group: group,
dependencies: BangCountOfGroupFamily._dependencies, );
allTransitiveDependencies:
BangCountOfGroupFamily._allTransitiveDependencies,
group: group,
);
BangCountOfGroupProvider._internal( BangCountOfGroupProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -535,11 +518,13 @@ mixin BangCountOfGroupRef on AutoDisposeStreamProviderRef<int> {
} }
class _BangCountOfGroupProviderElement class _BangCountOfGroupProviderElement
extends AutoDisposeStreamProviderElement<int> with BangCountOfGroupRef { extends AutoDisposeStreamProviderElement<int>
with BangCountOfGroupRef {
_BangCountOfGroupProviderElement(super.provider); _BangCountOfGroupProviderElement(super.provider);
@override @override
BangGroup get group => (origin as BangCountOfGroupProvider).group; BangGroup get group => (origin as BangCountOfGroupProvider).group;
} }
// ignore_for_file: type=lint // 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 // 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
@@ -1,4 +1,8 @@
import 'dart:async';
import 'package:lensai/features/bangs/data/models/bang_data.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:lensai/features/bangs/domain/repositories/data.dart'; import 'package:lensai/features/bangs/domain/repositories/data.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
@@ -6,6 +10,8 @@ part 'search.g.dart';
@Riverpod() @Riverpod()
class BangSearch extends _$BangSearch { class BangSearch extends _$BangSearch {
late StreamController<List<BangData>> _streamController;
Future<Uri> triggerBangSearch(BangData bang, String searchQuery) async { Future<Uri> triggerBangSearch(BangData bang, String searchQuery) async {
final bangDataNotifier = ref.read(bangDataRepositoryProvider.notifier); final bangDataNotifier = ref.read(bangDataRepositoryProvider.notifier);
@@ -19,6 +25,52 @@ class BangSearch extends _$BangSearch {
return bang.getUrl(searchQuery); return bang.getUrl(searchQuery);
} }
Future<void> search(String input) async {
if (input.isNotEmpty) {
await ref.read(bangDatabaseProvider).bangDao.queryBangs(input).get().then(
(value) {
if (!_streamController.isClosed) {
_streamController.add(value);
}
},
);
}
}
@override @override
void build() {} Stream<List<BangData>> build() {
_streamController = StreamController();
ref.onDispose(() async {
await _streamController.close();
});
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(frequentBangListProvider);
}
} }
@@ -6,20 +6,43 @@ part of 'search.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$bangSearchHash() => r'a9bc5efc6e0df7b64bb648623f65911373a8e8e4'; String _$bangSearchHash() => r'ff7035d269041c6415f2a2afb0a71ef67d3b9841';
/// See also [BangSearch]. /// See also [BangSearch].
@ProviderFor(BangSearch) @ProviderFor(BangSearch)
final bangSearchProvider = final bangSearchProvider =
AutoDisposeNotifierProvider<BangSearch, void>.internal( AutoDisposeStreamNotifierProvider<BangSearch, List<BangData>>.internal(
BangSearch.new, BangSearch.new,
name: r'bangSearchProvider', name: r'bangSearchProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$bangSearchHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$BangSearch = AutoDisposeStreamNotifier<List<BangData>>;
String _$seamlessBangProviderHash() =>
r'c4c0b452c94ba447be5b02dfef5bc16148cc3dc7';
/// See also [SeamlessBangProvider].
@ProviderFor(SeamlessBangProvider)
final seamlessBangProviderProvider = AutoDisposeNotifierProvider<
SeamlessBangProvider,
AsyncValue<List<BangData>>
>.internal(
SeamlessBangProvider.new,
name: r'seamlessBangProviderProvider',
debugGetCreateSourceHash: debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$bangSearchHash, const bool.fromEnvironment('dart.vm.product')
? null
: _$seamlessBangProviderHash,
dependencies: null, dependencies: null,
allTransitiveDependencies: null, allTransitiveDependencies: null,
); );
typedef _$BangSearch = AutoDisposeNotifier<void>; typedef _$SeamlessBangProvider =
AutoDisposeNotifier<AsyncValue<List<BangData>>>;
// ignore_for_file: type=lint // 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 // 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
@@ -13,14 +13,15 @@ String _$bangDataRepositoryHash() =>
@ProviderFor(BangDataRepository) @ProviderFor(BangDataRepository)
final bangDataRepositoryProvider = final bangDataRepositoryProvider =
NotifierProvider<BangDataRepository, void>.internal( NotifierProvider<BangDataRepository, void>.internal(
BangDataRepository.new, BangDataRepository.new,
name: r'bangDataRepositoryProvider', name: r'bangDataRepositoryProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$bangDataRepositoryHash, ? null
dependencies: null, : _$bangDataRepositoryHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
typedef _$BangDataRepository = Notifier<void>; typedef _$BangDataRepository = Notifier<void>;
// ignore_for_file: type=lint // ignore_for_file: type=lint
@@ -1,62 +0,0 @@
import 'dart:async';
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';
@Riverpod()
class BangSearch extends _$BangSearch {
late StreamController<List<BangData>> _streamController;
Future<void> search(String input) async {
if (input.isNotEmpty) {
await ref.read(bangDatabaseProvider).bangDao.queryBangs(input).get().then(
(value) {
if (!_streamController.isClosed) {
_streamController.add(value);
}
},
);
}
}
@override
Stream<List<BangData>> build() {
_streamController = StreamController();
ref.onDispose(() async {
await _streamController.close();
});
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(frequentBangListProvider);
}
}
@@ -1,43 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'search.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$bangSearchHash() => r'abf9ff5badf2ecfbcbde148fd2c849beac83bec4';
/// See also [BangSearch].
@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,
);
typedef _$BangSearch = AutoDisposeStreamNotifier<List<BangData>>;
String _$seamlessBangProviderHash() =>
r'c4c0b452c94ba447be5b02dfef5bc16148cc3dc7';
/// 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
@@ -13,14 +13,15 @@ String _$bangSyncRepositoryHash() =>
@ProviderFor(BangSyncRepository) @ProviderFor(BangSyncRepository)
final bangSyncRepositoryProvider = final bangSyncRepositoryProvider =
NotifierProvider<BangSyncRepository, void>.internal( NotifierProvider<BangSyncRepository, void>.internal(
BangSyncRepository.new, BangSyncRepository.new,
name: r'bangSyncRepositoryProvider', name: r'bangSyncRepositoryProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$bangSyncRepositoryHash, ? null
dependencies: null, : _$bangSyncRepositoryHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
typedef _$BangSyncRepository = Notifier<void>; typedef _$BangSyncRepository = Notifier<void>;
// ignore_for_file: type=lint // ignore_for_file: type=lint
@@ -5,7 +5,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/features/bangs/domain/repositories/search.dart'; import 'package:lensai/features/bangs/domain/providers/search.dart';
import 'package:lensai/features/bangs/presentation/widgets/bang_details.dart'; import 'package:lensai/features/bangs/presentation/widgets/bang_details.dart';
import 'package:lensai/features/geckoview/features/browser/domain/providers.dart'; import 'package:lensai/features/geckoview/features/browser/domain/providers.dart';
import 'package:lensai/features/user/domain/providers.dart'; import 'package:lensai/features/user/domain/providers.dart';
@@ -26,7 +26,7 @@ class BangSearchScreen extends HookConsumerWidget {
text: initialSearchText, text: initialSearchText,
); );
useListenableCallback(textEditingController, () async { useListenableCallback(textEditingController, () {
unawaited( unawaited(
ref ref
.read(bangSearchProvider.notifier) .read(bangSearchProvider.notifier)
@@ -4,7 +4,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/core/routing/routes.dart'; import 'package:lensai/core/routing/routes.dart';
import 'package:lensai/features/bangs/data/models/bang_data.dart'; import 'package:lensai/features/bangs/data/models/bang_data.dart';
import 'package:lensai/features/geckoview/domain/repositories/tab.dart'; import 'package:lensai/features/geckoview/domain/repositories/tab.dart';
import 'package:lensai/presentation/widgets/bang_icon.dart'; import 'package:lensai/presentation/widgets/url_icon.dart';
class BangDetails extends HookConsumerWidget { class BangDetails extends HookConsumerWidget {
final BangData bangData; final BangData bangData;
@@ -12,8 +12,8 @@ import 'package:lensai/features/geckoview/features/search/domain/providers/searc
import 'package:lensai/features/geckoview/features/search/presentation/widgets/search_field.dart'; import 'package:lensai/features/geckoview/features/search/presentation/widgets/search_field.dart';
import 'package:lensai/features/geckoview/features/search/presentation/widgets/search_modules/search_suggestions.dart'; import 'package:lensai/features/geckoview/features/search/presentation/widgets/search_modules/search_suggestions.dart';
import 'package:lensai/presentation/hooks/listenable_callback.dart'; import 'package:lensai/presentation/hooks/listenable_callback.dart';
import 'package:lensai/presentation/widgets/bang_icon.dart';
import 'package:lensai/presentation/widgets/selectable_chips.dart'; import 'package:lensai/presentation/widgets/selectable_chips.dart';
import 'package:lensai/presentation/widgets/url_icon.dart';
class SiteSearch extends HookConsumerWidget { class SiteSearch extends HookConsumerWidget {
final String domain; final String domain;
@@ -33,7 +33,7 @@ class SiteSearch extends HookConsumerWidget {
final searchTextController = useTextEditingController(); final searchTextController = useTextEditingController();
useListenableCallback(searchTextController, () async { useListenableCallback(searchTextController, () {
ref ref
.read(searchSuggestionsProvider().notifier) .read(searchSuggestionsProvider().notifier)
.addQuery(searchTextController.text); .addQuery(searchTextController.text);
@@ -110,7 +110,7 @@ class MessagesDao extends DatabaseAccessor<ChatDatabase>
Future<void> replaceChatMessages({ Future<void> replaceChatMessages({
required String chatId, required String chatId,
required List<Message> messages, required List<Message> messages,
}) async { }) {
return db.transaction(() async { return db.transaction(() async {
await deleteChatMessages(chatId: chatId); await deleteChatMessages(chatId: chatId);
@@ -9,16 +9,22 @@ class ChatData extends Table with TableInfo<ChatData, ChatDataData> {
final String? _alias; final String? _alias;
ChatData(this.attachedDatabase, [this._alias]); ChatData(this.attachedDatabase, [this._alias]);
late final GeneratedColumn<String> chatId = GeneratedColumn<String>( late final GeneratedColumn<String> chatId = GeneratedColumn<String>(
'chat_id', aliasedName, false, 'chat_id',
type: DriftSqlType.string, aliasedName,
requiredDuringInsert: true, false,
$customConstraints: 'PRIMARY KEY NOT NULL'); type: DriftSqlType.string,
requiredDuringInsert: true,
$customConstraints: 'PRIMARY KEY NOT NULL',
);
late final GeneratedColumnWithTypeConverter<ChatMetadata, String> metadata = late final GeneratedColumnWithTypeConverter<ChatMetadata, String> metadata =
GeneratedColumn<String>('metadata', aliasedName, false, GeneratedColumn<String>(
type: DriftSqlType.string, 'metadata',
requiredDuringInsert: true, aliasedName,
$customConstraints: 'NOT NULL') false,
.withConverter<ChatMetadata>(ChatData.$convertermetadata); type: DriftSqlType.string,
requiredDuringInsert: true,
$customConstraints: 'NOT NULL',
).withConverter<ChatMetadata>(ChatData.$convertermetadata);
@override @override
List<GeneratedColumn> get $columns => [chatId, metadata]; List<GeneratedColumn> get $columns => [chatId, metadata];
@override @override
@@ -32,10 +38,17 @@ class ChatData extends Table with TableInfo<ChatData, ChatDataData> {
ChatDataData map(Map<String, dynamic> data, {String? tablePrefix}) { ChatDataData map(Map<String, dynamic> data, {String? tablePrefix}) {
final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : '';
return ChatDataData( return ChatDataData(
chatId: attachedDatabase.typeMapping chatId:
.read(DriftSqlType.string, data['${effectivePrefix}chat_id'])!, attachedDatabase.typeMapping.read(
metadata: ChatData.$convertermetadata.fromSql(attachedDatabase.typeMapping DriftSqlType.string,
.read(DriftSqlType.string, data['${effectivePrefix}metadata'])!), data['${effectivePrefix}chat_id'],
)!,
metadata: ChatData.$convertermetadata.fromSql(
attachedDatabase.typeMapping.read(
DriftSqlType.string,
data['${effectivePrefix}metadata'],
)!,
),
); );
} }
@@ -59,14 +72,17 @@ class ChatDataData extends DataClass implements Insertable<ChatDataData> {
final map = <String, Expression>{}; final map = <String, Expression>{};
map['chat_id'] = Variable<String>(chatId); map['chat_id'] = Variable<String>(chatId);
{ {
map['metadata'] = map['metadata'] = Variable<String>(
Variable<String>(ChatData.$convertermetadata.toSql(metadata)); ChatData.$convertermetadata.toSql(metadata),
);
} }
return map; return map;
} }
factory ChatDataData.fromJson(Map<String, dynamic> json, factory ChatDataData.fromJson(
{ValueSerializer? serializer}) { Map<String, dynamic> json, {
ValueSerializer? serializer,
}) {
serializer ??= driftRuntimeOptions.defaultSerializer; serializer ??= driftRuntimeOptions.defaultSerializer;
return ChatDataData( return ChatDataData(
chatId: serializer.fromJson<String>(json['chat_id']), chatId: serializer.fromJson<String>(json['chat_id']),
@@ -126,8 +142,8 @@ class ChatDataCompanion extends UpdateCompanion<ChatDataData> {
required String chatId, required String chatId,
required ChatMetadata metadata, required ChatMetadata metadata,
this.rowid = const Value.absent(), this.rowid = const Value.absent(),
}) : chatId = Value(chatId), }) : chatId = Value(chatId),
metadata = Value(metadata); metadata = Value(metadata);
static Insertable<ChatDataData> custom({ static Insertable<ChatDataData> custom({
Expression<String>? chatId, Expression<String>? chatId,
Expression<String>? metadata, Expression<String>? metadata,
@@ -140,10 +156,11 @@ class ChatDataCompanion extends UpdateCompanion<ChatDataData> {
}); });
} }
ChatDataCompanion copyWith( ChatDataCompanion copyWith({
{Value<String>? chatId, Value<String>? chatId,
Value<ChatMetadata>? metadata, Value<ChatMetadata>? metadata,
Value<int>? rowid}) { Value<int>? rowid,
}) {
return ChatDataCompanion( return ChatDataCompanion(
chatId: chatId ?? this.chatId, chatId: chatId ?? this.chatId,
metadata: metadata ?? this.metadata, metadata: metadata ?? this.metadata,
@@ -158,8 +175,9 @@ class ChatDataCompanion extends UpdateCompanion<ChatDataData> {
map['chat_id'] = Variable<String>(chatId.value); map['chat_id'] = Variable<String>(chatId.value);
} }
if (metadata.present) { if (metadata.present) {
map['metadata'] = map['metadata'] = Variable<String>(
Variable<String>(ChatData.$convertermetadata.toSql(metadata.value)); ChatData.$convertermetadata.toSql(metadata.value),
);
} }
if (rowid.present) { if (rowid.present) {
map['rowid'] = Variable<int>(rowid.value); map['rowid'] = Variable<int>(rowid.value);
@@ -184,28 +202,44 @@ class ChatMessage extends Table with TableInfo<ChatMessage, ChatMessageData> {
final String? _alias; final String? _alias;
ChatMessage(this.attachedDatabase, [this._alias]); ChatMessage(this.attachedDatabase, [this._alias]);
late final GeneratedColumn<String> messageId = GeneratedColumn<String>( late final GeneratedColumn<String> messageId = GeneratedColumn<String>(
'message_id', aliasedName, false, 'message_id',
type: DriftSqlType.string, aliasedName,
requiredDuringInsert: true, false,
$customConstraints: 'PRIMARY KEY NOT NULL'); type: DriftSqlType.string,
requiredDuringInsert: true,
$customConstraints: 'PRIMARY KEY NOT NULL',
);
late final GeneratedColumn<String> chatId = GeneratedColumn<String>( late final GeneratedColumn<String> chatId = GeneratedColumn<String>(
'chat_id', aliasedName, false, 'chat_id',
type: DriftSqlType.string, aliasedName,
requiredDuringInsert: true, false,
$customConstraints: 'NOT NULL'); type: DriftSqlType.string,
requiredDuringInsert: true,
$customConstraints: 'NOT NULL',
);
late final GeneratedColumn<String> orderKey = GeneratedColumn<String>( late final GeneratedColumn<String> orderKey = GeneratedColumn<String>(
'order_key', aliasedName, false, 'order_key',
type: DriftSqlType.string, aliasedName,
requiredDuringInsert: true, false,
$customConstraints: 'NOT NULL'); type: DriftSqlType.string,
requiredDuringInsert: true,
$customConstraints: 'NOT NULL',
);
late final GeneratedColumn<String> messageJson = GeneratedColumn<String>( late final GeneratedColumn<String> messageJson = GeneratedColumn<String>(
'message_json', aliasedName, false, 'message_json',
type: DriftSqlType.string, aliasedName,
requiredDuringInsert: true, false,
$customConstraints: 'NOT NULL'); type: DriftSqlType.string,
requiredDuringInsert: true,
$customConstraints: 'NOT NULL',
);
@override @override
List<GeneratedColumn> get $columns => List<GeneratedColumn> get $columns => [
[messageId, chatId, orderKey, messageJson]; messageId,
chatId,
orderKey,
messageJson,
];
@override @override
String get aliasedName => _alias ?? actualTableName; String get aliasedName => _alias ?? actualTableName;
@override @override
@@ -217,14 +251,26 @@ class ChatMessage extends Table with TableInfo<ChatMessage, ChatMessageData> {
ChatMessageData map(Map<String, dynamic> data, {String? tablePrefix}) { ChatMessageData map(Map<String, dynamic> data, {String? tablePrefix}) {
final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : '';
return ChatMessageData( return ChatMessageData(
messageId: attachedDatabase.typeMapping messageId:
.read(DriftSqlType.string, data['${effectivePrefix}message_id'])!, attachedDatabase.typeMapping.read(
chatId: attachedDatabase.typeMapping DriftSqlType.string,
.read(DriftSqlType.string, data['${effectivePrefix}chat_id'])!, data['${effectivePrefix}message_id'],
orderKey: attachedDatabase.typeMapping )!,
.read(DriftSqlType.string, data['${effectivePrefix}order_key'])!, chatId:
messageJson: attachedDatabase.typeMapping attachedDatabase.typeMapping.read(
.read(DriftSqlType.string, data['${effectivePrefix}message_json'])!, DriftSqlType.string,
data['${effectivePrefix}chat_id'],
)!,
orderKey:
attachedDatabase.typeMapping.read(
DriftSqlType.string,
data['${effectivePrefix}order_key'],
)!,
messageJson:
attachedDatabase.typeMapping.read(
DriftSqlType.string,
data['${effectivePrefix}message_json'],
)!,
); );
} }
@@ -242,11 +288,12 @@ class ChatMessageData extends DataClass implements Insertable<ChatMessageData> {
final String chatId; final String chatId;
final String orderKey; final String orderKey;
final String messageJson; final String messageJson;
const ChatMessageData( const ChatMessageData({
{required this.messageId, required this.messageId,
required this.chatId, required this.chatId,
required this.orderKey, required this.orderKey,
required this.messageJson}); required this.messageJson,
});
@override @override
Map<String, Expression> toColumns(bool nullToAbsent) { Map<String, Expression> toColumns(bool nullToAbsent) {
final map = <String, Expression>{}; final map = <String, Expression>{};
@@ -257,8 +304,10 @@ class ChatMessageData extends DataClass implements Insertable<ChatMessageData> {
return map; return map;
} }
factory ChatMessageData.fromJson(Map<String, dynamic> json, factory ChatMessageData.fromJson(
{ValueSerializer? serializer}) { Map<String, dynamic> json, {
ValueSerializer? serializer,
}) {
serializer ??= driftRuntimeOptions.defaultSerializer; serializer ??= driftRuntimeOptions.defaultSerializer;
return ChatMessageData( return ChatMessageData(
messageId: serializer.fromJson<String>(json['message_id']), messageId: serializer.fromJson<String>(json['message_id']),
@@ -278,17 +327,17 @@ class ChatMessageData extends DataClass implements Insertable<ChatMessageData> {
}; };
} }
ChatMessageData copyWith( ChatMessageData copyWith({
{String? messageId, String? messageId,
String? chatId, String? chatId,
String? orderKey, String? orderKey,
String? messageJson}) => String? messageJson,
ChatMessageData( }) => ChatMessageData(
messageId: messageId ?? this.messageId, messageId: messageId ?? this.messageId,
chatId: chatId ?? this.chatId, chatId: chatId ?? this.chatId,
orderKey: orderKey ?? this.orderKey, orderKey: orderKey ?? this.orderKey,
messageJson: messageJson ?? this.messageJson, messageJson: messageJson ?? this.messageJson,
); );
ChatMessageData copyWithCompanion(ChatMessageCompanion data) { ChatMessageData copyWithCompanion(ChatMessageCompanion data) {
return ChatMessageData( return ChatMessageData(
messageId: data.messageId.present ? data.messageId.value : this.messageId, messageId: data.messageId.present ? data.messageId.value : this.messageId,
@@ -341,10 +390,10 @@ class ChatMessageCompanion extends UpdateCompanion<ChatMessageData> {
required String orderKey, required String orderKey,
required String messageJson, required String messageJson,
this.rowid = const Value.absent(), this.rowid = const Value.absent(),
}) : messageId = Value(messageId), }) : messageId = Value(messageId),
chatId = Value(chatId), chatId = Value(chatId),
orderKey = Value(orderKey), orderKey = Value(orderKey),
messageJson = Value(messageJson); messageJson = Value(messageJson);
static Insertable<ChatMessageData> custom({ static Insertable<ChatMessageData> custom({
Expression<String>? messageId, Expression<String>? messageId,
Expression<String>? chatId, Expression<String>? chatId,
@@ -361,12 +410,13 @@ class ChatMessageCompanion extends UpdateCompanion<ChatMessageData> {
}); });
} }
ChatMessageCompanion copyWith( ChatMessageCompanion copyWith({
{Value<String>? messageId, Value<String>? messageId,
Value<String>? chatId, Value<String>? chatId,
Value<String>? orderKey, Value<String>? orderKey,
Value<String>? messageJson, Value<String>? messageJson,
Value<int>? rowid}) { Value<int>? rowid,
}) {
return ChatMessageCompanion( return ChatMessageCompanion(
messageId: messageId ?? this.messageId, messageId: messageId ?? this.messageId,
chatId: chatId ?? this.chatId, chatId: chatId ?? this.chatId,
@@ -415,80 +465,79 @@ abstract class _$ChatDatabase extends GeneratedDatabase {
$ChatDatabaseManager get managers => $ChatDatabaseManager(this); $ChatDatabaseManager get managers => $ChatDatabaseManager(this);
late final ChatData chatData = ChatData(this); late final ChatData chatData = ChatData(this);
late final ChatMessage chatMessage = ChatMessage(this); late final ChatMessage chatMessage = ChatMessage(this);
late final Index groupOrderIdx = Index('group_order_idx', late final Index groupOrderIdx = Index(
'CREATE UNIQUE INDEX group_order_idx ON chat_message (chat_id, order_key)'); 'group_order_idx',
'CREATE UNIQUE INDEX group_order_idx ON chat_message (chat_id, order_key)',
);
late final MessagesDao messagesDao = MessagesDao(this as ChatDatabase); late final MessagesDao messagesDao = MessagesDao(this as ChatDatabase);
late final MetadataDao metadataDao = MetadataDao(this as ChatDatabase); late final MetadataDao metadataDao = MetadataDao(this as ChatDatabase);
Selectable<String> leadingOrderKey( Selectable<String> leadingOrderKey({
{required int bucket, required String chatId}) { required int bucket,
required String chatId,
}) {
return customSelect( return customSelect(
'SELECT lexo_rank_previous(?1, (SELECT order_key FROM chat_message WHERE chat_id = ?2 ORDER BY order_key LIMIT 1)) AS _c0', 'SELECT lexo_rank_previous(?1, (SELECT order_key FROM chat_message WHERE chat_id = ?2 ORDER BY order_key LIMIT 1)) AS _c0',
variables: [ variables: [Variable<int>(bucket), Variable<String>(chatId)],
Variable<int>(bucket), readsFrom: {chatMessage},
Variable<String>(chatId) ).map((QueryRow row) => row.read<String>('_c0'));
],
readsFrom: {
chatMessage,
}).map((QueryRow row) => row.read<String>('_c0'));
} }
Selectable<String> trailingOrderKey( Selectable<String> trailingOrderKey({
{required int bucket, required String chatId}) { required int bucket,
required String chatId,
}) {
return customSelect( return customSelect(
'SELECT lexo_rank_next(?1, (SELECT order_key FROM chat_message WHERE chat_id = ?2 ORDER BY order_key DESC LIMIT 1)) AS _c0', 'SELECT lexo_rank_next(?1, (SELECT order_key FROM chat_message WHERE chat_id = ?2 ORDER BY order_key DESC LIMIT 1)) AS _c0',
variables: [ variables: [Variable<int>(bucket), Variable<String>(chatId)],
Variable<int>(bucket), readsFrom: {chatMessage},
Variable<String>(chatId) ).map((QueryRow row) => row.read<String>('_c0'));
],
readsFrom: {
chatMessage,
}).map((QueryRow row) => row.read<String>('_c0'));
} }
Selectable<String> orderKeyBeforeIndex( Selectable<String> orderKeyBeforeIndex({
{required String chatId, required int rowIdx}) { required String chatId,
required int rowIdx,
}) {
return customSelect( return customSelect(
'WITH ordered_table AS (SELECT message_id, order_key, LEAD(order_key)OVER (ORDER BY order_key RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE NO OTHERS) AS next_order_key, ROW_NUMBER()OVER (ORDER BY order_key RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE NO OTHERS) AS row_idx, COUNT(*)OVER (RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE NO OTHERS) AS total_rows FROM chat_message WHERE chat_id = ?1) SELECT lexo_rank_reorder_after(order_key, next_order_key) AS _c0 FROM ordered_table WHERE row_idx = MIN(?2, total_rows)', 'WITH ordered_table AS (SELECT message_id, order_key, LEAD(order_key)OVER (ORDER BY order_key RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE NO OTHERS) AS next_order_key, ROW_NUMBER()OVER (ORDER BY order_key RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE NO OTHERS) AS row_idx, COUNT(*)OVER (RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE NO OTHERS) AS total_rows FROM chat_message WHERE chat_id = ?1) SELECT lexo_rank_reorder_after(order_key, next_order_key) AS _c0 FROM ordered_table WHERE row_idx = MIN(?2, total_rows)',
variables: [ variables: [Variable<String>(chatId), Variable<int>(rowIdx)],
Variable<String>(chatId), readsFrom: {chatMessage},
Variable<int>(rowIdx) ).map((QueryRow row) => row.read<String>('_c0'));
],
readsFrom: {
chatMessage,
}).map((QueryRow row) => row.read<String>('_c0'));
} }
Selectable<int> messageIndex( Selectable<int> messageIndex({
{required String chatId, required String messageId}) { required String chatId,
required String messageId,
}) {
return customSelect( return customSelect(
'WITH ordered_table AS (SELECT message_id, ROW_NUMBER()OVER (ORDER BY order_key RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE NO OTHERS) AS row_idx FROM chat_message WHERE chat_id = ?1) SELECT row_idx FROM ordered_table WHERE message_id = ?2', 'WITH ordered_table AS (SELECT message_id, ROW_NUMBER()OVER (ORDER BY order_key RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW EXCLUDE NO OTHERS) AS row_idx FROM chat_message WHERE chat_id = ?1) SELECT row_idx FROM ordered_table WHERE message_id = ?2',
variables: [ variables: [Variable<String>(chatId), Variable<String>(messageId)],
Variable<String>(chatId), readsFrom: {chatMessage},
Variable<String>(messageId) ).map((QueryRow row) => row.read<int>('row_idx'));
],
readsFrom: {
chatMessage,
}).map((QueryRow row) => row.read<int>('row_idx'));
} }
@override @override
Iterable<TableInfo<Table, Object?>> get allTables => Iterable<TableInfo<Table, Object?>> get allTables =>
allSchemaEntities.whereType<TableInfo<Table, Object?>>(); allSchemaEntities.whereType<TableInfo<Table, Object?>>();
@override @override
List<DatabaseSchemaEntity> get allSchemaEntities => List<DatabaseSchemaEntity> get allSchemaEntities => [
[chatData, chatMessage, groupOrderIdx]; chatData,
chatMessage,
groupOrderIdx,
];
} }
typedef $ChatDataCreateCompanionBuilder = ChatDataCompanion Function({ typedef $ChatDataCreateCompanionBuilder =
required String chatId, ChatDataCompanion Function({
required ChatMetadata metadata, required String chatId,
Value<int> rowid, required ChatMetadata metadata,
}); Value<int> rowid,
typedef $ChatDataUpdateCompanionBuilder = ChatDataCompanion Function({ });
Value<String> chatId, typedef $ChatDataUpdateCompanionBuilder =
Value<ChatMetadata> metadata, ChatDataCompanion Function({
Value<int> rowid, Value<String> chatId,
}); Value<ChatMetadata> metadata,
Value<int> rowid,
});
class $ChatDataFilterComposer extends Composer<_$ChatDatabase, ChatData> { class $ChatDataFilterComposer extends Composer<_$ChatDatabase, ChatData> {
$ChatDataFilterComposer({ $ChatDataFilterComposer({
@@ -499,12 +548,15 @@ class $ChatDataFilterComposer extends Composer<_$ChatDatabase, ChatData> {
super.$removeJoinBuilderFromRootComposer, super.$removeJoinBuilderFromRootComposer,
}); });
ColumnFilters<String> get chatId => $composableBuilder( ColumnFilters<String> get chatId => $composableBuilder(
column: $table.chatId, builder: (column) => ColumnFilters(column)); column: $table.chatId,
builder: (column) => ColumnFilters(column),
);
ColumnWithTypeConverterFilters<ChatMetadata, ChatMetadata, String> ColumnWithTypeConverterFilters<ChatMetadata, ChatMetadata, String>
get metadata => $composableBuilder( get metadata => $composableBuilder(
column: $table.metadata, column: $table.metadata,
builder: (column) => ColumnWithTypeConverterFilters(column)); builder: (column) => ColumnWithTypeConverterFilters(column),
);
} }
class $ChatDataOrderingComposer extends Composer<_$ChatDatabase, ChatData> { class $ChatDataOrderingComposer extends Composer<_$ChatDatabase, ChatData> {
@@ -516,10 +568,14 @@ class $ChatDataOrderingComposer extends Composer<_$ChatDatabase, ChatData> {
super.$removeJoinBuilderFromRootComposer, super.$removeJoinBuilderFromRootComposer,
}); });
ColumnOrderings<String> get chatId => $composableBuilder( ColumnOrderings<String> get chatId => $composableBuilder(
column: $table.chatId, builder: (column) => ColumnOrderings(column)); column: $table.chatId,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<String> get metadata => $composableBuilder( ColumnOrderings<String> get metadata => $composableBuilder(
column: $table.metadata, builder: (column) => ColumnOrderings(column)); column: $table.metadata,
builder: (column) => ColumnOrderings(column),
);
} }
class $ChatDataAnnotationComposer extends Composer<_$ChatDatabase, ChatData> { class $ChatDataAnnotationComposer extends Composer<_$ChatDatabase, ChatData> {
@@ -537,81 +593,100 @@ class $ChatDataAnnotationComposer extends Composer<_$ChatDatabase, ChatData> {
$composableBuilder(column: $table.metadata, builder: (column) => column); $composableBuilder(column: $table.metadata, builder: (column) => column);
} }
class $ChatDataTableManager extends RootTableManager< class $ChatDataTableManager
_$ChatDatabase, extends
ChatData, RootTableManager<
ChatDataData, _$ChatDatabase,
$ChatDataFilterComposer, ChatData,
$ChatDataOrderingComposer, ChatDataData,
$ChatDataAnnotationComposer, $ChatDataFilterComposer,
$ChatDataCreateCompanionBuilder, $ChatDataOrderingComposer,
$ChatDataUpdateCompanionBuilder, $ChatDataAnnotationComposer,
(ChatDataData, BaseReferences<_$ChatDatabase, ChatData, ChatDataData>), $ChatDataCreateCompanionBuilder,
ChatDataData, $ChatDataUpdateCompanionBuilder,
PrefetchHooks Function()> { (
ChatDataData,
BaseReferences<_$ChatDatabase, ChatData, ChatDataData>,
),
ChatDataData,
PrefetchHooks Function()
> {
$ChatDataTableManager(_$ChatDatabase db, ChatData table) $ChatDataTableManager(_$ChatDatabase db, ChatData table)
: super(TableManagerState( : super(
TableManagerState(
db: db, db: db,
table: table, table: table,
createFilteringComposer: () => createFilteringComposer:
$ChatDataFilterComposer($db: db, $table: table), () => $ChatDataFilterComposer($db: db, $table: table),
createOrderingComposer: () => createOrderingComposer:
$ChatDataOrderingComposer($db: db, $table: table), () => $ChatDataOrderingComposer($db: db, $table: table),
createComputedFieldComposer: () => createComputedFieldComposer:
$ChatDataAnnotationComposer($db: db, $table: table), () => $ChatDataAnnotationComposer($db: db, $table: table),
updateCompanionCallback: ({ updateCompanionCallback:
Value<String> chatId = const Value.absent(), ({
Value<ChatMetadata> metadata = const Value.absent(), Value<String> chatId = const Value.absent(),
Value<int> rowid = const Value.absent(), Value<ChatMetadata> metadata = const Value.absent(),
}) => Value<int> rowid = const Value.absent(),
ChatDataCompanion( }) => ChatDataCompanion(
chatId: chatId, chatId: chatId,
metadata: metadata, metadata: metadata,
rowid: rowid, rowid: rowid,
), ),
createCompanionCallback: ({ createCompanionCallback:
required String chatId, ({
required ChatMetadata metadata, required String chatId,
Value<int> rowid = const Value.absent(), required ChatMetadata metadata,
}) => Value<int> rowid = const Value.absent(),
ChatDataCompanion.insert( }) => ChatDataCompanion.insert(
chatId: chatId, chatId: chatId,
metadata: metadata, metadata: metadata,
rowid: rowid, rowid: rowid,
), ),
withReferenceMapper: (p0) => p0 withReferenceMapper:
.map((e) => (e.readTable(table), BaseReferences(db, table, e))) (p0) =>
.toList(), p0
.map(
(e) => (
e.readTable(table),
BaseReferences(db, table, e),
),
)
.toList(),
prefetchHooksCallback: null, prefetchHooksCallback: null,
)); ),
);
} }
typedef $ChatDataProcessedTableManager = ProcessedTableManager< typedef $ChatDataProcessedTableManager =
_$ChatDatabase, ProcessedTableManager<
ChatData, _$ChatDatabase,
ChatDataData, ChatData,
$ChatDataFilterComposer, ChatDataData,
$ChatDataOrderingComposer, $ChatDataFilterComposer,
$ChatDataAnnotationComposer, $ChatDataOrderingComposer,
$ChatDataCreateCompanionBuilder, $ChatDataAnnotationComposer,
$ChatDataUpdateCompanionBuilder, $ChatDataCreateCompanionBuilder,
(ChatDataData, BaseReferences<_$ChatDatabase, ChatData, ChatDataData>), $ChatDataUpdateCompanionBuilder,
ChatDataData, (ChatDataData, BaseReferences<_$ChatDatabase, ChatData, ChatDataData>),
PrefetchHooks Function()>; ChatDataData,
typedef $ChatMessageCreateCompanionBuilder = ChatMessageCompanion Function({ PrefetchHooks Function()
required String messageId, >;
required String chatId, typedef $ChatMessageCreateCompanionBuilder =
required String orderKey, ChatMessageCompanion Function({
required String messageJson, required String messageId,
Value<int> rowid, required String chatId,
}); required String orderKey,
typedef $ChatMessageUpdateCompanionBuilder = ChatMessageCompanion Function({ required String messageJson,
Value<String> messageId, Value<int> rowid,
Value<String> chatId, });
Value<String> orderKey, typedef $ChatMessageUpdateCompanionBuilder =
Value<String> messageJson, ChatMessageCompanion Function({
Value<int> rowid, Value<String> messageId,
}); Value<String> chatId,
Value<String> orderKey,
Value<String> messageJson,
Value<int> rowid,
});
class $ChatMessageFilterComposer extends Composer<_$ChatDatabase, ChatMessage> { class $ChatMessageFilterComposer extends Composer<_$ChatDatabase, ChatMessage> {
$ChatMessageFilterComposer({ $ChatMessageFilterComposer({
@@ -622,16 +697,24 @@ class $ChatMessageFilterComposer extends Composer<_$ChatDatabase, ChatMessage> {
super.$removeJoinBuilderFromRootComposer, super.$removeJoinBuilderFromRootComposer,
}); });
ColumnFilters<String> get messageId => $composableBuilder( ColumnFilters<String> get messageId => $composableBuilder(
column: $table.messageId, builder: (column) => ColumnFilters(column)); column: $table.messageId,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<String> get chatId => $composableBuilder( ColumnFilters<String> get chatId => $composableBuilder(
column: $table.chatId, builder: (column) => ColumnFilters(column)); column: $table.chatId,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<String> get orderKey => $composableBuilder( ColumnFilters<String> get orderKey => $composableBuilder(
column: $table.orderKey, builder: (column) => ColumnFilters(column)); column: $table.orderKey,
builder: (column) => ColumnFilters(column),
);
ColumnFilters<String> get messageJson => $composableBuilder( ColumnFilters<String> get messageJson => $composableBuilder(
column: $table.messageJson, builder: (column) => ColumnFilters(column)); column: $table.messageJson,
builder: (column) => ColumnFilters(column),
);
} }
class $ChatMessageOrderingComposer class $ChatMessageOrderingComposer
@@ -644,16 +727,24 @@ class $ChatMessageOrderingComposer
super.$removeJoinBuilderFromRootComposer, super.$removeJoinBuilderFromRootComposer,
}); });
ColumnOrderings<String> get messageId => $composableBuilder( ColumnOrderings<String> get messageId => $composableBuilder(
column: $table.messageId, builder: (column) => ColumnOrderings(column)); column: $table.messageId,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<String> get chatId => $composableBuilder( ColumnOrderings<String> get chatId => $composableBuilder(
column: $table.chatId, builder: (column) => ColumnOrderings(column)); column: $table.chatId,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<String> get orderKey => $composableBuilder( ColumnOrderings<String> get orderKey => $composableBuilder(
column: $table.orderKey, builder: (column) => ColumnOrderings(column)); column: $table.orderKey,
builder: (column) => ColumnOrderings(column),
);
ColumnOrderings<String> get messageJson => $composableBuilder( ColumnOrderings<String> get messageJson => $composableBuilder(
column: $table.messageJson, builder: (column) => ColumnOrderings(column)); column: $table.messageJson,
builder: (column) => ColumnOrderings(column),
);
} }
class $ChatMessageAnnotationComposer class $ChatMessageAnnotationComposer
@@ -675,84 +766,100 @@ class $ChatMessageAnnotationComposer
$composableBuilder(column: $table.orderKey, builder: (column) => column); $composableBuilder(column: $table.orderKey, builder: (column) => column);
GeneratedColumn<String> get messageJson => $composableBuilder( GeneratedColumn<String> get messageJson => $composableBuilder(
column: $table.messageJson, builder: (column) => column); column: $table.messageJson,
builder: (column) => column,
);
} }
class $ChatMessageTableManager extends RootTableManager< class $ChatMessageTableManager
_$ChatDatabase, extends
ChatMessage, RootTableManager<
ChatMessageData, _$ChatDatabase,
$ChatMessageFilterComposer, ChatMessage,
$ChatMessageOrderingComposer, ChatMessageData,
$ChatMessageAnnotationComposer, $ChatMessageFilterComposer,
$ChatMessageCreateCompanionBuilder, $ChatMessageOrderingComposer,
$ChatMessageUpdateCompanionBuilder, $ChatMessageAnnotationComposer,
( $ChatMessageCreateCompanionBuilder,
ChatMessageData, $ChatMessageUpdateCompanionBuilder,
BaseReferences<_$ChatDatabase, ChatMessage, ChatMessageData> (
), ChatMessageData,
ChatMessageData, BaseReferences<_$ChatDatabase, ChatMessage, ChatMessageData>,
PrefetchHooks Function()> { ),
ChatMessageData,
PrefetchHooks Function()
> {
$ChatMessageTableManager(_$ChatDatabase db, ChatMessage table) $ChatMessageTableManager(_$ChatDatabase db, ChatMessage table)
: super(TableManagerState( : super(
TableManagerState(
db: db, db: db,
table: table, table: table,
createFilteringComposer: () => createFilteringComposer:
$ChatMessageFilterComposer($db: db, $table: table), () => $ChatMessageFilterComposer($db: db, $table: table),
createOrderingComposer: () => createOrderingComposer:
$ChatMessageOrderingComposer($db: db, $table: table), () => $ChatMessageOrderingComposer($db: db, $table: table),
createComputedFieldComposer: () => createComputedFieldComposer:
$ChatMessageAnnotationComposer($db: db, $table: table), () => $ChatMessageAnnotationComposer($db: db, $table: table),
updateCompanionCallback: ({ updateCompanionCallback:
Value<String> messageId = const Value.absent(), ({
Value<String> chatId = const Value.absent(), Value<String> messageId = const Value.absent(),
Value<String> orderKey = const Value.absent(), Value<String> chatId = const Value.absent(),
Value<String> messageJson = const Value.absent(), Value<String> orderKey = const Value.absent(),
Value<int> rowid = const Value.absent(), Value<String> messageJson = const Value.absent(),
}) => Value<int> rowid = const Value.absent(),
ChatMessageCompanion( }) => ChatMessageCompanion(
messageId: messageId, messageId: messageId,
chatId: chatId, chatId: chatId,
orderKey: orderKey, orderKey: orderKey,
messageJson: messageJson, messageJson: messageJson,
rowid: rowid, rowid: rowid,
), ),
createCompanionCallback: ({ createCompanionCallback:
required String messageId, ({
required String chatId, required String messageId,
required String orderKey, required String chatId,
required String messageJson, required String orderKey,
Value<int> rowid = const Value.absent(), required String messageJson,
}) => Value<int> rowid = const Value.absent(),
ChatMessageCompanion.insert( }) => ChatMessageCompanion.insert(
messageId: messageId, messageId: messageId,
chatId: chatId, chatId: chatId,
orderKey: orderKey, orderKey: orderKey,
messageJson: messageJson, messageJson: messageJson,
rowid: rowid, rowid: rowid,
), ),
withReferenceMapper: (p0) => p0 withReferenceMapper:
.map((e) => (e.readTable(table), BaseReferences(db, table, e))) (p0) =>
.toList(), p0
.map(
(e) => (
e.readTable(table),
BaseReferences(db, table, e),
),
)
.toList(),
prefetchHooksCallback: null, prefetchHooksCallback: null,
)); ),
);
} }
typedef $ChatMessageProcessedTableManager = ProcessedTableManager< typedef $ChatMessageProcessedTableManager =
_$ChatDatabase, ProcessedTableManager<
ChatMessage, _$ChatDatabase,
ChatMessageData, ChatMessage,
$ChatMessageFilterComposer,
$ChatMessageOrderingComposer,
$ChatMessageAnnotationComposer,
$ChatMessageCreateCompanionBuilder,
$ChatMessageUpdateCompanionBuilder,
(
ChatMessageData, ChatMessageData,
BaseReferences<_$ChatDatabase, ChatMessage, ChatMessageData> $ChatMessageFilterComposer,
), $ChatMessageOrderingComposer,
ChatMessageData, $ChatMessageAnnotationComposer,
PrefetchHooks Function()>; $ChatMessageCreateCompanionBuilder,
$ChatMessageUpdateCompanionBuilder,
(
ChatMessageData,
BaseReferences<_$ChatDatabase, ChatMessage, ChatMessageData>,
),
ChatMessageData,
PrefetchHooks Function()
>;
class $ChatDatabaseManager { class $ChatDatabaseManager {
final _$ChatDatabase _db; final _$ChatDatabase _db;
@@ -7,9 +7,9 @@ part of 'chat_metadata.dart';
// ************************************************************************** // **************************************************************************
ChatMetadata _$ChatMetadataFromJson(Map<String, dynamic> json) => ChatMetadata( ChatMetadata _$ChatMetadataFromJson(Map<String, dynamic> json) => ChatMetadata(
mainDocumentId: json['mainDocumentId'] as String?, mainDocumentId: json['mainDocumentId'] as String?,
contextId: json['contextId'] as String?, contextId: json['contextId'] as String?,
); );
Map<String, dynamic> _$ChatMetadataToJson(ChatMetadata instance) => Map<String, dynamic> _$ChatMetadataToJson(ChatMetadata instance) =>
<String, dynamic>{ <String, dynamic>{
@@ -39,21 +39,15 @@ class ChatControllerFamily extends Family<DriftChatController> {
const ChatControllerFamily(); const ChatControllerFamily();
/// See also [chatController]. /// See also [chatController].
ChatControllerProvider call( ChatControllerProvider call(String chatId) {
String chatId, return ChatControllerProvider(chatId);
) {
return ChatControllerProvider(
chatId,
);
} }
@override @override
ChatControllerProvider getProviderOverride( ChatControllerProvider getProviderOverride(
covariant ChatControllerProvider provider, covariant ChatControllerProvider provider,
) { ) {
return call( return call(provider.chatId);
provider.chatId,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -74,24 +68,20 @@ class ChatControllerFamily extends Family<DriftChatController> {
/// See also [chatController]. /// See also [chatController].
class ChatControllerProvider extends AutoDisposeProvider<DriftChatController> { class ChatControllerProvider extends AutoDisposeProvider<DriftChatController> {
/// See also [chatController]. /// See also [chatController].
ChatControllerProvider( ChatControllerProvider(String chatId)
String chatId, : this._internal(
) : this._internal( (ref) => chatController(ref as ChatControllerRef, chatId),
(ref) => chatController( from: chatControllerProvider,
ref as ChatControllerRef, name: r'chatControllerProvider',
chatId, debugGetCreateSourceHash:
), const bool.fromEnvironment('dart.vm.product')
from: chatControllerProvider, ? null
name: r'chatControllerProvider', : _$chatControllerHash,
debugGetCreateSourceHash: dependencies: ChatControllerFamily._dependencies,
const bool.fromEnvironment('dart.vm.product') allTransitiveDependencies:
? null ChatControllerFamily._allTransitiveDependencies,
: _$chatControllerHash, chatId: chatId,
dependencies: ChatControllerFamily._dependencies, );
allTransitiveDependencies:
ChatControllerFamily._allTransitiveDependencies,
chatId: chatId,
);
ChatControllerProvider._internal( ChatControllerProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -170,21 +160,15 @@ class ChatMetadataFamily extends Family<AsyncValue<ChatMetadata?>> {
const ChatMetadataFamily(); const ChatMetadataFamily();
/// See also [chatMetadata]. /// See also [chatMetadata].
ChatMetadataProvider call( ChatMetadataProvider call(String chatId) {
String chatId, return ChatMetadataProvider(chatId);
) {
return ChatMetadataProvider(
chatId,
);
} }
@override @override
ChatMetadataProvider getProviderOverride( ChatMetadataProvider getProviderOverride(
covariant ChatMetadataProvider provider, covariant ChatMetadataProvider provider,
) { ) {
return call( return call(provider.chatId);
provider.chatId,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -205,24 +189,20 @@ class ChatMetadataFamily extends Family<AsyncValue<ChatMetadata?>> {
/// See also [chatMetadata]. /// See also [chatMetadata].
class ChatMetadataProvider extends AutoDisposeStreamProvider<ChatMetadata?> { class ChatMetadataProvider extends AutoDisposeStreamProvider<ChatMetadata?> {
/// See also [chatMetadata]. /// See also [chatMetadata].
ChatMetadataProvider( ChatMetadataProvider(String chatId)
String chatId, : this._internal(
) : this._internal( (ref) => chatMetadata(ref as ChatMetadataRef, chatId),
(ref) => chatMetadata( from: chatMetadataProvider,
ref as ChatMetadataRef, name: r'chatMetadataProvider',
chatId, debugGetCreateSourceHash:
), const bool.fromEnvironment('dart.vm.product')
from: chatMetadataProvider, ? null
name: r'chatMetadataProvider', : _$chatMetadataHash,
debugGetCreateSourceHash: dependencies: ChatMetadataFamily._dependencies,
const bool.fromEnvironment('dart.vm.product') allTransitiveDependencies:
? null ChatMetadataFamily._allTransitiveDependencies,
: _$chatMetadataHash, chatId: chatId,
dependencies: ChatMetadataFamily._dependencies, );
allTransitiveDependencies:
ChatMetadataFamily._allTransitiveDependencies,
chatId: chatId,
);
ChatMetadataProvider._internal( ChatMetadataProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -288,5 +268,6 @@ class _ChatMetadataProviderElement
@override @override
String get chatId => (origin as ChatMetadataProvider).chatId; String get chatId => (origin as ChatMetadataProvider).chatId;
} }
// ignore_for_file: type=lint // 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 // 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
@@ -2,6 +2,7 @@ import 'package:exceptions/exceptions.dart';
import 'package:flutter_chat_core/flutter_chat_core.dart'; import 'package:flutter_chat_core/flutter_chat_core.dart';
import 'package:langchain/langchain.dart'; import 'package:langchain/langchain.dart';
import 'package:lensai/core/uuid.dart'; import 'package:lensai/core/uuid.dart';
import 'package:lensai/extensions/nullable.dart';
import 'package:lensai/features/chat/features/chat_store/data/models/message_types.dart'; import 'package:lensai/features/chat/features/chat_store/data/models/message_types.dart';
import 'package:lensai/features/chat/features/chat_store/domain/controllers/drift_chat_controller.dart'; import 'package:lensai/features/chat/features/chat_store/domain/controllers/drift_chat_controller.dart';
import 'package:lensai/features/chat/features/chat_store/domain/providers.dart'; import 'package:lensai/features/chat/features/chat_store/domain/providers.dart';
@@ -44,7 +45,7 @@ class ChatMessageRepository extends _$ChatMessageRepository {
); );
await Future.wait( await Future.wait(
typingMessages.map((message) => _controller.remove(message)), typingMessages.map((message) => _controller.remove(message)).toList(),
); );
_isTyping.remove(author); _isTyping.remove(author);
@@ -56,7 +57,7 @@ class ChatMessageRepository extends _$ChatMessageRepository {
required String content, required String content,
List<AIChatMessageToolCall>? toolCalls, List<AIChatMessageToolCall>? toolCalls,
bool hideFromModelChatHistory = false, bool hideFromModelChatHistory = false,
}) async { }) {
final message = TextMessage( final message = TextMessage(
id: uuid.v4(), id: uuid.v4(),
authorId: author.user.id, authorId: author.user.id,
@@ -64,7 +65,7 @@ class ChatMessageRepository extends _$ChatMessageRepository {
text: content, text: content,
isOnlyEmoji: isOnlyEmoji(content), isOnlyEmoji: isOnlyEmoji(content),
metadata: metadata:
(hideFromModelChatHistory || (toolCalls?.isNotEmpty ?? false)) (hideFromModelChatHistory || (toolCalls.isNotEmpty))
? { ? {
'toolCalls': toolCalls?.map((tool) => tool.toMap()).toList(), 'toolCalls': toolCalls?.map((tool) => tool.toMap()).toList(),
if (hideFromModelChatHistory) 'hideFromModelChatHistory': true, if (hideFromModelChatHistory) 'hideFromModelChatHistory': true,
@@ -7,7 +7,7 @@ part of 'chat_message.dart';
// ************************************************************************** // **************************************************************************
String _$chatMessageRepositoryHash() => String _$chatMessageRepositoryHash() =>
r'a4144618b339f7c0c329a01a294b6bebbb648bf6'; r'34055588fb83fd3d4a91219e96a0c5e961af5212';
/// Copied from Dart SDK /// Copied from Dart SDK
class _SystemHash { class _SystemHash {
@@ -34,9 +34,7 @@ abstract class _$ChatMessageRepository
extends BuildlessAutoDisposeNotifier<void> { extends BuildlessAutoDisposeNotifier<void> {
late final String chatId; late final String chatId;
void build( void build(String chatId);
String chatId,
);
} }
/// See also [ChatMessageRepository]. /// See also [ChatMessageRepository].
@@ -49,21 +47,15 @@ class ChatMessageRepositoryFamily extends Family<void> {
const ChatMessageRepositoryFamily(); const ChatMessageRepositoryFamily();
/// See also [ChatMessageRepository]. /// See also [ChatMessageRepository].
ChatMessageRepositoryProvider call( ChatMessageRepositoryProvider call(String chatId) {
String chatId, return ChatMessageRepositoryProvider(chatId);
) {
return ChatMessageRepositoryProvider(
chatId,
);
} }
@override @override
ChatMessageRepositoryProvider getProviderOverride( ChatMessageRepositoryProvider getProviderOverride(
covariant ChatMessageRepositoryProvider provider, covariant ChatMessageRepositoryProvider provider,
) { ) {
return call( return call(provider.chatId);
provider.chatId,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -85,21 +77,20 @@ class ChatMessageRepositoryFamily extends Family<void> {
class ChatMessageRepositoryProvider class ChatMessageRepositoryProvider
extends AutoDisposeNotifierProviderImpl<ChatMessageRepository, void> { extends AutoDisposeNotifierProviderImpl<ChatMessageRepository, void> {
/// See also [ChatMessageRepository]. /// See also [ChatMessageRepository].
ChatMessageRepositoryProvider( ChatMessageRepositoryProvider(String chatId)
String chatId, : this._internal(
) : this._internal( () => ChatMessageRepository()..chatId = chatId,
() => ChatMessageRepository()..chatId = chatId, from: chatMessageRepositoryProvider,
from: chatMessageRepositoryProvider, name: r'chatMessageRepositoryProvider',
name: r'chatMessageRepositoryProvider', debugGetCreateSourceHash:
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
const bool.fromEnvironment('dart.vm.product') ? null
? null : _$chatMessageRepositoryHash,
: _$chatMessageRepositoryHash, dependencies: ChatMessageRepositoryFamily._dependencies,
dependencies: ChatMessageRepositoryFamily._dependencies, allTransitiveDependencies:
allTransitiveDependencies: ChatMessageRepositoryFamily._allTransitiveDependencies,
ChatMessageRepositoryFamily._allTransitiveDependencies, chatId: chatId,
chatId: chatId, );
);
ChatMessageRepositoryProvider._internal( ChatMessageRepositoryProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -114,12 +105,8 @@ class ChatMessageRepositoryProvider
final String chatId; final String chatId;
@override @override
void runNotifierBuild( void runNotifierBuild(covariant ChatMessageRepository notifier) {
covariant ChatMessageRepository notifier, return notifier.build(chatId);
) {
return notifier.build(
chatId,
);
} }
@override @override
@@ -140,7 +127,7 @@ class ChatMessageRepositoryProvider
@override @override
AutoDisposeNotifierProviderElement<ChatMessageRepository, void> AutoDisposeNotifierProviderElement<ChatMessageRepository, void>
createElement() { createElement() {
return _ChatMessageRepositoryProviderElement(this); return _ChatMessageRepositoryProviderElement(this);
} }
@@ -173,5 +160,6 @@ class _ChatMessageRepositoryProviderElement
@override @override
String get chatId => (origin as ChatMessageRepositoryProvider).chatId; String get chatId => (origin as ChatMessageRepositoryProvider).chatId;
} }
// ignore_for_file: type=lint // 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 // 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
@@ -34,9 +34,7 @@ abstract class _$ChatMetadataRepository
extends BuildlessAutoDisposeNotifier<void> { extends BuildlessAutoDisposeNotifier<void> {
late final String chatId; late final String chatId;
void build( void build(String chatId);
String chatId,
);
} }
/// See also [ChatMetadataRepository]. /// See also [ChatMetadataRepository].
@@ -49,21 +47,15 @@ class ChatMetadataRepositoryFamily extends Family<void> {
const ChatMetadataRepositoryFamily(); const ChatMetadataRepositoryFamily();
/// See also [ChatMetadataRepository]. /// See also [ChatMetadataRepository].
ChatMetadataRepositoryProvider call( ChatMetadataRepositoryProvider call(String chatId) {
String chatId, return ChatMetadataRepositoryProvider(chatId);
) {
return ChatMetadataRepositoryProvider(
chatId,
);
} }
@override @override
ChatMetadataRepositoryProvider getProviderOverride( ChatMetadataRepositoryProvider getProviderOverride(
covariant ChatMetadataRepositoryProvider provider, covariant ChatMetadataRepositoryProvider provider,
) { ) {
return call( return call(provider.chatId);
provider.chatId,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -85,21 +77,20 @@ class ChatMetadataRepositoryFamily extends Family<void> {
class ChatMetadataRepositoryProvider class ChatMetadataRepositoryProvider
extends AutoDisposeNotifierProviderImpl<ChatMetadataRepository, void> { extends AutoDisposeNotifierProviderImpl<ChatMetadataRepository, void> {
/// See also [ChatMetadataRepository]. /// See also [ChatMetadataRepository].
ChatMetadataRepositoryProvider( ChatMetadataRepositoryProvider(String chatId)
String chatId, : this._internal(
) : this._internal( () => ChatMetadataRepository()..chatId = chatId,
() => ChatMetadataRepository()..chatId = chatId, from: chatMetadataRepositoryProvider,
from: chatMetadataRepositoryProvider, name: r'chatMetadataRepositoryProvider',
name: r'chatMetadataRepositoryProvider', debugGetCreateSourceHash:
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
const bool.fromEnvironment('dart.vm.product') ? null
? null : _$chatMetadataRepositoryHash,
: _$chatMetadataRepositoryHash, dependencies: ChatMetadataRepositoryFamily._dependencies,
dependencies: ChatMetadataRepositoryFamily._dependencies, allTransitiveDependencies:
allTransitiveDependencies: ChatMetadataRepositoryFamily._allTransitiveDependencies,
ChatMetadataRepositoryFamily._allTransitiveDependencies, chatId: chatId,
chatId: chatId, );
);
ChatMetadataRepositoryProvider._internal( ChatMetadataRepositoryProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -114,12 +105,8 @@ class ChatMetadataRepositoryProvider
final String chatId; final String chatId;
@override @override
void runNotifierBuild( void runNotifierBuild(covariant ChatMetadataRepository notifier) {
covariant ChatMetadataRepository notifier, return notifier.build(chatId);
) {
return notifier.build(
chatId,
);
} }
@override @override
@@ -140,7 +127,7 @@ class ChatMetadataRepositoryProvider
@override @override
AutoDisposeNotifierProviderElement<ChatMetadataRepository, void> AutoDisposeNotifierProviderElement<ChatMetadataRepository, void>
createElement() { createElement() {
return _ChatMetadataRepositoryProviderElement(this); return _ChatMetadataRepositoryProviderElement(this);
} }
@@ -173,5 +160,6 @@ class _ChatMetadataRepositoryProviderElement
@override @override
String get chatId => (origin as ChatMetadataRepositoryProvider).chatId; String get chatId => (origin as ChatMetadataRepositoryProvider).chatId;
} }
// ignore_for_file: type=lint // 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 // 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
@@ -13,14 +13,15 @@ String _$bottomSheetControllerHash() =>
@ProviderFor(BottomSheetController) @ProviderFor(BottomSheetController)
final bottomSheetControllerProvider = final bottomSheetControllerProvider =
AutoDisposeNotifierProvider<BottomSheetController, Sheet?>.internal( AutoDisposeNotifierProvider<BottomSheetController, Sheet?>.internal(
BottomSheetController.new, BottomSheetController.new,
name: r'bottomSheetControllerProvider', name: r'bottomSheetControllerProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$bottomSheetControllerHash, ? null
dependencies: null, : _$bottomSheetControllerHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
typedef _$BottomSheetController = AutoDisposeNotifier<Sheet?>; typedef _$BottomSheetController = AutoDisposeNotifier<Sheet?>;
String _$bottomSheetExtendHash() => r'7e11b9047c15bdeb4dfcb488a8573daadb64e25c'; String _$bottomSheetExtendHash() => r'7e11b9047c15bdeb4dfcb488a8573daadb64e25c';
@@ -29,14 +30,15 @@ String _$bottomSheetExtendHash() => r'7e11b9047c15bdeb4dfcb488a8573daadb64e25c';
@ProviderFor(BottomSheetExtend) @ProviderFor(BottomSheetExtend)
final bottomSheetExtendProvider = final bottomSheetExtendProvider =
StreamNotifierProvider<BottomSheetExtend, double>.internal( StreamNotifierProvider<BottomSheetExtend, double>.internal(
BottomSheetExtend.new, BottomSheetExtend.new,
name: r'bottomSheetExtendProvider', name: r'bottomSheetExtendProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$bottomSheetExtendHash, ? null
dependencies: null, : _$bottomSheetExtendHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
typedef _$BottomSheetExtend = StreamNotifier<double>; typedef _$BottomSheetExtend = StreamNotifier<double>;
// ignore_for_file: type=lint // ignore_for_file: type=lint
@@ -12,14 +12,15 @@ String _$overlayControllerHash() => r'b6dc3ca17611c4efadc7e8248d493cd3c7061e01';
@ProviderFor(OverlayController) @ProviderFor(OverlayController)
final overlayControllerProvider = final overlayControllerProvider =
AutoDisposeNotifierProvider<OverlayController, Widget?>.internal( AutoDisposeNotifierProvider<OverlayController, Widget?>.internal(
OverlayController.new, OverlayController.new,
name: r'overlayControllerProvider', name: r'overlayControllerProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$overlayControllerHash, ? null
dependencies: null, : _$overlayControllerHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
typedef _$OverlayController = AutoDisposeNotifier<Widget?>; typedef _$OverlayController = AutoDisposeNotifier<Widget?>;
// ignore_for_file: type=lint // ignore_for_file: type=lint
@@ -106,7 +106,6 @@ class _$TabStateCWProxyImpl implements _$TabStateCWProxy {
this(findResultState: findResultState); this(findResultState: findResultState);
@override @override
/// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `TabState(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `TabState(...).copyWith.fieldName(...)` to override fields one at a time with nullification support.
/// ///
/// Usage /// Usage
@@ -130,58 +129,71 @@ class _$TabStateCWProxyImpl implements _$TabStateCWProxy {
}) { }) {
return TabState( return TabState(
id: _value.id, id: _value.id,
contextId: contextId == const $CopyWithPlaceholder() contextId:
? _value.contextId contextId == const $CopyWithPlaceholder()
// ignore: cast_nullable_to_non_nullable ? _value.contextId
: contextId as String?, // ignore: cast_nullable_to_non_nullable
url: url == const $CopyWithPlaceholder() : contextId as String?,
? _value.url url:
// ignore: cast_nullable_to_non_nullable url == const $CopyWithPlaceholder()
: url as Uri, ? _value.url
title: title == const $CopyWithPlaceholder() // ignore: cast_nullable_to_non_nullable
? _value.title : url as Uri,
// ignore: cast_nullable_to_non_nullable title:
: title as String, title == const $CopyWithPlaceholder()
icon: icon == const $CopyWithPlaceholder() ? _value.title
? _value.icon // ignore: cast_nullable_to_non_nullable
// ignore: cast_nullable_to_non_nullable : title as String,
: icon as EquatableImage?, icon:
thumbnail: thumbnail == const $CopyWithPlaceholder() icon == const $CopyWithPlaceholder()
? _value.thumbnail ? _value.icon
// ignore: cast_nullable_to_non_nullable // ignore: cast_nullable_to_non_nullable
: thumbnail as EquatableImage?, : icon as EquatableImage?,
progress: progress == const $CopyWithPlaceholder() thumbnail:
? _value.progress thumbnail == const $CopyWithPlaceholder()
// ignore: cast_nullable_to_non_nullable ? _value.thumbnail
: progress as int, // ignore: cast_nullable_to_non_nullable
isPrivate: isPrivate == const $CopyWithPlaceholder() : thumbnail as EquatableImage?,
? _value.isPrivate progress:
// ignore: cast_nullable_to_non_nullable progress == const $CopyWithPlaceholder()
: isPrivate as bool, ? _value.progress
isFullScreen: isFullScreen == const $CopyWithPlaceholder() // ignore: cast_nullable_to_non_nullable
? _value.isFullScreen : progress as int,
// ignore: cast_nullable_to_non_nullable isPrivate:
: isFullScreen as bool, isPrivate == const $CopyWithPlaceholder()
isLoading: isLoading == const $CopyWithPlaceholder() ? _value.isPrivate
? _value.isLoading // ignore: cast_nullable_to_non_nullable
// ignore: cast_nullable_to_non_nullable : isPrivate as bool,
: isLoading as bool, isFullScreen:
securityInfoState: securityInfoState == const $CopyWithPlaceholder() isFullScreen == const $CopyWithPlaceholder()
? _value.securityInfoState ? _value.isFullScreen
// ignore: cast_nullable_to_non_nullable // ignore: cast_nullable_to_non_nullable
: securityInfoState as SecurityState, : isFullScreen as bool,
historyState: historyState == const $CopyWithPlaceholder() isLoading:
? _value.historyState isLoading == const $CopyWithPlaceholder()
// ignore: cast_nullable_to_non_nullable ? _value.isLoading
: historyState as HistoryState, // ignore: cast_nullable_to_non_nullable
readerableState: readerableState == const $CopyWithPlaceholder() : isLoading as bool,
? _value.readerableState securityInfoState:
// ignore: cast_nullable_to_non_nullable securityInfoState == const $CopyWithPlaceholder()
: readerableState as ReaderableState, ? _value.securityInfoState
findResultState: findResultState == const $CopyWithPlaceholder() // ignore: cast_nullable_to_non_nullable
? _value.findResultState : securityInfoState as SecurityState,
// ignore: cast_nullable_to_non_nullable historyState:
: findResultState as FindResultState, historyState == const $CopyWithPlaceholder()
? _value.historyState
// ignore: cast_nullable_to_non_nullable
: historyState as HistoryState,
readerableState:
readerableState == const $CopyWithPlaceholder()
? _value.readerableState
// ignore: cast_nullable_to_non_nullable
: readerableState as ReaderableState,
findResultState:
findResultState == const $CopyWithPlaceholder()
? _value.findResultState
// ignore: cast_nullable_to_non_nullable
: findResultState as FindResultState,
); );
} }
} }
@@ -69,7 +69,6 @@ class _$WebExtensionStateCWProxyImpl implements _$WebExtensionStateCWProxy {
WebExtensionState icon(EquatableImage? icon) => this(icon: icon); WebExtensionState icon(EquatableImage? icon) => this(icon: icon);
@override @override
/// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `WebExtensionState(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `WebExtensionState(...).copyWith.fieldName(...)` to override fields one at a time with nullification support.
/// ///
/// Usage /// Usage
@@ -86,34 +85,41 @@ class _$WebExtensionStateCWProxyImpl implements _$WebExtensionStateCWProxy {
Object? icon = const $CopyWithPlaceholder(), Object? icon = const $CopyWithPlaceholder(),
}) { }) {
return WebExtensionState( return WebExtensionState(
extensionId: extensionId == const $CopyWithPlaceholder() extensionId:
? _value.extensionId extensionId == const $CopyWithPlaceholder()
// ignore: cast_nullable_to_non_nullable ? _value.extensionId
: extensionId as String, // ignore: cast_nullable_to_non_nullable
enabled: enabled == const $CopyWithPlaceholder() : extensionId as String,
? _value.enabled enabled:
// ignore: cast_nullable_to_non_nullable enabled == const $CopyWithPlaceholder()
: enabled as bool, ? _value.enabled
title: title == const $CopyWithPlaceholder() // ignore: cast_nullable_to_non_nullable
? _value.title : enabled as bool,
// ignore: cast_nullable_to_non_nullable title:
: title as String?, title == const $CopyWithPlaceholder()
badgeText: badgeText == const $CopyWithPlaceholder() ? _value.title
? _value.badgeText // ignore: cast_nullable_to_non_nullable
// ignore: cast_nullable_to_non_nullable : title as String?,
: badgeText as String?, badgeText:
badgeTextColor: badgeTextColor == const $CopyWithPlaceholder() badgeText == const $CopyWithPlaceholder()
? _value.badgeTextColor ? _value.badgeText
// ignore: cast_nullable_to_non_nullable // ignore: cast_nullable_to_non_nullable
: badgeTextColor as Color?, : badgeText as String?,
badgeBackgroundColor: badgeBackgroundColor == const $CopyWithPlaceholder() badgeTextColor:
? _value.badgeBackgroundColor badgeTextColor == const $CopyWithPlaceholder()
// ignore: cast_nullable_to_non_nullable ? _value.badgeTextColor
: badgeBackgroundColor as Color?, // ignore: cast_nullable_to_non_nullable
icon: icon == const $CopyWithPlaceholder() : badgeTextColor as Color?,
? _value.icon badgeBackgroundColor:
// ignore: cast_nullable_to_non_nullable badgeBackgroundColor == const $CopyWithPlaceholder()
: icon as EquatableImage?, ? _value.badgeBackgroundColor
// ignore: cast_nullable_to_non_nullable
: badgeBackgroundColor as Color?,
icon:
icon == const $CopyWithPlaceholder()
? _value.icon
// ignore: cast_nullable_to_non_nullable
: icon as EquatableImage?,
); );
} }
} }
@@ -3,6 +3,7 @@ import 'dart:async';
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart'; import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:lensai/core/logger.dart'; import 'package:lensai/core/logger.dart';
import 'package:lensai/features/bangs/domain/providers/bangs.dart'; import 'package:lensai/features/bangs/domain/providers/bangs.dart';
import 'package:lensai/features/geckoview/domain/providers/selected_tab.dart';
import 'package:lensai/features/geckoview/domain/repositories/tab.dart'; import 'package:lensai/features/geckoview/domain/repositories/tab.dart';
import 'package:riverpod/riverpod.dart'; import 'package:riverpod/riverpod.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart';
@@ -23,26 +24,31 @@ GeckoSelectionActionService selectionActionService(Ref ref) {
); );
if (defaultSearchBang != null) { if (defaultSearchBang != null) {
await ref final currentTabId = ref.read(selectedTabProvider);
.read(tabRepositoryProvider.notifier)
.addTab(url: defaultSearchBang.getUrl(text));
} else {
logger.e('No default search bang found');
}
}),
PrivateSearchAction((text) async {
final defaultSearchBang = await ref.read(
defaultSearchBangDataProvider.future,
);
if (defaultSearchBang != null) {
await ref await ref
.read(tabRepositoryProvider.notifier) .read(tabRepositoryProvider.notifier)
.addTab(url: defaultSearchBang.getUrl(text), private: true); .addTab(
url: defaultSearchBang.getUrl(text),
parentId: currentTabId,
);
} else { } else {
logger.e('No default search bang found'); logger.e('No default search bang found');
} }
}), }),
// PrivateSearchAction((text) async {
// final defaultSearchBang = await ref.read(
// defaultSearchBangDataProvider.future,
// );
// if (defaultSearchBang != null) {
// await ref
// .read(tabRepositoryProvider.notifier)
// .addTab(url: defaultSearchBang.getUrl(text), private: true);
// } else {
// logger.e('No default search bang found');
// }
// }),
ShareAction((text) async { ShareAction((text) async {
await Share.share(text); await Share.share(text);
}), }),
@@ -7,20 +7,21 @@ part of 'providers.dart';
// ************************************************************************** // **************************************************************************
String _$selectionActionServiceHash() => String _$selectionActionServiceHash() =>
r'd0c04262171976c21441297706273417e3d79b67'; r'8d0af53213bdb924bcf5f8df6ceec6c81a345345';
/// See also [selectionActionService]. /// See also [selectionActionService].
@ProviderFor(selectionActionService) @ProviderFor(selectionActionService)
final selectionActionServiceProvider = final selectionActionServiceProvider =
Provider<GeckoSelectionActionService>.internal( Provider<GeckoSelectionActionService>.internal(
selectionActionService, selectionActionService,
name: r'selectionActionServiceProvider', name: r'selectionActionServiceProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$selectionActionServiceHash, ? null
dependencies: null, : _$selectionActionServiceHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead') @Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element // ignore: unused_element
@@ -64,9 +65,10 @@ String _$tabContentServiceHash() => r'd9a991add907ecc138c62790883e59d8e9aa9266';
final tabContentServiceProvider = Provider<GeckoTabContentService>.internal( final tabContentServiceProvider = Provider<GeckoTabContentService>.internal(
tabContentService, tabContentService,
name: r'tabContentServiceProvider', name: r'tabContentServiceProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$tabContentServiceHash, ? null
: _$tabContentServiceHash,
dependencies: null, dependencies: null,
allTransitiveDependencies: null, allTransitiveDependencies: null,
); );
@@ -81,14 +83,15 @@ String _$engineSuggestionsServiceHash() =>
@ProviderFor(engineSuggestionsService) @ProviderFor(engineSuggestionsService)
final engineSuggestionsServiceProvider = final engineSuggestionsServiceProvider =
Provider<GeckoSuggestionsService>.internal( Provider<GeckoSuggestionsService>.internal(
engineSuggestionsService, engineSuggestionsService,
name: r'engineSuggestionsServiceProvider', name: r'engineSuggestionsServiceProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$engineSuggestionsServiceHash, ? null
dependencies: null, : _$engineSuggestionsServiceHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead') @Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element // ignore: unused_element
@@ -99,14 +102,15 @@ String _$engineReadyStateHash() => r'c682333e2e07cf0635aa7ae793a2088ca648c950';
@ProviderFor(EngineReadyState) @ProviderFor(EngineReadyState)
final engineReadyStateProvider = final engineReadyStateProvider =
NotifierProvider<EngineReadyState, bool>.internal( NotifierProvider<EngineReadyState, bool>.internal(
EngineReadyState.new, EngineReadyState.new,
name: r'engineReadyStateProvider', name: r'engineReadyStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$engineReadyStateHash, ? null
dependencies: null, : _$engineReadyStateHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
typedef _$EngineReadyState = Notifier<bool>; typedef _$EngineReadyState = Notifier<bool>;
// ignore_for_file: type=lint // ignore_for_file: type=lint
@@ -21,7 +21,7 @@ class SelectedTab extends _$SelectedTab {
} }
}); });
final selectedTabSub = eventSerivce.selectedTabEvents.listen((tabId) async { final selectedTabSub = eventSerivce.selectedTabEvents.listen((tabId) {
state = tabId; state = tabId;
}); });
@@ -6,7 +6,7 @@ part of 'selected_tab.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$selectedTabHash() => r'f550ac5b471bab8f8e5d75ef4d7669cde769db9a'; String _$selectedTabHash() => r'250f54fe9a56d14876e0979e5370eb76879da11c';
/// See also [SelectedTab]. /// See also [SelectedTab].
@ProviderFor(SelectedTab) @ProviderFor(SelectedTab)
@@ -22,7 +22,7 @@ class TabList extends _$TabList {
} }
}); });
final tabListSub = eventService.tabListEvents.listen((tabs) async { final tabListSub = eventService.tabListEvents.listen((tabs) {
final equatableTabs = EquatableCollection(tabs, immutable: true); final equatableTabs = EquatableCollection(tabs, immutable: true);
if (equatableTabs != state) { if (equatableTabs != state) {
@@ -6,19 +6,19 @@ part of 'tab_list.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$tabListHash() => r'bb8b6cca42a8aace8bd9808fdeac4fe4965ac867'; String _$tabListHash() => r'cdcbfd9c12e06f350d8284d48c81826b3aa57b6d';
/// See also [TabList]. /// See also [TabList].
@ProviderFor(TabList) @ProviderFor(TabList)
final tabListProvider = final tabListProvider =
NotifierProvider<TabList, EquatableCollection<List<String>>>.internal( NotifierProvider<TabList, EquatableCollection<List<String>>>.internal(
TabList.new, TabList.new,
name: r'tabListProvider', name: r'tabListProvider',
debugGetCreateSourceHash: debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$tabListHash, const bool.fromEnvironment('dart.vm.product') ? null : _$tabListHash,
dependencies: null, dependencies: null,
allTransitiveDependencies: null, allTransitiveDependencies: null,
); );
typedef _$TabList = Notifier<EquatableCollection<List<String>>>; typedef _$TabList = Notifier<EquatableCollection<List<String>>>;
// ignore_for_file: type=lint // ignore_for_file: type=lint
@@ -13,14 +13,15 @@ String _$selectedTabSessionNotifierHash() =>
@ProviderFor(selectedTabSessionNotifier) @ProviderFor(selectedTabSessionNotifier)
final selectedTabSessionNotifierProvider = final selectedTabSessionNotifierProvider =
AutoDisposeProvider<Raw<TabSession>>.internal( AutoDisposeProvider<Raw<TabSession>>.internal(
selectedTabSessionNotifier, selectedTabSessionNotifier,
name: r'selectedTabSessionNotifierProvider', name: r'selectedTabSessionNotifierProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$selectedTabSessionNotifierHash, ? null
dependencies: null, : _$selectedTabSessionNotifierHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead') @Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element // ignore: unused_element
@@ -51,9 +52,7 @@ class _SystemHash {
abstract class _$TabSession extends BuildlessAutoDisposeNotifier<void> { abstract class _$TabSession extends BuildlessAutoDisposeNotifier<void> {
late final String? tabId; late final String? tabId;
void build({ void build({required String? tabId});
required String? tabId,
});
} }
/// See also [TabSession]. /// See also [TabSession].
@@ -66,21 +65,15 @@ class TabSessionFamily extends Family<void> {
const TabSessionFamily(); const TabSessionFamily();
/// See also [TabSession]. /// See also [TabSession].
TabSessionProvider call({ TabSessionProvider call({required String? tabId}) {
required String? tabId, return TabSessionProvider(tabId: tabId);
}) {
return TabSessionProvider(
tabId: tabId,
);
} }
@override @override
TabSessionProvider getProviderOverride( TabSessionProvider getProviderOverride(
covariant TabSessionProvider provider, covariant TabSessionProvider provider,
) { ) {
return call( return call(tabId: provider.tabId);
tabId: provider.tabId,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -102,21 +95,19 @@ class TabSessionFamily extends Family<void> {
class TabSessionProvider class TabSessionProvider
extends AutoDisposeNotifierProviderImpl<TabSession, void> { extends AutoDisposeNotifierProviderImpl<TabSession, void> {
/// See also [TabSession]. /// See also [TabSession].
TabSessionProvider({ TabSessionProvider({required String? tabId})
required String? tabId, : this._internal(
}) : this._internal( () => TabSession()..tabId = tabId,
() => TabSession()..tabId = tabId, from: tabSessionProvider,
from: tabSessionProvider, name: r'tabSessionProvider',
name: r'tabSessionProvider', debugGetCreateSourceHash:
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
const bool.fromEnvironment('dart.vm.product') ? null
? null : _$tabSessionHash,
: _$tabSessionHash, dependencies: TabSessionFamily._dependencies,
dependencies: TabSessionFamily._dependencies, allTransitiveDependencies: TabSessionFamily._allTransitiveDependencies,
allTransitiveDependencies: tabId: tabId,
TabSessionFamily._allTransitiveDependencies, );
tabId: tabId,
);
TabSessionProvider._internal( TabSessionProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -131,12 +122,8 @@ class TabSessionProvider
final String? tabId; final String? tabId;
@override @override
void runNotifierBuild( void runNotifierBuild(covariant TabSession notifier) {
covariant TabSession notifier, return notifier.build(tabId: tabId);
) {
return notifier.build(
tabId: tabId,
);
} }
@override @override
@@ -189,5 +176,6 @@ class _TabSessionProviderElement
@override @override
String? get tabId => (origin as TabSessionProvider).tabId; String? get tabId => (origin as TabSessionProvider).tabId;
} }
// ignore_for_file: type=lint // 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 // 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
@@ -126,7 +126,7 @@ class TabStates extends _$TabStates {
final eventService = ref.watch(eventServiceProvider); final eventService = ref.watch(eventServiceProvider);
final subscriptions = [ final subscriptions = [
eventService.tabContentEvents.listen((event) async { eventService.tabContentEvents.listen((event) {
_onTabContentStateChange(event); _onTabContentStateChange(event);
}), }),
eventService.iconChangeEvents.listen((event) async { eventService.iconChangeEvents.listen((event) async {
@@ -135,16 +135,16 @@ class TabStates extends _$TabStates {
eventService.thumbnailEvents.listen((event) async { eventService.thumbnailEvents.listen((event) async {
await _onThumbnailChange(event); await _onThumbnailChange(event);
}), }),
eventService.securityInfoEvents.listen((event) async { eventService.securityInfoEvents.listen((event) {
_onSecurityInfoStateChange(event); _onSecurityInfoStateChange(event);
}), }),
eventService.historyEvents.listen((event) async { eventService.historyEvents.listen((event) {
_onHistoryStateChange(event); _onHistoryStateChange(event);
}), }),
eventService.readerableEvents.listen((event) async { eventService.readerableEvents.listen((event) {
_onReaderableStateChange(event); _onReaderableStateChange(event);
}), }),
eventService.findResultsEvent.listen((event) async { eventService.findResultsEvent.listen((event) {
_onFindResultsChange(event); _onFindResultsChange(event);
}), }),
]; ];
@@ -39,21 +39,13 @@ class TabStateFamily extends Family<TabState?> {
const TabStateFamily(); const TabStateFamily();
/// See also [tabState]. /// See also [tabState].
TabStateProvider call( TabStateProvider call(String? tabId) {
String? tabId, return TabStateProvider(tabId);
) {
return TabStateProvider(
tabId,
);
} }
@override @override
TabStateProvider getProviderOverride( TabStateProvider getProviderOverride(covariant TabStateProvider provider) {
covariant TabStateProvider provider, return call(provider.tabId);
) {
return call(
provider.tabId,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -74,23 +66,19 @@ class TabStateFamily extends Family<TabState?> {
/// See also [tabState]. /// See also [tabState].
class TabStateProvider extends AutoDisposeProvider<TabState?> { class TabStateProvider extends AutoDisposeProvider<TabState?> {
/// See also [tabState]. /// See also [tabState].
TabStateProvider( TabStateProvider(String? tabId)
String? tabId, : this._internal(
) : this._internal( (ref) => tabState(ref as TabStateRef, tabId),
(ref) => tabState( from: tabStateProvider,
ref as TabStateRef, name: r'tabStateProvider',
tabId, debugGetCreateSourceHash:
), const bool.fromEnvironment('dart.vm.product')
from: tabStateProvider, ? null
name: r'tabStateProvider', : _$tabStateHash,
debugGetCreateSourceHash: dependencies: TabStateFamily._dependencies,
const bool.fromEnvironment('dart.vm.product') allTransitiveDependencies: TabStateFamily._allTransitiveDependencies,
? null tabId: tabId,
: _$tabStateHash, );
dependencies: TabStateFamily._dependencies,
allTransitiveDependencies: TabStateFamily._allTransitiveDependencies,
tabId: tabId,
);
TabStateProvider._internal( TabStateProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -105,9 +93,7 @@ class TabStateProvider extends AutoDisposeProvider<TabState?> {
final String? tabId; final String? tabId;
@override @override
Override overrideWith( Override overrideWith(TabState? Function(TabStateRef provider) create) {
TabState? Function(TabStateRef provider) create,
) {
return ProviderOverride( return ProviderOverride(
origin: this, origin: this,
override: TabStateProvider._internal( override: TabStateProvider._internal(
@@ -163,9 +149,10 @@ String _$selectedTabStateHash() => r'dbd36af7af286bd9d079f30e8e11bbda23bf7728';
final selectedTabStateProvider = AutoDisposeProvider<TabState?>.internal( final selectedTabStateProvider = AutoDisposeProvider<TabState?>.internal(
selectedTabState, selectedTabState,
name: r'selectedTabStateProvider', name: r'selectedTabStateProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$selectedTabStateHash, ? null
: _$selectedTabStateHash,
dependencies: null, dependencies: null,
allTransitiveDependencies: null, allTransitiveDependencies: null,
); );
@@ -173,19 +160,21 @@ final selectedTabStateProvider = AutoDisposeProvider<TabState?>.internal(
@Deprecated('Will be removed in 3.0. Use Ref instead') @Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element // ignore: unused_element
typedef SelectedTabStateRef = AutoDisposeProviderRef<TabState?>; typedef SelectedTabStateRef = AutoDisposeProviderRef<TabState?>;
String _$tabStatesHash() => r'2f4af9df4d648f7fb940f02e14f4a6762bb21d8a'; String _$tabStatesHash() => r'b136dbf6d68b67f0fe0db302a4147b67789db853';
/// See also [TabStates]. /// See also [TabStates].
@ProviderFor(TabStates) @ProviderFor(TabStates)
final tabStatesProvider = final tabStatesProvider =
NotifierProvider<TabStates, Map<String, TabState>>.internal( NotifierProvider<TabStates, Map<String, TabState>>.internal(
TabStates.new, TabStates.new,
name: r'tabStatesProvider', name: r'tabStatesProvider',
debugGetCreateSourceHash: debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$tabStatesHash, const bool.fromEnvironment('dart.vm.product')
dependencies: null, ? null
allTransitiveDependencies: null, : _$tabStatesHash,
); dependencies: null,
allTransitiveDependencies: null,
);
typedef _$TabStates = Notifier<Map<String, TabState>>; typedef _$TabStates = Notifier<Map<String, TabState>>;
// ignore_for_file: type=lint // ignore_for_file: type=lint
@@ -69,7 +69,7 @@ class WebExtensionsState extends _$WebExtensionsState {
final subscriptions = switch (actionType) { final subscriptions = switch (actionType) {
WebExtensionActionType.browser => [ WebExtensionActionType.browser => [
addonService.browserExtensionStream.listen((event) async { addonService.browserExtensionStream.listen((event) {
_onExtensionUpdate(event); _onExtensionUpdate(event);
}), }),
addonService.browserIconStream.listen((event) async { addonService.browserIconStream.listen((event) async {
@@ -77,7 +77,7 @@ class WebExtensionsState extends _$WebExtensionsState {
}), }),
], ],
WebExtensionActionType.page => [ WebExtensionActionType.page => [
addonService.pageExtensionStream.listen((event) async { addonService.pageExtensionStream.listen((event) {
_onExtensionUpdate(event); _onExtensionUpdate(event);
}), }),
addonService.pageIconStream.listen((event) async { addonService.pageIconStream.listen((event) async {
@@ -7,7 +7,7 @@ part of 'web_extensions_state.dart';
// ************************************************************************** // **************************************************************************
String _$webExtensionsStateHash() => String _$webExtensionsStateHash() =>
r'9382461e7e72c31946a5308642baaac307977a15'; r'eab924e9c17e805a3c29065289be5d1c8ffe3bc9';
/// Copied from Dart SDK /// Copied from Dart SDK
class _SystemHash { class _SystemHash {
@@ -34,9 +34,7 @@ abstract class _$WebExtensionsState
extends BuildlessNotifier<Map<String, WebExtensionState>> { extends BuildlessNotifier<Map<String, WebExtensionState>> {
late final WebExtensionActionType actionType; late final WebExtensionActionType actionType;
Map<String, WebExtensionState> build( Map<String, WebExtensionState> build(WebExtensionActionType actionType);
WebExtensionActionType actionType,
);
} }
/// See also [WebExtensionsState]. /// See also [WebExtensionsState].
@@ -49,21 +47,15 @@ class WebExtensionsStateFamily extends Family<Map<String, WebExtensionState>> {
const WebExtensionsStateFamily(); const WebExtensionsStateFamily();
/// See also [WebExtensionsState]. /// See also [WebExtensionsState].
WebExtensionsStateProvider call( WebExtensionsStateProvider call(WebExtensionActionType actionType) {
WebExtensionActionType actionType, return WebExtensionsStateProvider(actionType);
) {
return WebExtensionsStateProvider(
actionType,
);
} }
@override @override
WebExtensionsStateProvider getProviderOverride( WebExtensionsStateProvider getProviderOverride(
covariant WebExtensionsStateProvider provider, covariant WebExtensionsStateProvider provider,
) { ) {
return call( return call(provider.actionType);
provider.actionType,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -82,24 +74,27 @@ class WebExtensionsStateFamily extends Family<Map<String, WebExtensionState>> {
} }
/// See also [WebExtensionsState]. /// See also [WebExtensionsState].
class WebExtensionsStateProvider extends NotifierProviderImpl< class WebExtensionsStateProvider
WebExtensionsState, Map<String, WebExtensionState>> { extends
NotifierProviderImpl<
WebExtensionsState,
Map<String, WebExtensionState>
> {
/// See also [WebExtensionsState]. /// See also [WebExtensionsState].
WebExtensionsStateProvider( WebExtensionsStateProvider(WebExtensionActionType actionType)
WebExtensionActionType actionType, : this._internal(
) : this._internal( () => WebExtensionsState()..actionType = actionType,
() => WebExtensionsState()..actionType = actionType, from: webExtensionsStateProvider,
from: webExtensionsStateProvider, name: r'webExtensionsStateProvider',
name: r'webExtensionsStateProvider', debugGetCreateSourceHash:
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
const bool.fromEnvironment('dart.vm.product') ? null
? null : _$webExtensionsStateHash,
: _$webExtensionsStateHash, dependencies: WebExtensionsStateFamily._dependencies,
dependencies: WebExtensionsStateFamily._dependencies, allTransitiveDependencies:
allTransitiveDependencies: WebExtensionsStateFamily._allTransitiveDependencies,
WebExtensionsStateFamily._allTransitiveDependencies, actionType: actionType,
actionType: actionType, );
);
WebExtensionsStateProvider._internal( WebExtensionsStateProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -117,9 +112,7 @@ class WebExtensionsStateProvider extends NotifierProviderImpl<
Map<String, WebExtensionState> runNotifierBuild( Map<String, WebExtensionState> runNotifierBuild(
covariant WebExtensionsState notifier, covariant WebExtensionsState notifier,
) { ) {
return notifier.build( return notifier.build(actionType);
actionType,
);
} }
@override @override
@@ -140,7 +133,7 @@ class WebExtensionsStateProvider extends NotifierProviderImpl<
@override @override
NotifierProviderElement<WebExtensionsState, Map<String, WebExtensionState>> NotifierProviderElement<WebExtensionsState, Map<String, WebExtensionState>>
createElement() { createElement() {
return _WebExtensionsStateProviderElement(this); return _WebExtensionsStateProviderElement(this);
} }
@@ -167,14 +160,19 @@ mixin WebExtensionsStateRef
WebExtensionActionType get actionType; WebExtensionActionType get actionType;
} }
class _WebExtensionsStateProviderElement extends NotifierProviderElement< class _WebExtensionsStateProviderElement
WebExtensionsState, extends
Map<String, WebExtensionState>> with WebExtensionsStateRef { NotifierProviderElement<
WebExtensionsState,
Map<String, WebExtensionState>
>
with WebExtensionsStateRef {
_WebExtensionsStateProviderElement(super.provider); _WebExtensionsStateProviderElement(super.provider);
@override @override
WebExtensionActionType get actionType => WebExtensionActionType get actionType =>
(origin as WebExtensionsStateProvider).actionType; (origin as WebExtensionsStateProvider).actionType;
} }
// ignore_for_file: type=lint // 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 // 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
@@ -140,7 +140,7 @@ class TabRepository extends _$TabRepository {
final tabStateDebouncer = Debouncer(const Duration(seconds: 3)); final tabStateDebouncer = Debouncer(const Duration(seconds: 3));
Map<String, TabState>? debounceStartValue; Map<String, TabState>? debounceStartValue;
ref.listen(tabStatesProvider, (previous, next) async { ref.listen(tabStatesProvider, (previous, next) {
//Since state changes occure pretty often and our map always contains //Since state changes occure pretty often and our map always contains
//the latest state, we cache the value before starting debouncing and //the latest state, we cache the value before starting debouncing and
//later diff to that, to avoid frequent database writes //later diff to that, to avoid frequent database writes
@@ -6,16 +6,17 @@ part of 'tab.dart';
// RiverpodGenerator // RiverpodGenerator
// ************************************************************************** // **************************************************************************
String _$tabRepositoryHash() => r'f7d6584d9d6a320ebe4964dd5dc80bda987c40c2'; String _$tabRepositoryHash() => r'e6f9d58982f3bbe389e3a3299bb498c6e8e101eb';
/// See also [TabRepository]. /// See also [TabRepository].
@ProviderFor(TabRepository) @ProviderFor(TabRepository)
final tabRepositoryProvider = NotifierProvider<TabRepository, void>.internal( final tabRepositoryProvider = NotifierProvider<TabRepository, void>.internal(
TabRepository.new, TabRepository.new,
name: r'tabRepositoryProvider', name: r'tabRepositoryProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$tabRepositoryHash, ? null
: _$tabRepositoryHash,
dependencies: null, dependencies: null,
allTransitiveDependencies: null, allTransitiveDependencies: null,
); );
@@ -7,7 +7,7 @@ final class ViewTabsSheet extends Sheet {
bool get cacheHash => true; bool get cacheHash => true;
@override @override
List<Object?> get hashParameters => []; List<Object?> get hashParameters => [null];
} }
final class TabQaChatSheet extends Sheet { final class TabQaChatSheet extends Sheet {
@@ -1,7 +1,6 @@
import 'dart:async'; import 'dart:async';
import 'package:lensai/domain/entities/equatable_iterable.dart'; import 'package:lensai/domain/entities/equatable_iterable.dart';
import 'package:lensai/extensions/nullable.dart';
import 'package:lensai/features/bangs/data/models/bang_data.dart'; import 'package:lensai/features/bangs/data/models/bang_data.dart';
import 'package:lensai/features/bangs/domain/repositories/data.dart'; import 'package:lensai/features/bangs/domain/repositories/data.dart';
import 'package:lensai/features/geckoview/domain/entities/states/tab.dart'; import 'package:lensai/features/geckoview/domain/entities/states/tab.dart';
@@ -184,9 +183,7 @@ EquatableCollection<List<TabPreview>> seamlessFilteredTabPreviews(
id: tab.id, id: tab.id,
title: tab.title ?? availableTabStates.collection[tab.id]!.title, title: tab.title ?? availableTabStates.collection[tab.id]!.title,
icon: null, icon: null,
url: url: tab.cleanUrl ?? availableTabStates.collection[tab.id]!.url,
tab.cleanUrl.mapNotNull(Uri.tryParse) ??
availableTabStates.collection[tab.id]!.url,
highlightedUrl: tab.url, highlightedUrl: tab.url,
content: tab.extractedContent ?? tab.fullContent, content: tab.extractedContent ?? tab.fullContent,
); );
@@ -39,21 +39,15 @@ class AvailableTabIdsFamily extends Family<EquatableCollection<List<String>>> {
const AvailableTabIdsFamily(); const AvailableTabIdsFamily();
/// See also [availableTabIds]. /// See also [availableTabIds].
AvailableTabIdsProvider call( AvailableTabIdsProvider call(ContainerFilter containerFilter) {
ContainerFilter containerFilter, return AvailableTabIdsProvider(containerFilter);
) {
return AvailableTabIdsProvider(
containerFilter,
);
} }
@override @override
AvailableTabIdsProvider getProviderOverride( AvailableTabIdsProvider getProviderOverride(
covariant AvailableTabIdsProvider provider, covariant AvailableTabIdsProvider provider,
) { ) {
return call( return call(provider.containerFilter);
provider.containerFilter,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -75,24 +69,20 @@ class AvailableTabIdsFamily extends Family<EquatableCollection<List<String>>> {
class AvailableTabIdsProvider class AvailableTabIdsProvider
extends AutoDisposeProvider<EquatableCollection<List<String>>> { extends AutoDisposeProvider<EquatableCollection<List<String>>> {
/// See also [availableTabIds]. /// See also [availableTabIds].
AvailableTabIdsProvider( AvailableTabIdsProvider(ContainerFilter containerFilter)
ContainerFilter containerFilter, : this._internal(
) : this._internal( (ref) => availableTabIds(ref as AvailableTabIdsRef, containerFilter),
(ref) => availableTabIds( from: availableTabIdsProvider,
ref as AvailableTabIdsRef, name: r'availableTabIdsProvider',
containerFilter, debugGetCreateSourceHash:
), const bool.fromEnvironment('dart.vm.product')
from: availableTabIdsProvider, ? null
name: r'availableTabIdsProvider', : _$availableTabIdsHash,
debugGetCreateSourceHash: dependencies: AvailableTabIdsFamily._dependencies,
const bool.fromEnvironment('dart.vm.product') allTransitiveDependencies:
? null AvailableTabIdsFamily._allTransitiveDependencies,
: _$availableTabIdsHash, containerFilter: containerFilter,
dependencies: AvailableTabIdsFamily._dependencies, );
allTransitiveDependencies:
AvailableTabIdsFamily._allTransitiveDependencies,
containerFilter: containerFilter,
);
AvailableTabIdsProvider._internal( AvailableTabIdsProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -109,7 +99,7 @@ class AvailableTabIdsProvider
@override @override
Override overrideWith( Override overrideWith(
EquatableCollection<List<String>> Function(AvailableTabIdsRef provider) EquatableCollection<List<String>> Function(AvailableTabIdsRef provider)
create, create,
) { ) {
return ProviderOverride( return ProviderOverride(
origin: this, origin: this,
@@ -127,7 +117,7 @@ class AvailableTabIdsProvider
@override @override
AutoDisposeProviderElement<EquatableCollection<List<String>>> AutoDisposeProviderElement<EquatableCollection<List<String>>>
createElement() { createElement() {
return _AvailableTabIdsProviderElement(this); return _AvailableTabIdsProviderElement(this);
} }
@@ -178,21 +168,15 @@ class AvailableTabStatesFamily
const AvailableTabStatesFamily(); const AvailableTabStatesFamily();
/// See also [availableTabStates]. /// See also [availableTabStates].
AvailableTabStatesProvider call( AvailableTabStatesProvider call(ContainerFilter containerFilter) {
ContainerFilter containerFilter, return AvailableTabStatesProvider(containerFilter);
) {
return AvailableTabStatesProvider(
containerFilter,
);
} }
@override @override
AvailableTabStatesProvider getProviderOverride( AvailableTabStatesProvider getProviderOverride(
covariant AvailableTabStatesProvider provider, covariant AvailableTabStatesProvider provider,
) { ) {
return call( return call(provider.containerFilter);
provider.containerFilter,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -214,24 +198,21 @@ class AvailableTabStatesFamily
class AvailableTabStatesProvider class AvailableTabStatesProvider
extends AutoDisposeProvider<EquatableCollection<Map<String, TabState>>> { extends AutoDisposeProvider<EquatableCollection<Map<String, TabState>>> {
/// See also [availableTabStates]. /// See also [availableTabStates].
AvailableTabStatesProvider( AvailableTabStatesProvider(ContainerFilter containerFilter)
ContainerFilter containerFilter, : this._internal(
) : this._internal( (ref) =>
(ref) => availableTabStates( availableTabStates(ref as AvailableTabStatesRef, containerFilter),
ref as AvailableTabStatesRef, from: availableTabStatesProvider,
containerFilter, name: r'availableTabStatesProvider',
), debugGetCreateSourceHash:
from: availableTabStatesProvider, const bool.fromEnvironment('dart.vm.product')
name: r'availableTabStatesProvider', ? null
debugGetCreateSourceHash: : _$availableTabStatesHash,
const bool.fromEnvironment('dart.vm.product') dependencies: AvailableTabStatesFamily._dependencies,
? null allTransitiveDependencies:
: _$availableTabStatesHash, AvailableTabStatesFamily._allTransitiveDependencies,
dependencies: AvailableTabStatesFamily._dependencies, containerFilter: containerFilter,
allTransitiveDependencies: );
AvailableTabStatesFamily._allTransitiveDependencies,
containerFilter: containerFilter,
);
AvailableTabStatesProvider._internal( AvailableTabStatesProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -248,8 +229,9 @@ class AvailableTabStatesProvider
@override @override
Override overrideWith( Override overrideWith(
EquatableCollection<Map<String, TabState>> Function( EquatableCollection<Map<String, TabState>> Function(
AvailableTabStatesRef provider) AvailableTabStatesRef provider,
create, )
create,
) { ) {
return ProviderOverride( return ProviderOverride(
origin: this, origin: this,
@@ -267,7 +249,7 @@ class AvailableTabStatesProvider
@override @override
AutoDisposeProviderElement<EquatableCollection<Map<String, TabState>>> AutoDisposeProviderElement<EquatableCollection<Map<String, TabState>>>
createElement() { createElement() {
return _AvailableTabStatesProviderElement(this); return _AvailableTabStatesProviderElement(this);
} }
@@ -294,8 +276,10 @@ mixin AvailableTabStatesRef
ContainerFilter get containerFilter; ContainerFilter get containerFilter;
} }
class _AvailableTabStatesProviderElement extends AutoDisposeProviderElement< class _AvailableTabStatesProviderElement
EquatableCollection<Map<String, TabState>>> with AvailableTabStatesRef { extends
AutoDisposeProviderElement<EquatableCollection<Map<String, TabState>>>
with AvailableTabStatesRef {
_AvailableTabStatesProviderElement(super.provider); _AvailableTabStatesProviderElement(super.provider);
@override @override
@@ -321,20 +305,14 @@ class SeamlessFilteredTabIdsFamily
TabSearchPartition searchPartition, TabSearchPartition searchPartition,
ContainerFilter containerFilter, ContainerFilter containerFilter,
) { ) {
return SeamlessFilteredTabIdsProvider( return SeamlessFilteredTabIdsProvider(searchPartition, containerFilter);
searchPartition,
containerFilter,
);
} }
@override @override
SeamlessFilteredTabIdsProvider getProviderOverride( SeamlessFilteredTabIdsProvider getProviderOverride(
covariant SeamlessFilteredTabIdsProvider provider, covariant SeamlessFilteredTabIdsProvider provider,
) { ) {
return call( return call(provider.searchPartition, provider.containerFilter);
provider.searchPartition,
provider.containerFilter,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -360,23 +338,23 @@ class SeamlessFilteredTabIdsProvider
TabSearchPartition searchPartition, TabSearchPartition searchPartition,
ContainerFilter containerFilter, ContainerFilter containerFilter,
) : this._internal( ) : this._internal(
(ref) => seamlessFilteredTabIds( (ref) => seamlessFilteredTabIds(
ref as SeamlessFilteredTabIdsRef, ref as SeamlessFilteredTabIdsRef,
searchPartition, searchPartition,
containerFilter, containerFilter,
), ),
from: seamlessFilteredTabIdsProvider, from: seamlessFilteredTabIdsProvider,
name: r'seamlessFilteredTabIdsProvider', name: r'seamlessFilteredTabIdsProvider',
debugGetCreateSourceHash: debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') const bool.fromEnvironment('dart.vm.product')
? null ? null
: _$seamlessFilteredTabIdsHash, : _$seamlessFilteredTabIdsHash,
dependencies: SeamlessFilteredTabIdsFamily._dependencies, dependencies: SeamlessFilteredTabIdsFamily._dependencies,
allTransitiveDependencies: allTransitiveDependencies:
SeamlessFilteredTabIdsFamily._allTransitiveDependencies, SeamlessFilteredTabIdsFamily._allTransitiveDependencies,
searchPartition: searchPartition, searchPartition: searchPartition,
containerFilter: containerFilter, containerFilter: containerFilter,
); );
SeamlessFilteredTabIdsProvider._internal( SeamlessFilteredTabIdsProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -395,8 +373,9 @@ class SeamlessFilteredTabIdsProvider
@override @override
Override overrideWith( Override overrideWith(
EquatableCollection<List<String>> Function( EquatableCollection<List<String>> Function(
SeamlessFilteredTabIdsRef provider) SeamlessFilteredTabIdsRef provider,
create, )
create,
) { ) {
return ProviderOverride( return ProviderOverride(
origin: this, origin: this,
@@ -415,7 +394,7 @@ class SeamlessFilteredTabIdsProvider
@override @override
AutoDisposeProviderElement<EquatableCollection<List<String>>> AutoDisposeProviderElement<EquatableCollection<List<String>>>
createElement() { createElement() {
return _SeamlessFilteredTabIdsProviderElement(this); return _SeamlessFilteredTabIdsProviderElement(this);
} }
@@ -461,7 +440,7 @@ class _SeamlessFilteredTabIdsProviderElement
} }
String _$seamlessFilteredTabPreviewsHash() => String _$seamlessFilteredTabPreviewsHash() =>
r'7a70eb2f3f59de5188d94a73790e39c339a6293b'; r'6beefa943d298b81482276f12484e27346ff9907';
/// See also [seamlessFilteredTabPreviews]. /// See also [seamlessFilteredTabPreviews].
@ProviderFor(seamlessFilteredTabPreviews) @ProviderFor(seamlessFilteredTabPreviews)
@@ -488,10 +467,7 @@ class SeamlessFilteredTabPreviewsFamily
SeamlessFilteredTabPreviewsProvider getProviderOverride( SeamlessFilteredTabPreviewsProvider getProviderOverride(
covariant SeamlessFilteredTabPreviewsProvider provider, covariant SeamlessFilteredTabPreviewsProvider provider,
) { ) {
return call( return call(provider.searchPartition, provider.containerFilter);
provider.searchPartition,
provider.containerFilter,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -517,23 +493,23 @@ class SeamlessFilteredTabPreviewsProvider
TabSearchPartition searchPartition, TabSearchPartition searchPartition,
ContainerFilter containerFilter, ContainerFilter containerFilter,
) : this._internal( ) : this._internal(
(ref) => seamlessFilteredTabPreviews( (ref) => seamlessFilteredTabPreviews(
ref as SeamlessFilteredTabPreviewsRef, ref as SeamlessFilteredTabPreviewsRef,
searchPartition, searchPartition,
containerFilter, containerFilter,
), ),
from: seamlessFilteredTabPreviewsProvider, from: seamlessFilteredTabPreviewsProvider,
name: r'seamlessFilteredTabPreviewsProvider', name: r'seamlessFilteredTabPreviewsProvider',
debugGetCreateSourceHash: debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') const bool.fromEnvironment('dart.vm.product')
? null ? null
: _$seamlessFilteredTabPreviewsHash, : _$seamlessFilteredTabPreviewsHash,
dependencies: SeamlessFilteredTabPreviewsFamily._dependencies, dependencies: SeamlessFilteredTabPreviewsFamily._dependencies,
allTransitiveDependencies: allTransitiveDependencies:
SeamlessFilteredTabPreviewsFamily._allTransitiveDependencies, SeamlessFilteredTabPreviewsFamily._allTransitiveDependencies,
searchPartition: searchPartition, searchPartition: searchPartition,
containerFilter: containerFilter, containerFilter: containerFilter,
); );
SeamlessFilteredTabPreviewsProvider._internal( SeamlessFilteredTabPreviewsProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -552,8 +528,9 @@ class SeamlessFilteredTabPreviewsProvider
@override @override
Override overrideWith( Override overrideWith(
EquatableCollection<List<TabPreview>> Function( EquatableCollection<List<TabPreview>> Function(
SeamlessFilteredTabPreviewsRef provider) SeamlessFilteredTabPreviewsRef provider,
create, )
create,
) { ) {
return ProviderOverride( return ProviderOverride(
origin: this, origin: this,
@@ -572,7 +549,7 @@ class SeamlessFilteredTabPreviewsProvider
@override @override
AutoDisposeProviderElement<EquatableCollection<List<TabPreview>>> AutoDisposeProviderElement<EquatableCollection<List<TabPreview>>>
createElement() { createElement() {
return _SeamlessFilteredTabPreviewsProviderElement(this); return _SeamlessFilteredTabPreviewsProviderElement(this);
} }
@@ -623,9 +600,7 @@ String _$selectedBangTriggerHash() =>
abstract class _$SelectedBangTrigger extends BuildlessNotifier<String?> { abstract class _$SelectedBangTrigger extends BuildlessNotifier<String?> {
late final String? domain; late final String? domain;
String? build({ String? build({String? domain});
String? domain,
});
} }
/// See also [SelectedBangTrigger]. /// See also [SelectedBangTrigger].
@@ -638,21 +613,15 @@ class SelectedBangTriggerFamily extends Family<String?> {
const SelectedBangTriggerFamily(); const SelectedBangTriggerFamily();
/// See also [SelectedBangTrigger]. /// See also [SelectedBangTrigger].
SelectedBangTriggerProvider call({ SelectedBangTriggerProvider call({String? domain}) {
String? domain, return SelectedBangTriggerProvider(domain: domain);
}) {
return SelectedBangTriggerProvider(
domain: domain,
);
} }
@override @override
SelectedBangTriggerProvider getProviderOverride( SelectedBangTriggerProvider getProviderOverride(
covariant SelectedBangTriggerProvider provider, covariant SelectedBangTriggerProvider provider,
) { ) {
return call( return call(domain: provider.domain);
domain: provider.domain,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -674,21 +643,20 @@ class SelectedBangTriggerFamily extends Family<String?> {
class SelectedBangTriggerProvider class SelectedBangTriggerProvider
extends NotifierProviderImpl<SelectedBangTrigger, String?> { extends NotifierProviderImpl<SelectedBangTrigger, String?> {
/// See also [SelectedBangTrigger]. /// See also [SelectedBangTrigger].
SelectedBangTriggerProvider({ SelectedBangTriggerProvider({String? domain})
String? domain, : this._internal(
}) : this._internal( () => SelectedBangTrigger()..domain = domain,
() => SelectedBangTrigger()..domain = domain, from: selectedBangTriggerProvider,
from: selectedBangTriggerProvider, name: r'selectedBangTriggerProvider',
name: r'selectedBangTriggerProvider', debugGetCreateSourceHash:
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
const bool.fromEnvironment('dart.vm.product') ? null
? null : _$selectedBangTriggerHash,
: _$selectedBangTriggerHash, dependencies: SelectedBangTriggerFamily._dependencies,
dependencies: SelectedBangTriggerFamily._dependencies, allTransitiveDependencies:
allTransitiveDependencies: SelectedBangTriggerFamily._allTransitiveDependencies,
SelectedBangTriggerFamily._allTransitiveDependencies, domain: domain,
domain: domain, );
);
SelectedBangTriggerProvider._internal( SelectedBangTriggerProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -703,12 +671,8 @@ class SelectedBangTriggerProvider
final String? domain; final String? domain;
@override @override
String? runNotifierBuild( String? runNotifierBuild(covariant SelectedBangTrigger notifier) {
covariant SelectedBangTrigger notifier, return notifier.build(domain: domain);
) {
return notifier.build(
domain: domain,
);
} }
@override @override
@@ -768,9 +732,7 @@ abstract class _$SelectedBangData
extends BuildlessAutoDisposeNotifier<BangData?> { extends BuildlessAutoDisposeNotifier<BangData?> {
late final String? domain; late final String? domain;
BangData? build({ BangData? build({String? domain});
String? domain,
});
} }
/// See also [SelectedBangData]. /// See also [SelectedBangData].
@@ -783,21 +745,15 @@ class SelectedBangDataFamily extends Family<BangData?> {
const SelectedBangDataFamily(); const SelectedBangDataFamily();
/// See also [SelectedBangData]. /// See also [SelectedBangData].
SelectedBangDataProvider call({ SelectedBangDataProvider call({String? domain}) {
String? domain, return SelectedBangDataProvider(domain: domain);
}) {
return SelectedBangDataProvider(
domain: domain,
);
} }
@override @override
SelectedBangDataProvider getProviderOverride( SelectedBangDataProvider getProviderOverride(
covariant SelectedBangDataProvider provider, covariant SelectedBangDataProvider provider,
) { ) {
return call( return call(domain: provider.domain);
domain: provider.domain,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -819,21 +775,20 @@ class SelectedBangDataFamily extends Family<BangData?> {
class SelectedBangDataProvider class SelectedBangDataProvider
extends AutoDisposeNotifierProviderImpl<SelectedBangData, BangData?> { extends AutoDisposeNotifierProviderImpl<SelectedBangData, BangData?> {
/// See also [SelectedBangData]. /// See also [SelectedBangData].
SelectedBangDataProvider({ SelectedBangDataProvider({String? domain})
String? domain, : this._internal(
}) : this._internal( () => SelectedBangData()..domain = domain,
() => SelectedBangData()..domain = domain, from: selectedBangDataProvider,
from: selectedBangDataProvider, name: r'selectedBangDataProvider',
name: r'selectedBangDataProvider', debugGetCreateSourceHash:
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
const bool.fromEnvironment('dart.vm.product') ? null
? null : _$selectedBangDataHash,
: _$selectedBangDataHash, dependencies: SelectedBangDataFamily._dependencies,
dependencies: SelectedBangDataFamily._dependencies, allTransitiveDependencies:
allTransitiveDependencies: SelectedBangDataFamily._allTransitiveDependencies,
SelectedBangDataFamily._allTransitiveDependencies, domain: domain,
domain: domain, );
);
SelectedBangDataProvider._internal( SelectedBangDataProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -848,12 +803,8 @@ class SelectedBangDataProvider
final String? domain; final String? domain;
@override @override
BangData? runNotifierBuild( BangData? runNotifierBuild(covariant SelectedBangData notifier) {
covariant SelectedBangData notifier, return notifier.build(domain: domain);
) {
return notifier.build(
domain: domain,
);
} }
@override @override
@@ -874,7 +825,7 @@ class SelectedBangDataProvider
@override @override
AutoDisposeNotifierProviderElement<SelectedBangData, BangData?> AutoDisposeNotifierProviderElement<SelectedBangData, BangData?>
createElement() { createElement() {
return _SelectedBangDataProviderElement(this); return _SelectedBangDataProviderElement(this);
} }
@@ -915,9 +866,10 @@ String _$showFindInPageHash() => r'7ee5703f7d0c7e8a8dd6b0849d7b1e0a41fe24d9';
final showFindInPageProvider = NotifierProvider<ShowFindInPage, bool>.internal( final showFindInPageProvider = NotifierProvider<ShowFindInPage, bool>.internal(
ShowFindInPage.new, ShowFindInPage.new,
name: r'showFindInPageProvider', name: r'showFindInPageProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$showFindInPageHash, ? null
: _$showFindInPageHash,
dependencies: null, dependencies: null,
allTransitiveDependencies: null, allTransitiveDependencies: null,
); );
@@ -12,13 +12,15 @@ String _$intentStreamHash() => r'e78268ec703cd0d1f08d41b9e10a487e6000b7da';
@ProviderFor(IntentStream) @ProviderFor(IntentStream)
final intentStreamProvider = final intentStreamProvider =
AutoDisposeStreamNotifierProvider<IntentStream, SharedContent>.internal( AutoDisposeStreamNotifierProvider<IntentStream, SharedContent>.internal(
IntentStream.new, IntentStream.new,
name: r'intentStreamProvider', name: r'intentStreamProvider',
debugGetCreateSourceHash: debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') ? null : _$intentStreamHash, const bool.fromEnvironment('dart.vm.product')
dependencies: null, ? null
allTransitiveDependencies: null, : _$intentStreamHash,
); dependencies: null,
allTransitiveDependencies: null,
);
typedef _$IntentStream = AutoDisposeStreamNotifier<SharedContent>; typedef _$IntentStream = AutoDisposeStreamNotifier<SharedContent>;
// ignore_for_file: type=lint // ignore_for_file: type=lint
@@ -13,14 +13,15 @@ String _$browserDataServiceHash() =>
@ProviderFor(BrowserDataService) @ProviderFor(BrowserDataService)
final browserDataServiceProvider = final browserDataServiceProvider =
AutoDisposeNotifierProvider<BrowserDataService, void>.internal( AutoDisposeNotifierProvider<BrowserDataService, void>.internal(
BrowserDataService.new, BrowserDataService.new,
name: r'browserDataServiceProvider', name: r'browserDataServiceProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$browserDataServiceHash, ? null
dependencies: null, : _$browserDataServiceHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
typedef _$BrowserDataService = AutoDisposeNotifier<void>; typedef _$BrowserDataService = AutoDisposeNotifier<void>;
// ignore_for_file: type=lint // ignore_for_file: type=lint
@@ -13,14 +13,15 @@ String _$engineSettingsReplicationServiceHash() =>
@ProviderFor(EngineSettingsReplicationService) @ProviderFor(EngineSettingsReplicationService)
final engineSettingsReplicationServiceProvider = final engineSettingsReplicationServiceProvider =
NotifierProvider<EngineSettingsReplicationService, void>.internal( NotifierProvider<EngineSettingsReplicationService, void>.internal(
EngineSettingsReplicationService.new, EngineSettingsReplicationService.new,
name: r'engineSettingsReplicationServiceProvider', name: r'engineSettingsReplicationServiceProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$engineSettingsReplicationServiceHash, ? null
dependencies: null, : _$engineSettingsReplicationServiceHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
typedef _$EngineSettingsReplicationService = Notifier<void>; typedef _$EngineSettingsReplicationService = Notifier<void>;
// ignore_for_file: type=lint // ignore_for_file: type=lint
@@ -13,14 +13,15 @@ String _$proxySettingsReplucationHash() =>
@ProviderFor(ProxySettingsReplucation) @ProviderFor(ProxySettingsReplucation)
final proxySettingsReplucationProvider = final proxySettingsReplucationProvider =
NotifierProvider<ProxySettingsReplucation, void>.internal( NotifierProvider<ProxySettingsReplucation, void>.internal(
ProxySettingsReplucation.new, ProxySettingsReplucation.new,
name: r'proxySettingsReplucationProvider', name: r'proxySettingsReplucationProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$proxySettingsReplucationHash, ? null
dependencies: null, : _$proxySettingsReplucationHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
typedef _$ProxySettingsReplucation = Notifier<void>; typedef _$ProxySettingsReplucation = Notifier<void>;
// ignore_for_file: type=lint // ignore_for_file: type=lint
@@ -7,7 +7,6 @@ import 'package:flutter_material_design_icons/flutter_material_design_icons.dart
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/data/models/web_page_info.dart'; import 'package:lensai/data/models/web_page_info.dart';
import 'package:lensai/features/bangs/data/models/bang_data.dart';
import 'package:lensai/features/bangs/domain/providers/bangs.dart'; import 'package:lensai/features/bangs/domain/providers/bangs.dart';
import 'package:lensai/features/bangs/presentation/widgets/site_search.dart'; import 'package:lensai/features/bangs/presentation/widgets/site_search.dart';
import 'package:lensai/features/chat/features/chat_store/data/models/chat_metadata.dart'; import 'package:lensai/features/chat/features/chat_store/data/models/chat_metadata.dart';
@@ -20,6 +19,7 @@ import 'package:lensai/features/geckoview/features/browser/domain/entities/sheet
import 'package:lensai/features/geckoview/features/browser/presentation/widgets/browser_modules/address_with_suggestions_field.dart'; import 'package:lensai/features/geckoview/features/browser/presentation/widgets/browser_modules/address_with_suggestions_field.dart';
import 'package:lensai/features/user/domain/providers.dart'; import 'package:lensai/features/user/domain/providers.dart';
import 'package:lensai/presentation/widgets/failure_widget.dart'; import 'package:lensai/presentation/widgets/failure_widget.dart';
import 'package:lensai/presentation/widgets/website_feed_tile.dart';
import 'package:lensai/presentation/widgets/website_title_tile.dart'; import 'package:lensai/presentation/widgets/website_title_tile.dart';
import 'package:lensai/utils/ui_helper.dart' as ui_helper; import 'package:lensai/utils/ui_helper.dart' as ui_helper;
@@ -100,13 +100,13 @@ class WebPageDialog extends HookConsumerWidget {
loading: loading:
() => SiteSearch( () => SiteSearch(
domain: url.host, domain: url.host,
availableBangs: [ availableBangs: const [
BangData( // BangData(
websiteName: 'websiteName', // websiteName: 'websiteName',
domain: 'domain', // domain: 'domain',
trigger: 'trigger', // trigger: 'trigger',
urlTemplate: 'urlTemplate', // urlTemplate: 'urlTemplate',
), // ),
], ],
), ),
), ),
@@ -115,6 +115,7 @@ class WebPageDialog extends HookConsumerWidget {
availableBangCount == null || availableBangCount == null ||
availableBangCount > 0) availableBangCount > 0)
const Divider(), const Divider(),
WebsiteFeedTile(url, precachedInfo: precachedInfo),
ListTile( ListTile(
leading: const Icon(MdiIcons.contentCopy), leading: const Icon(MdiIcons.contentCopy),
title: const Text('Copy address'), title: const Text('Copy address'),
@@ -138,11 +139,23 @@ class WebPageDialog extends HookConsumerWidget {
leading: const Icon(MdiIcons.tabPlus), leading: const Icon(MdiIcons.tabPlus),
title: const Text('Clone tab'), title: const Text('Clone tab'),
onTap: () async { onTap: () async {
await ref final tabId = await ref
.read(tabRepositoryProvider.notifier) .read(tabRepositoryProvider.notifier)
.addTab(url: url); .addTab(url: url);
if (context.mounted) { if (context.mounted) {
//save reference before pop `ref` gets disposed
final repo = ref.read(
tabRepositoryProvider.notifier,
);
ui_helper.showTabSwitchMessage(
context,
onSwitch: () {
repo.selectTab(tabId);
},
);
context.pop(); context.pop();
} }
}, },
@@ -22,8 +22,6 @@ import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_re
import 'package:lensai/features/geckoview/features/find_in_page/presentation/widgets/find_in_page.dart'; import 'package:lensai/features/geckoview/features/find_in_page/presentation/widgets/find_in_page.dart';
import 'package:lensai/features/geckoview/features/readerview/presentation/widgets/reader_appearance_button.dart'; import 'package:lensai/features/geckoview/features/readerview/presentation/widgets/reader_appearance_button.dart';
import 'package:lensai/features/geckoview/features/tabs/features/chat/presentation/widgets/tab_qa_chat.dart'; import 'package:lensai/features/geckoview/features/tabs/features/chat/presentation/widgets/tab_qa_chat.dart';
import 'package:lensai/presentation/hooks/draggable_scrollable_controller.dart';
import 'package:lensai/presentation/hooks/overlay_portal_controller.dart';
import 'package:lensai/utils/ui_helper.dart' as ui_helper; import 'package:lensai/utils/ui_helper.dart' as ui_helper;
class BrowserScreen extends HookConsumerWidget { class BrowserScreen extends HookConsumerWidget {
@@ -98,7 +96,7 @@ class BrowserScreen extends HookConsumerWidget {
.read(tabRepositoryProvider.notifier) .read(tabRepositoryProvider.notifier)
.closeTab(details.data.tabId); .closeTab(details.data.tabId);
}, },
builder: (context, _, __) { builder: (context, _, _) {
return OverlayPortal( return OverlayPortal(
controller: overlayController, controller: overlayController,
overlayChildBuilder: (context) { overlayChildBuilder: (context) {
@@ -160,6 +158,11 @@ class BrowserScreen extends HookConsumerWidget {
return true; return true;
} }
//Go router has routes to go back to
if (context.canPop()) {
return true;
}
if (lastBackButtonPress.value != null && if (lastBackButtonPress.value != null &&
DateTime.now().difference(lastBackButtonPress.value!) < DateTime.now().difference(lastBackButtonPress.value!) <
const Duration(seconds: 2)) { const Duration(seconds: 2)) {
@@ -17,6 +17,7 @@ import 'package:lensai/features/geckoview/features/browser/presentation/widgets/
import 'package:lensai/features/geckoview/features/browser/presentation/widgets/tabs_action_button.dart'; import 'package:lensai/features/geckoview/features/browser/presentation/widgets/tabs_action_button.dart';
import 'package:lensai/features/geckoview/features/find_in_page/presentation/controllers/find_in_page_visibility.dart'; import 'package:lensai/features/geckoview/features/find_in_page/presentation/controllers/find_in_page_visibility.dart';
import 'package:lensai/features/geckoview/features/readerview/presentation/widgets/reader_button.dart'; import 'package:lensai/features/geckoview/features/readerview/presentation/widgets/reader_button.dart';
import 'package:lensai/features/web_feed/domain/services/feed_reader.dart';
import 'package:lensai/presentation/hooks/menu_controller.dart'; import 'package:lensai/presentation/hooks/menu_controller.dart';
import 'package:lensai/presentation/icons/tor_icons.dart'; import 'package:lensai/presentation/icons/tor_icons.dart';
import 'package:lensai/utils/ui_helper.dart' as ui_helper; import 'package:lensai/utils/ui_helper.dart' as ui_helper;
@@ -359,10 +360,28 @@ class BrowserBottomAppBar extends HookConsumerWidget {
), ),
MenuItemButton( MenuItemButton(
onPressed: () async { onPressed: () async {
await context.push(UserAuthRoute().location); final res = await ref
.read(feedReaderProvider.notifier)
.parseFeed(
Uri.parse('https://simonwillison.net/atom/everything/'),
);
if (context.mounted) {
await context.push(
FeedCreateRoute().location,
extra: res.feedData,
);
}
}, },
leadingIcon: const Icon(Icons.info), leadingIcon: const Icon(Icons.info),
child: const Text('Auth'), child: const Text('Add'),
),
MenuItemButton(
onPressed: () async {
await context.push(FeedListRoute().location);
},
leadingIcon: const Icon(Icons.info),
child: const Text('List'),
), ),
], ],
), ),
@@ -20,7 +20,7 @@ import 'package:lensai/features/user/domain/services/local_authentication.dart';
class BrowserView extends StatefulHookConsumerWidget { class BrowserView extends StatefulHookConsumerWidget {
final Duration screenshotPeriod; final Duration screenshotPeriod;
final FutureOr<void> Function()? postInitializationStep; final Future<void> Function()? postInitializationStep;
const BrowserView({ const BrowserView({
this.screenshotPeriod = const Duration(seconds: 10), this.screenshotPeriod = const Duration(seconds: 10),
@@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:lensai/extensions/nullable.dart';
import 'package:lensai/features/geckoview/domain/entities/states/web_extension.dart'; import 'package:lensai/features/geckoview/domain/entities/states/web_extension.dart';
class ExtensionBadgeIcon extends StatelessWidget { class ExtensionBadgeIcon extends StatelessWidget {
@@ -8,7 +9,7 @@ class ExtensionBadgeIcon extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final hasBadge = state.badgeText?.isNotEmpty ?? false; final hasBadge = state.badgeText.isNotEmpty;
return Badge( return Badge(
isLabelVisible: hasBadge, isLabelVisible: hasBadge,
@@ -137,7 +137,7 @@ class _TabSheetHeader extends HookConsumerWidget {
.maybeStartProxy(context); .maybeStartProxy(context);
} }
}, },
onDeleted: (container) async { onDeleted: (container) {
ref ref
.read(selectedContainerProvider.notifier) .read(selectedContainerProvider.notifier)
.clearContainer(); .clearContainer();
@@ -1,6 +1,7 @@
import 'dart:convert'; import 'dart:convert';
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart'; import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:lensai/extensions/nullable.dart';
import 'package:lensai/features/geckoview/features/contextmenu/domain/converters/hit_result_converter.dart'; import 'package:lensai/features/geckoview/features/contextmenu/domain/converters/hit_result_converter.dart';
extension HitResultJson on HitResult { extension HitResultJson on HitResult {
@@ -38,13 +39,11 @@ extension HitResultX on HitResult {
UnknownHitResult(src: final src) => src, UnknownHitResult(src: final src) => src,
ImageSrcHitResult(uri: final uri) => uri, ImageSrcHitResult(uri: final uri) => uri,
ImageHitResult(src: final src, title: final title) => ImageHitResult(src: final src, title: final title) =>
title?.isEmpty ?? true title.isEmpty ? (src.length > maxTitleLength ? 'image' : src) : title!,
? (src.length > maxTitleLength ? 'image' : src)
: title!,
VideoHitResult(src: final src, title: final title) => VideoHitResult(src: final src, title: final title) =>
(title?.isEmpty ?? true) ? src : title!, (title.isEmpty) ? src : title!,
AudioHitResult(src: final src, title: final title) => AudioHitResult(src: final src, title: final title) =>
(title?.isEmpty ?? true) ? src : title!, (title.isEmpty) ? src : title!,
_ => 'about:blank', _ => 'about:blank',
}; };
} }
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart'; import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/extensions/nullable.dart'; import 'package:lensai/extensions/nullable.dart';
import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart'; import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart';
@@ -24,6 +25,10 @@ class CopyEmail extends HookConsumerWidget {
final email = hitResult.tryGetLink().mapNotNull((url) => url.host); final email = hitResult.tryGetLink().mapNotNull((url) => url.host);
if (email != null) { if (email != null) {
await Clipboard.setData(ClipboardData(text: email)); await Clipboard.setData(ClipboardData(text: email));
if (context.mounted) {
context.pop();
}
} }
}, },
); );
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart'; import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/features/geckoview/domain/providers/tab_state.dart'; import 'package:lensai/features/geckoview/domain/providers/tab_state.dart';
import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart'; import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart';
@@ -30,6 +31,10 @@ class CopyImage extends HookConsumerWidget {
isPrivate: currentTab.isPrivate, isPrivate: currentTab.isPrivate,
referrerUrl: currentTab.url, referrerUrl: currentTab.url,
); );
if (context.mounted) {
context.pop();
}
} }
}, },
); );
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart'; import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/extensions/nullable.dart'; import 'package:lensai/extensions/nullable.dart';
import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart'; import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart';
@@ -21,9 +22,13 @@ class CopyImageLocation extends HookConsumerWidget {
leading: const Icon(MdiIcons.imageMarker), leading: const Icon(MdiIcons.imageMarker),
title: const Text('Copy image location'), title: const Text('Copy image location'),
onTap: () async { onTap: () async {
await hitResult.tryGetLink().mapNotNull( await hitResult.tryGetLink().mapNotNull((link) async {
(link) => Clipboard.setData(ClipboardData(text: link.toString())), await Clipboard.setData(ClipboardData(text: link.toString()));
);
if (context.mounted) {
context.pop();
}
});
}, },
); );
} }
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart'; import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/extensions/nullable.dart'; import 'package:lensai/extensions/nullable.dart';
import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart'; import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart';
@@ -21,9 +22,13 @@ class CopyLink extends HookConsumerWidget {
leading: const Icon(MdiIcons.contentCopy), leading: const Icon(MdiIcons.contentCopy),
title: const Text('Copy link'), title: const Text('Copy link'),
onTap: () async { onTap: () async {
await hitResult.tryGetLink().mapNotNull( await hitResult.tryGetLink().mapNotNull((link) async {
(link) => Clipboard.setData(ClipboardData(text: link.toString())), await Clipboard.setData(ClipboardData(text: link.toString()));
);
if (context.mounted) {
context.pop();
}
});
}, },
); );
} }
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart'; import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/extensions/nullable.dart'; import 'package:lensai/extensions/nullable.dart';
import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart'; import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart';
@@ -22,9 +23,13 @@ class LaunchExternal extends HookConsumerWidget {
leading: const Icon(Icons.open_in_browser), leading: const Icon(Icons.open_in_browser),
title: const Text('Launch External'), title: const Text('Launch External'),
onTap: () async { onTap: () async {
await hitResult.tryGetLink().mapNotNull( await hitResult.tryGetLink().mapNotNull((url) async {
(url) => launchUrlFeedback(context, url), await launchUrlFeedback(context, url);
);
if (context.mounted) {
context.pop();
}
});
}, },
); );
} }
@@ -1,10 +1,12 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart'; import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/features/geckoview/domain/providers/selected_tab.dart'; import 'package:lensai/features/geckoview/domain/providers/selected_tab.dart';
import 'package:lensai/features/geckoview/domain/repositories/tab.dart'; import 'package:lensai/features/geckoview/domain/repositories/tab.dart';
import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart'; import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart';
import 'package:lensai/utils/ui_helper.dart';
class OpenImageInNewTab extends HookConsumerWidget { class OpenImageInNewTab extends HookConsumerWidget {
final HitResult hitResult; final HitResult hitResult;
@@ -22,9 +24,28 @@ class OpenImageInNewTab extends HookConsumerWidget {
title: const Text('Open image in new tab'), title: const Text('Open image in new tab'),
onTap: () async { onTap: () async {
final currentTabId = ref.read(selectedTabProvider); final currentTabId = ref.read(selectedTabProvider);
await ref
final tabId = await ref
.read(tabRepositoryProvider.notifier) .read(tabRepositoryProvider.notifier)
.addTab(url: hitResult.tryGetLink(), parentId: currentTabId); .addTab(
url: hitResult.tryGetLink(),
parentId: currentTabId,
selectTab: false,
);
if (context.mounted) {
//save reference before pop `ref` gets disposed
final repo = ref.read(tabRepositoryProvider.notifier);
showTabSwitchMessage(
context,
onSwitch: () {
repo.selectTab(tabId);
},
);
context.pop();
}
}, },
); );
} }
@@ -1,9 +1,12 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart'; import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/features/geckoview/domain/providers/selected_tab.dart';
import 'package:lensai/features/geckoview/domain/repositories/tab.dart'; import 'package:lensai/features/geckoview/domain/repositories/tab.dart';
import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart'; import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart';
import 'package:lensai/utils/ui_helper.dart';
class OpenInNewTab extends HookConsumerWidget { class OpenInNewTab extends HookConsumerWidget {
final HitResult hitResult; final HitResult hitResult;
@@ -20,9 +23,29 @@ class OpenInNewTab extends HookConsumerWidget {
leading: const Icon(MdiIcons.tabPlus), leading: const Icon(MdiIcons.tabPlus),
title: const Text('Open in new tab'), title: const Text('Open in new tab'),
onTap: () async { onTap: () async {
await ref final currentTabId = ref.read(selectedTabProvider);
final tabId = await ref
.read(tabRepositoryProvider.notifier) .read(tabRepositoryProvider.notifier)
.addTab(url: hitResult.tryGetLink()); .addTab(
url: hitResult.tryGetLink(),
parentId: currentTabId,
selectTab: false,
);
if (context.mounted) {
//save reference before pop `ref` gets disposed
final repo = ref.read(tabRepositoryProvider.notifier);
showTabSwitchMessage(
context,
onSwitch: () {
repo.selectTab(tabId);
},
);
context.pop();
}
}, },
); );
} }
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart'; import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/features/geckoview/domain/providers/tab_state.dart'; import 'package:lensai/features/geckoview/domain/providers/tab_state.dart';
import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart'; import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart';
@@ -31,6 +32,10 @@ class SaveFile extends HookConsumerWidget {
isPrivate: currentTab.isPrivate, isPrivate: currentTab.isPrivate,
referrerUrl: currentTab.url, referrerUrl: currentTab.url,
); );
if (context.mounted) {
context.pop();
}
} }
}, },
); );
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart'; import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/features/geckoview/domain/providers/tab_state.dart'; import 'package:lensai/features/geckoview/domain/providers/tab_state.dart';
import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart'; import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart';
@@ -31,6 +32,10 @@ class SaveImage extends HookConsumerWidget {
isPrivate: currentTab.isPrivate, isPrivate: currentTab.isPrivate,
referrerUrl: currentTab.url, referrerUrl: currentTab.url,
); );
if (context.mounted) {
context.pop();
}
} }
}, },
); );
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart'; import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/extensions/nullable.dart'; import 'package:lensai/extensions/nullable.dart';
import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart'; import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart';
@@ -24,6 +25,10 @@ class ShareEmail extends HookConsumerWidget {
final email = hitResult.tryGetLink().mapNotNull((url) => url.path); final email = hitResult.tryGetLink().mapNotNull((url) => url.path);
if (email != null) { if (email != null) {
await Share.share(email); await Share.share(email);
if (context.mounted) {
context.pop();
}
} }
}, },
); );
@@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_material_design_icons/flutter_material_design_icons.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.dart';
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart'; import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/features/geckoview/domain/providers/tab_state.dart'; import 'package:lensai/features/geckoview/domain/providers/tab_state.dart';
import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart'; import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart';
@@ -30,6 +31,10 @@ class ShareImage extends HookConsumerWidget {
isPrivate: currentTab.isPrivate, isPrivate: currentTab.isPrivate,
referrerUrl: currentTab.url, referrerUrl: currentTab.url,
); );
if (context.mounted) {
context.pop();
}
} }
}, },
); );
@@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_mozilla_components/flutter_mozilla_components.dart'; import 'package:flutter_mozilla_components/flutter_mozilla_components.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/extensions/nullable.dart'; import 'package:lensai/extensions/nullable.dart';
import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart'; import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart';
@@ -21,6 +22,10 @@ class ShareLink extends HookConsumerWidget {
title: const Text('Share link'), title: const Text('Share link'),
onTap: () async { onTap: () async {
await hitResult.tryGetLink().mapNotNull((url) => Share.shareUri(url)); await hitResult.tryGetLink().mapNotNull((url) => Share.shareUri(url));
if (context.mounted) {
context.pop();
}
}, },
); );
} }
@@ -34,9 +34,7 @@ abstract class _$FindInPageRepository
extends BuildlessAutoDisposeNotifier<void> { extends BuildlessAutoDisposeNotifier<void> {
late final String? tabId; late final String? tabId;
void build( void build(String? tabId);
String? tabId,
);
} }
/// See also [FindInPageRepository]. /// See also [FindInPageRepository].
@@ -49,21 +47,15 @@ class FindInPageRepositoryFamily extends Family<void> {
const FindInPageRepositoryFamily(); const FindInPageRepositoryFamily();
/// See also [FindInPageRepository]. /// See also [FindInPageRepository].
FindInPageRepositoryProvider call( FindInPageRepositoryProvider call(String? tabId) {
String? tabId, return FindInPageRepositoryProvider(tabId);
) {
return FindInPageRepositoryProvider(
tabId,
);
} }
@override @override
FindInPageRepositoryProvider getProviderOverride( FindInPageRepositoryProvider getProviderOverride(
covariant FindInPageRepositoryProvider provider, covariant FindInPageRepositoryProvider provider,
) { ) {
return call( return call(provider.tabId);
provider.tabId,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -85,21 +77,20 @@ class FindInPageRepositoryFamily extends Family<void> {
class FindInPageRepositoryProvider class FindInPageRepositoryProvider
extends AutoDisposeNotifierProviderImpl<FindInPageRepository, void> { extends AutoDisposeNotifierProviderImpl<FindInPageRepository, void> {
/// See also [FindInPageRepository]. /// See also [FindInPageRepository].
FindInPageRepositoryProvider( FindInPageRepositoryProvider(String? tabId)
String? tabId, : this._internal(
) : this._internal( () => FindInPageRepository()..tabId = tabId,
() => FindInPageRepository()..tabId = tabId, from: findInPageRepositoryProvider,
from: findInPageRepositoryProvider, name: r'findInPageRepositoryProvider',
name: r'findInPageRepositoryProvider', debugGetCreateSourceHash:
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
const bool.fromEnvironment('dart.vm.product') ? null
? null : _$findInPageRepositoryHash,
: _$findInPageRepositoryHash, dependencies: FindInPageRepositoryFamily._dependencies,
dependencies: FindInPageRepositoryFamily._dependencies, allTransitiveDependencies:
allTransitiveDependencies: FindInPageRepositoryFamily._allTransitiveDependencies,
FindInPageRepositoryFamily._allTransitiveDependencies, tabId: tabId,
tabId: tabId, );
);
FindInPageRepositoryProvider._internal( FindInPageRepositoryProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -114,12 +105,8 @@ class FindInPageRepositoryProvider
final String? tabId; final String? tabId;
@override @override
void runNotifierBuild( void runNotifierBuild(covariant FindInPageRepository notifier) {
covariant FindInPageRepository notifier, return notifier.build(tabId);
) {
return notifier.build(
tabId,
);
} }
@override @override
@@ -140,7 +127,7 @@ class FindInPageRepositoryProvider
@override @override
AutoDisposeNotifierProviderElement<FindInPageRepository, void> AutoDisposeNotifierProviderElement<FindInPageRepository, void>
createElement() { createElement() {
return _FindInPageRepositoryProviderElement(this); return _FindInPageRepositoryProviderElement(this);
} }
@@ -173,5 +160,6 @@ class _FindInPageRepositoryProviderElement
@override @override
String? get tabId => (origin as FindInPageRepositoryProvider).tabId; String? get tabId => (origin as FindInPageRepositoryProvider).tabId;
} }
// ignore_for_file: type=lint // 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 // 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
@@ -13,14 +13,15 @@ String _$findInPageVisibilityControllerHash() =>
@ProviderFor(FindInPageVisibilityController) @ProviderFor(FindInPageVisibilityController)
final findInPageVisibilityControllerProvider = final findInPageVisibilityControllerProvider =
AutoDisposeNotifierProvider<FindInPageVisibilityController, bool>.internal( AutoDisposeNotifierProvider<FindInPageVisibilityController, bool>.internal(
FindInPageVisibilityController.new, FindInPageVisibilityController.new,
name: r'findInPageVisibilityControllerProvider', name: r'findInPageVisibilityControllerProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$findInPageVisibilityControllerHash, ? null
dependencies: null, : _$findInPageVisibilityControllerHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
typedef _$FindInPageVisibilityController = AutoDisposeNotifier<bool>; typedef _$FindInPageVisibilityController = AutoDisposeNotifier<bool>;
// ignore_for_file: type=lint // ignore_for_file: type=lint
@@ -39,7 +39,6 @@ class _$PreferenceSettingGroupCWProxyImpl
this(settings: settings); this(settings: settings);
@override @override
/// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `PreferenceSettingGroup(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `PreferenceSettingGroup(...).copyWith.fieldName(...)` to override fields one at a time with nullification support.
/// ///
/// Usage /// Usage
@@ -51,14 +50,16 @@ class _$PreferenceSettingGroupCWProxyImpl
Object? settings = const $CopyWithPlaceholder(), Object? settings = const $CopyWithPlaceholder(),
}) { }) {
return PreferenceSettingGroup( return PreferenceSettingGroup(
description: description == const $CopyWithPlaceholder() description:
? _value.description description == const $CopyWithPlaceholder()
// ignore: cast_nullable_to_non_nullable ? _value.description
: description as String?, // ignore: cast_nullable_to_non_nullable
settings: settings == const $CopyWithPlaceholder() : description as String?,
? _value.settings settings:
// ignore: cast_nullable_to_non_nullable settings == const $CopyWithPlaceholder()
: settings as Map<String, PreferenceSetting>, ? _value.settings
// ignore: cast_nullable_to_non_nullable
: settings as Map<String, PreferenceSetting>,
); );
} }
} }
@@ -128,7 +129,6 @@ class _$PreferenceSettingCWProxyImpl implements _$PreferenceSettingCWProxy {
this(shouldBeDefault: shouldBeDefault); this(shouldBeDefault: shouldBeDefault);
@override @override
/// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `PreferenceSetting(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `PreferenceSetting(...).copyWith.fieldName(...)` to override fields one at a time with nullification support.
/// ///
/// Usage /// Usage
@@ -144,30 +144,36 @@ class _$PreferenceSettingCWProxyImpl implements _$PreferenceSettingCWProxy {
Object? shouldBeDefault = const $CopyWithPlaceholder(), Object? shouldBeDefault = const $CopyWithPlaceholder(),
}) { }) {
return PreferenceSetting( return PreferenceSetting(
value: value == const $CopyWithPlaceholder() value:
? _value.value value == const $CopyWithPlaceholder()
// ignore: cast_nullable_to_non_nullable ? _value.value
: value as Object, // ignore: cast_nullable_to_non_nullable
title: title == const $CopyWithPlaceholder() : value as Object,
? _value.title title:
// ignore: cast_nullable_to_non_nullable title == const $CopyWithPlaceholder()
: title as String?, ? _value.title
description: description == const $CopyWithPlaceholder() // ignore: cast_nullable_to_non_nullable
? _value.description : title as String?,
// ignore: cast_nullable_to_non_nullable description:
: description as String?, description == const $CopyWithPlaceholder()
actualValue: actualValue == const $CopyWithPlaceholder() ? _value.description
? _value.actualValue // ignore: cast_nullable_to_non_nullable
// ignore: cast_nullable_to_non_nullable : description as String?,
: actualValue as Object?, actualValue:
requireUserOptIn: requireUserOptIn == const $CopyWithPlaceholder() actualValue == const $CopyWithPlaceholder()
? _value.requireUserOptIn ? _value.actualValue
// ignore: cast_nullable_to_non_nullable // ignore: cast_nullable_to_non_nullable
: requireUserOptIn as bool, : actualValue as Object?,
shouldBeDefault: shouldBeDefault == const $CopyWithPlaceholder() requireUserOptIn:
? _value.shouldBeDefault requireUserOptIn == const $CopyWithPlaceholder()
// ignore: cast_nullable_to_non_nullable ? _value.requireUserOptIn
: shouldBeDefault as bool, // ignore: cast_nullable_to_non_nullable
: requireUserOptIn as bool,
shouldBeDefault:
shouldBeDefault == const $CopyWithPlaceholder()
? _value.shouldBeDefault
// ignore: cast_nullable_to_non_nullable
: shouldBeDefault as bool,
); );
} }
} }
@@ -13,14 +13,15 @@ String _$preferenceSettingContentHash() =>
@ProviderFor(_preferenceSettingContent) @ProviderFor(_preferenceSettingContent)
final _preferenceSettingContentProvider = final _preferenceSettingContentProvider =
FutureProvider<Map<String, dynamic>>.internal( FutureProvider<Map<String, dynamic>>.internal(
_preferenceSettingContent, _preferenceSettingContent,
name: r'_preferenceSettingContentProvider', name: r'_preferenceSettingContentProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$preferenceSettingContentHash, ? null
dependencies: null, : _$preferenceSettingContentHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead') @Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element // ignore: unused_element
@@ -60,21 +61,15 @@ class _PreferenceSettingGroupsFamily
const _PreferenceSettingGroupsFamily(); const _PreferenceSettingGroupsFamily();
/// See also [_preferenceSettingGroups]. /// See also [_preferenceSettingGroups].
_PreferenceSettingGroupsProvider call( _PreferenceSettingGroupsProvider call(PreferencePartition partition) {
PreferencePartition partition, return _PreferenceSettingGroupsProvider(partition);
) {
return _PreferenceSettingGroupsProvider(
partition,
);
} }
@override @override
_PreferenceSettingGroupsProvider getProviderOverride( _PreferenceSettingGroupsProvider getProviderOverride(
covariant _PreferenceSettingGroupsProvider provider, covariant _PreferenceSettingGroupsProvider provider,
) { ) {
return call( return call(provider.partition);
provider.partition,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -96,24 +91,23 @@ class _PreferenceSettingGroupsFamily
class _PreferenceSettingGroupsProvider class _PreferenceSettingGroupsProvider
extends FutureProvider<Map<String, PreferenceSettingGroup>> { extends FutureProvider<Map<String, PreferenceSettingGroup>> {
/// See also [_preferenceSettingGroups]. /// See also [_preferenceSettingGroups].
_PreferenceSettingGroupsProvider( _PreferenceSettingGroupsProvider(PreferencePartition partition)
PreferencePartition partition, : this._internal(
) : this._internal( (ref) => _preferenceSettingGroups(
(ref) => _preferenceSettingGroups( ref as _PreferenceSettingGroupsRef,
ref as _PreferenceSettingGroupsRef, partition,
partition, ),
), from: _preferenceSettingGroupsProvider,
from: _preferenceSettingGroupsProvider, name: r'_preferenceSettingGroupsProvider',
name: r'_preferenceSettingGroupsProvider', debugGetCreateSourceHash:
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
const bool.fromEnvironment('dart.vm.product') ? null
? null : _$preferenceSettingGroupsHash,
: _$preferenceSettingGroupsHash, dependencies: _PreferenceSettingGroupsFamily._dependencies,
dependencies: _PreferenceSettingGroupsFamily._dependencies, allTransitiveDependencies:
allTransitiveDependencies: _PreferenceSettingGroupsFamily._allTransitiveDependencies,
_PreferenceSettingGroupsFamily._allTransitiveDependencies, partition: partition,
partition: partition, );
);
_PreferenceSettingGroupsProvider._internal( _PreferenceSettingGroupsProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -130,8 +124,9 @@ class _PreferenceSettingGroupsProvider
@override @override
Override overrideWith( Override overrideWith(
FutureOr<Map<String, PreferenceSettingGroup>> Function( FutureOr<Map<String, PreferenceSettingGroup>> Function(
_PreferenceSettingGroupsRef provider) _PreferenceSettingGroupsRef provider,
create, )
create,
) { ) {
return ProviderOverride( return ProviderOverride(
origin: this, origin: this,
@@ -203,20 +198,14 @@ class _PreferenceSettingGroupFamily
PreferencePartition partition, PreferencePartition partition,
String groupName, String groupName,
) { ) {
return _PreferenceSettingGroupProvider( return _PreferenceSettingGroupProvider(partition, groupName);
partition,
groupName,
);
} }
@override @override
_PreferenceSettingGroupProvider getProviderOverride( _PreferenceSettingGroupProvider getProviderOverride(
covariant _PreferenceSettingGroupProvider provider, covariant _PreferenceSettingGroupProvider provider,
) { ) {
return call( return call(provider.partition, provider.groupName);
provider.partition,
provider.groupName,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -242,23 +231,23 @@ class _PreferenceSettingGroupProvider
PreferencePartition partition, PreferencePartition partition,
String groupName, String groupName,
) : this._internal( ) : this._internal(
(ref) => _preferenceSettingGroup( (ref) => _preferenceSettingGroup(
ref as _PreferenceSettingGroupRef, ref as _PreferenceSettingGroupRef,
partition, partition,
groupName, groupName,
), ),
from: _preferenceSettingGroupProvider, from: _preferenceSettingGroupProvider,
name: r'_preferenceSettingGroupProvider', name: r'_preferenceSettingGroupProvider',
debugGetCreateSourceHash: debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product') const bool.fromEnvironment('dart.vm.product')
? null ? null
: _$preferenceSettingGroupHash, : _$preferenceSettingGroupHash,
dependencies: _PreferenceSettingGroupFamily._dependencies, dependencies: _PreferenceSettingGroupFamily._dependencies,
allTransitiveDependencies: allTransitiveDependencies:
_PreferenceSettingGroupFamily._allTransitiveDependencies, _PreferenceSettingGroupFamily._allTransitiveDependencies,
partition: partition, partition: partition,
groupName: groupName, groupName: groupName,
); );
_PreferenceSettingGroupProvider._internal( _PreferenceSettingGroupProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -277,8 +266,9 @@ class _PreferenceSettingGroupProvider
@override @override
Override overrideWith( Override overrideWith(
FutureOr<PreferenceSettingGroup> Function( FutureOr<PreferenceSettingGroup> Function(
_PreferenceSettingGroupRef provider) _PreferenceSettingGroupRef provider,
create, )
create,
) { ) {
return ProviderOverride( return ProviderOverride(
origin: this, origin: this,
@@ -345,24 +335,29 @@ String _$preferenceRepositoryHash() =>
/// See also [_PreferenceRepository]. /// See also [_PreferenceRepository].
@ProviderFor(_PreferenceRepository) @ProviderFor(_PreferenceRepository)
final _preferenceRepositoryProvider = AutoDisposeNotifierProvider< final _preferenceRepositoryProvider = AutoDisposeNotifierProvider<
_PreferenceRepository, Raw<Stream<Map<String, Object>>>>.internal( _PreferenceRepository,
Raw<Stream<Map<String, Object>>>
>.internal(
_PreferenceRepository.new, _PreferenceRepository.new,
name: r'_preferenceRepositoryProvider', name: r'_preferenceRepositoryProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$preferenceRepositoryHash, ? null
: _$preferenceRepositoryHash,
dependencies: null, dependencies: null,
allTransitiveDependencies: null, allTransitiveDependencies: null,
); );
typedef _$PreferenceRepository typedef _$PreferenceRepository =
= AutoDisposeNotifier<Raw<Stream<Map<String, Object>>>>; AutoDisposeNotifier<Raw<Stream<Map<String, Object>>>>;
String _$unifiedPreferenceSettingsRepositoryHash() => String _$unifiedPreferenceSettingsRepositoryHash() =>
r'35aa16ffa7aa1453c8331ed7470ef85a68d27178'; r'35aa16ffa7aa1453c8331ed7470ef85a68d27178';
abstract class _$UnifiedPreferenceSettingsRepository abstract class _$UnifiedPreferenceSettingsRepository
extends BuildlessAutoDisposeStreamNotifier< extends
Map<String, PreferenceSettingGroup>> { BuildlessAutoDisposeStreamNotifier<
Map<String, PreferenceSettingGroup>
> {
late final PreferencePartition partition; late final PreferencePartition partition;
Stream<Map<String, PreferenceSettingGroup>> build( Stream<Map<String, PreferenceSettingGroup>> build(
@@ -385,18 +380,14 @@ class UnifiedPreferenceSettingsRepositoryFamily
UnifiedPreferenceSettingsRepositoryProvider call( UnifiedPreferenceSettingsRepositoryProvider call(
PreferencePartition partition, PreferencePartition partition,
) { ) {
return UnifiedPreferenceSettingsRepositoryProvider( return UnifiedPreferenceSettingsRepositoryProvider(partition);
partition,
);
} }
@override @override
UnifiedPreferenceSettingsRepositoryProvider getProviderOverride( UnifiedPreferenceSettingsRepositoryProvider getProviderOverride(
covariant UnifiedPreferenceSettingsRepositoryProvider provider, covariant UnifiedPreferenceSettingsRepositoryProvider provider,
) { ) {
return call( return call(provider.partition);
provider.partition,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -416,25 +407,27 @@ class UnifiedPreferenceSettingsRepositoryFamily
/// See also [UnifiedPreferenceSettingsRepository]. /// See also [UnifiedPreferenceSettingsRepository].
class UnifiedPreferenceSettingsRepositoryProvider class UnifiedPreferenceSettingsRepositoryProvider
extends AutoDisposeStreamNotifierProviderImpl< extends
UnifiedPreferenceSettingsRepository, AutoDisposeStreamNotifierProviderImpl<
Map<String, PreferenceSettingGroup>> { UnifiedPreferenceSettingsRepository,
Map<String, PreferenceSettingGroup>
> {
/// See also [UnifiedPreferenceSettingsRepository]. /// See also [UnifiedPreferenceSettingsRepository].
UnifiedPreferenceSettingsRepositoryProvider( UnifiedPreferenceSettingsRepositoryProvider(PreferencePartition partition)
PreferencePartition partition, : this._internal(
) : this._internal( () => UnifiedPreferenceSettingsRepository()..partition = partition,
() => UnifiedPreferenceSettingsRepository()..partition = partition, from: unifiedPreferenceSettingsRepositoryProvider,
from: unifiedPreferenceSettingsRepositoryProvider, name: r'unifiedPreferenceSettingsRepositoryProvider',
name: r'unifiedPreferenceSettingsRepositoryProvider', debugGetCreateSourceHash:
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
const bool.fromEnvironment('dart.vm.product') ? null
? null : _$unifiedPreferenceSettingsRepositoryHash,
: _$unifiedPreferenceSettingsRepositoryHash, dependencies: UnifiedPreferenceSettingsRepositoryFamily._dependencies,
dependencies: UnifiedPreferenceSettingsRepositoryFamily._dependencies, allTransitiveDependencies:
allTransitiveDependencies: UnifiedPreferenceSettingsRepositoryFamily UnifiedPreferenceSettingsRepositoryFamily
._allTransitiveDependencies, ._allTransitiveDependencies,
partition: partition, partition: partition,
); );
UnifiedPreferenceSettingsRepositoryProvider._internal( UnifiedPreferenceSettingsRepositoryProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -452,9 +445,7 @@ class UnifiedPreferenceSettingsRepositoryProvider
Stream<Map<String, PreferenceSettingGroup>> runNotifierBuild( Stream<Map<String, PreferenceSettingGroup>> runNotifierBuild(
covariant UnifiedPreferenceSettingsRepository notifier, covariant UnifiedPreferenceSettingsRepository notifier,
) { ) {
return notifier.build( return notifier.build(partition);
partition,
);
} }
@override @override
@@ -474,8 +465,11 @@ class UnifiedPreferenceSettingsRepositoryProvider
} }
@override @override
AutoDisposeStreamNotifierProviderElement<UnifiedPreferenceSettingsRepository, AutoDisposeStreamNotifierProviderElement<
Map<String, PreferenceSettingGroup>> createElement() { UnifiedPreferenceSettingsRepository,
Map<String, PreferenceSettingGroup>
>
createElement() {
return _UnifiedPreferenceSettingsRepositoryProviderElement(this); return _UnifiedPreferenceSettingsRepositoryProviderElement(this);
} }
@@ -497,16 +491,20 @@ class UnifiedPreferenceSettingsRepositoryProvider
@Deprecated('Will be removed in 3.0. Use Ref instead') @Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element // ignore: unused_element
mixin UnifiedPreferenceSettingsRepositoryRef mixin UnifiedPreferenceSettingsRepositoryRef
on AutoDisposeStreamNotifierProviderRef< on
Map<String, PreferenceSettingGroup>> { AutoDisposeStreamNotifierProviderRef<
Map<String, PreferenceSettingGroup>
> {
/// The parameter `partition` of this provider. /// The parameter `partition` of this provider.
PreferencePartition get partition; PreferencePartition get partition;
} }
class _UnifiedPreferenceSettingsRepositoryProviderElement class _UnifiedPreferenceSettingsRepositoryProviderElement
extends AutoDisposeStreamNotifierProviderElement< extends
UnifiedPreferenceSettingsRepository, AutoDisposeStreamNotifierProviderElement<
Map<String, PreferenceSettingGroup>> UnifiedPreferenceSettingsRepository,
Map<String, PreferenceSettingGroup>
>
with UnifiedPreferenceSettingsRepositoryRef { with UnifiedPreferenceSettingsRepositoryRef {
_UnifiedPreferenceSettingsRepositoryProviderElement(super.provider); _UnifiedPreferenceSettingsRepositoryProviderElement(super.provider);
@@ -545,20 +543,14 @@ class PreferenceSettingsGroupRepositoryFamily
PreferencePartition partition, PreferencePartition partition,
String groupName, String groupName,
) { ) {
return PreferenceSettingsGroupRepositoryProvider( return PreferenceSettingsGroupRepositoryProvider(partition, groupName);
partition,
groupName,
);
} }
@override @override
PreferenceSettingsGroupRepositoryProvider getProviderOverride( PreferenceSettingsGroupRepositoryProvider getProviderOverride(
covariant PreferenceSettingsGroupRepositoryProvider provider, covariant PreferenceSettingsGroupRepositoryProvider provider,
) { ) {
return call( return call(provider.partition, provider.groupName);
provider.partition,
provider.groupName,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -578,28 +570,32 @@ class PreferenceSettingsGroupRepositoryFamily
/// See also [PreferenceSettingsGroupRepository]. /// See also [PreferenceSettingsGroupRepository].
class PreferenceSettingsGroupRepositoryProvider class PreferenceSettingsGroupRepositoryProvider
extends AutoDisposeStreamNotifierProviderImpl< extends
PreferenceSettingsGroupRepository, PreferenceSettingGroup> { AutoDisposeStreamNotifierProviderImpl<
PreferenceSettingsGroupRepository,
PreferenceSettingGroup
> {
/// See also [PreferenceSettingsGroupRepository]. /// See also [PreferenceSettingsGroupRepository].
PreferenceSettingsGroupRepositoryProvider( PreferenceSettingsGroupRepositoryProvider(
PreferencePartition partition, PreferencePartition partition,
String groupName, String groupName,
) : this._internal( ) : this._internal(
() => PreferenceSettingsGroupRepository() () =>
..partition = partition PreferenceSettingsGroupRepository()
..groupName = groupName, ..partition = partition
from: preferenceSettingsGroupRepositoryProvider, ..groupName = groupName,
name: r'preferenceSettingsGroupRepositoryProvider', from: preferenceSettingsGroupRepositoryProvider,
debugGetCreateSourceHash: name: r'preferenceSettingsGroupRepositoryProvider',
const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$preferenceSettingsGroupRepositoryHash, ? null
dependencies: PreferenceSettingsGroupRepositoryFamily._dependencies, : _$preferenceSettingsGroupRepositoryHash,
allTransitiveDependencies: PreferenceSettingsGroupRepositoryFamily dependencies: PreferenceSettingsGroupRepositoryFamily._dependencies,
._allTransitiveDependencies, allTransitiveDependencies:
partition: partition, PreferenceSettingsGroupRepositoryFamily._allTransitiveDependencies,
groupName: groupName, partition: partition,
); groupName: groupName,
);
PreferenceSettingsGroupRepositoryProvider._internal( PreferenceSettingsGroupRepositoryProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -619,10 +615,7 @@ class PreferenceSettingsGroupRepositoryProvider
Stream<PreferenceSettingGroup> runNotifierBuild( Stream<PreferenceSettingGroup> runNotifierBuild(
covariant PreferenceSettingsGroupRepository notifier, covariant PreferenceSettingsGroupRepository notifier,
) { ) {
return notifier.build( return notifier.build(partition, groupName);
partition,
groupName,
);
} }
@override @override
@@ -630,9 +623,10 @@ class PreferenceSettingsGroupRepositoryProvider
return ProviderOverride( return ProviderOverride(
origin: this, origin: this,
override: PreferenceSettingsGroupRepositoryProvider._internal( override: PreferenceSettingsGroupRepositoryProvider._internal(
() => create() () =>
..partition = partition create()
..groupName = groupName, ..partition = partition
..groupName = groupName,
from: from, from: from,
name: null, name: null,
dependencies: null, dependencies: null,
@@ -645,8 +639,11 @@ class PreferenceSettingsGroupRepositoryProvider
} }
@override @override
AutoDisposeStreamNotifierProviderElement<PreferenceSettingsGroupRepository, AutoDisposeStreamNotifierProviderElement<
PreferenceSettingGroup> createElement() { PreferenceSettingsGroupRepository,
PreferenceSettingGroup
>
createElement() {
return _PreferenceSettingsGroupRepositoryProviderElement(this); return _PreferenceSettingsGroupRepositoryProviderElement(this);
} }
@@ -679,9 +676,12 @@ mixin PreferenceSettingsGroupRepositoryRef
} }
class _PreferenceSettingsGroupRepositoryProviderElement class _PreferenceSettingsGroupRepositoryProviderElement
extends AutoDisposeStreamNotifierProviderElement< extends
PreferenceSettingsGroupRepository, AutoDisposeStreamNotifierProviderElement<
PreferenceSettingGroup> with PreferenceSettingsGroupRepositoryRef { PreferenceSettingsGroupRepository,
PreferenceSettingGroup
>
with PreferenceSettingsGroupRepositoryRef {
_PreferenceSettingsGroupRepositoryProviderElement(super.provider); _PreferenceSettingsGroupRepositoryProviderElement(super.provider);
@override @override
@@ -691,5 +691,6 @@ class _PreferenceSettingsGroupRepositoryProviderElement
String get groupName => String get groupName =>
(origin as PreferenceSettingsGroupRepositoryProvider).groupName; (origin as PreferenceSettingsGroupRepositoryProvider).groupName;
} }
// ignore_for_file: type=lint // 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 // 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
@@ -13,9 +13,10 @@ String _$readerableServiceHash() => r'03182c8afc41f5184322a3206473cbfa96df5819';
final readerableServiceProvider = Provider<GeckoReaderableService>.internal( final readerableServiceProvider = Provider<GeckoReaderableService>.internal(
readerableService, readerableService,
name: r'readerableServiceProvider', name: r'readerableServiceProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$readerableServiceHash, ? null
: _$readerableServiceHash,
dependencies: null, dependencies: null,
allTransitiveDependencies: null, allTransitiveDependencies: null,
); );
@@ -30,14 +31,15 @@ String _$appearanceButtonVisibilityHash() =>
@ProviderFor(appearanceButtonVisibility) @ProviderFor(appearanceButtonVisibility)
final appearanceButtonVisibilityProvider = final appearanceButtonVisibilityProvider =
AutoDisposeStreamProvider<bool>.internal( AutoDisposeStreamProvider<bool>.internal(
appearanceButtonVisibility, appearanceButtonVisibility,
name: r'appearanceButtonVisibilityProvider', name: r'appearanceButtonVisibilityProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$appearanceButtonVisibilityHash, ? null
dependencies: null, : _$appearanceButtonVisibilityHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead') @Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element // ignore: unused_element
@@ -19,9 +19,9 @@ class ReaderableScreenController extends _$ReaderableScreenController {
} }
@override @override
FutureOr<void> build() { Future<void> build() {
_service = ref.watch(readerableServiceProvider); _service = ref.watch(readerableServiceProvider);
return null; return Future.value();
} }
} }
@@ -7,20 +7,21 @@ part of 'readerable.dart';
// ************************************************************************** // **************************************************************************
String _$readerableScreenControllerHash() => String _$readerableScreenControllerHash() =>
r'463c032a6d07936954fead58589101ccb31c2765'; r'62b2167ff8f9fe21c3cf3339e135a50aa684160c';
/// See also [ReaderableScreenController]. /// See also [ReaderableScreenController].
@ProviderFor(ReaderableScreenController) @ProviderFor(ReaderableScreenController)
final readerableScreenControllerProvider = final readerableScreenControllerProvider =
AsyncNotifierProvider<ReaderableScreenController, void>.internal( AsyncNotifierProvider<ReaderableScreenController, void>.internal(
ReaderableScreenController.new, ReaderableScreenController.new,
name: r'readerableScreenControllerProvider', name: r'readerableScreenControllerProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$readerableScreenControllerHash, ? null
dependencies: null, : _$readerableScreenControllerHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
typedef _$ReaderableScreenController = AsyncNotifier<void>; typedef _$ReaderableScreenController = AsyncNotifier<void>;
// ignore_for_file: type=lint // ignore_for_file: type=lint
@@ -42,7 +42,7 @@ AsyncValue<List<GeckoSuggestion>> engineHistorySuggestions(Ref ref) {
.where( .where(
(suggestion) => (suggestion) =>
suggestion.type == GeckoSuggestionType.history && suggestion.type == GeckoSuggestionType.history &&
(suggestion.title?.isNotEmpty ?? false) && (suggestion.title.isNotEmpty) &&
(suggestion.description.mapNotNull( (suggestion.description.mapNotNull(
(url) => Uri.tryParse(url), (url) => Uri.tryParse(url),
) != ) !=
@@ -7,36 +7,40 @@ part of 'engine_suggestions.dart';
// ************************************************************************** // **************************************************************************
String _$engineHistorySuggestionsHash() => String _$engineHistorySuggestionsHash() =>
r'218f1da2140a76c3b02634619955b1382c6ef182'; r'7e6c17e6a2df98098ca1a683a438d1c261ccabdf';
/// See also [engineHistorySuggestions]. /// See also [engineHistorySuggestions].
@ProviderFor(engineHistorySuggestions) @ProviderFor(engineHistorySuggestions)
final engineHistorySuggestionsProvider = final engineHistorySuggestionsProvider =
AutoDisposeProvider<AsyncValue<List<GeckoSuggestion>>>.internal( AutoDisposeProvider<AsyncValue<List<GeckoSuggestion>>>.internal(
engineHistorySuggestions, engineHistorySuggestions,
name: r'engineHistorySuggestionsProvider', name: r'engineHistorySuggestionsProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$engineHistorySuggestionsHash, ? null
dependencies: null, : _$engineHistorySuggestionsHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead') @Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element // ignore: unused_element
typedef EngineHistorySuggestionsRef typedef EngineHistorySuggestionsRef =
= AutoDisposeProviderRef<AsyncValue<List<GeckoSuggestion>>>; AutoDisposeProviderRef<AsyncValue<List<GeckoSuggestion>>>;
String _$engineSuggestionsHash() => r'ba2c2d7f0a5e99fd9e639acd020b8cf3016c6126'; String _$engineSuggestionsHash() => r'ba2c2d7f0a5e99fd9e639acd020b8cf3016c6126';
/// See also [EngineSuggestions]. /// See also [EngineSuggestions].
@ProviderFor(EngineSuggestions) @ProviderFor(EngineSuggestions)
final engineSuggestionsProvider = AutoDisposeStreamNotifierProvider< final engineSuggestionsProvider = AutoDisposeStreamNotifierProvider<
EngineSuggestions, List<GeckoSuggestion>>.internal( EngineSuggestions,
List<GeckoSuggestion>
>.internal(
EngineSuggestions.new, EngineSuggestions.new,
name: r'engineSuggestionsProvider', name: r'engineSuggestionsProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$engineSuggestionsHash, ? null
: _$engineSuggestionsHash,
dependencies: null, dependencies: null,
allTransitiveDependencies: null, allTransitiveDependencies: null,
); );
@@ -13,14 +13,15 @@ String _$defaultSearchSuggestionsHash() =>
@ProviderFor(defaultSearchSuggestions) @ProviderFor(defaultSearchSuggestions)
final defaultSearchSuggestionsProvider = final defaultSearchSuggestionsProvider =
Provider<ISearchSuggestionProvider>.internal( Provider<ISearchSuggestionProvider>.internal(
defaultSearchSuggestions, defaultSearchSuggestions,
name: r'defaultSearchSuggestionsProvider', name: r'defaultSearchSuggestionsProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$defaultSearchSuggestionsHash, ? null
dependencies: null, : _$defaultSearchSuggestionsHash,
allTransitiveDependencies: null, dependencies: null,
); allTransitiveDependencies: null,
);
@Deprecated('Will be removed in 3.0. Use Ref instead') @Deprecated('Will be removed in 3.0. Use Ref instead')
// ignore: unused_element // ignore: unused_element
@@ -52,9 +53,7 @@ abstract class _$SearchSuggestions
extends BuildlessAutoDisposeStreamNotifier<List<String>> { extends BuildlessAutoDisposeStreamNotifier<List<String>> {
late final ISearchSuggestionProvider? suggestionsProvider; late final ISearchSuggestionProvider? suggestionsProvider;
Stream<List<String>> build({ Stream<List<String>> build({ISearchSuggestionProvider? suggestionsProvider});
ISearchSuggestionProvider? suggestionsProvider,
});
} }
/// See also [SearchSuggestions]. /// See also [SearchSuggestions].
@@ -70,18 +69,14 @@ class SearchSuggestionsFamily extends Family<AsyncValue<List<String>>> {
SearchSuggestionsProvider call({ SearchSuggestionsProvider call({
ISearchSuggestionProvider? suggestionsProvider, ISearchSuggestionProvider? suggestionsProvider,
}) { }) {
return SearchSuggestionsProvider( return SearchSuggestionsProvider(suggestionsProvider: suggestionsProvider);
suggestionsProvider: suggestionsProvider,
);
} }
@override @override
SearchSuggestionsProvider getProviderOverride( SearchSuggestionsProvider getProviderOverride(
covariant SearchSuggestionsProvider provider, covariant SearchSuggestionsProvider provider,
) { ) {
return call( return call(suggestionsProvider: provider.suggestionsProvider);
suggestionsProvider: provider.suggestionsProvider,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -100,24 +95,24 @@ class SearchSuggestionsFamily extends Family<AsyncValue<List<String>>> {
} }
/// See also [SearchSuggestions]. /// See also [SearchSuggestions].
class SearchSuggestionsProvider extends AutoDisposeStreamNotifierProviderImpl< class SearchSuggestionsProvider
SearchSuggestions, List<String>> { extends
AutoDisposeStreamNotifierProviderImpl<SearchSuggestions, List<String>> {
/// See also [SearchSuggestions]. /// See also [SearchSuggestions].
SearchSuggestionsProvider({ SearchSuggestionsProvider({ISearchSuggestionProvider? suggestionsProvider})
ISearchSuggestionProvider? suggestionsProvider, : this._internal(
}) : this._internal( () => SearchSuggestions()..suggestionsProvider = suggestionsProvider,
() => SearchSuggestions()..suggestionsProvider = suggestionsProvider, from: searchSuggestionsProvider,
from: searchSuggestionsProvider, name: r'searchSuggestionsProvider',
name: r'searchSuggestionsProvider', debugGetCreateSourceHash:
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
const bool.fromEnvironment('dart.vm.product') ? null
? null : _$searchSuggestionsHash,
: _$searchSuggestionsHash, dependencies: SearchSuggestionsFamily._dependencies,
dependencies: SearchSuggestionsFamily._dependencies, allTransitiveDependencies:
allTransitiveDependencies: SearchSuggestionsFamily._allTransitiveDependencies,
SearchSuggestionsFamily._allTransitiveDependencies, suggestionsProvider: suggestionsProvider,
suggestionsProvider: suggestionsProvider, );
);
SearchSuggestionsProvider._internal( SearchSuggestionsProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -132,12 +127,8 @@ class SearchSuggestionsProvider extends AutoDisposeStreamNotifierProviderImpl<
final ISearchSuggestionProvider? suggestionsProvider; final ISearchSuggestionProvider? suggestionsProvider;
@override @override
Stream<List<String>> runNotifierBuild( Stream<List<String>> runNotifierBuild(covariant SearchSuggestions notifier) {
covariant SearchSuggestions notifier, return notifier.build(suggestionsProvider: suggestionsProvider);
) {
return notifier.build(
suggestionsProvider: suggestionsProvider,
);
} }
@override @override
@@ -158,7 +149,7 @@ class SearchSuggestionsProvider extends AutoDisposeStreamNotifierProviderImpl<
@override @override
AutoDisposeStreamNotifierProviderElement<SearchSuggestions, List<String>> AutoDisposeStreamNotifierProviderElement<SearchSuggestions, List<String>>
createElement() { createElement() {
return _SearchSuggestionsProviderElement(this); return _SearchSuggestionsProviderElement(this);
} }
@@ -186,13 +177,18 @@ mixin SearchSuggestionsRef
} }
class _SearchSuggestionsProviderElement class _SearchSuggestionsProviderElement
extends AutoDisposeStreamNotifierProviderElement<SearchSuggestions, extends
List<String>> with SearchSuggestionsRef { AutoDisposeStreamNotifierProviderElement<
SearchSuggestions,
List<String>
>
with SearchSuggestionsRef {
_SearchSuggestionsProviderElement(super.provider); _SearchSuggestionsProviderElement(super.provider);
@override @override
ISearchSuggestionProvider? get suggestionsProvider => ISearchSuggestionProvider? get suggestionsProvider =>
(origin as SearchSuggestionsProvider).suggestionsProvider; (origin as SearchSuggestionsProvider).suggestionsProvider;
} }
// ignore_for_file: type=lint // 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 // 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
@@ -53,18 +53,14 @@ class SearchSuggestionsRepositoryFamily
SearchSuggestionsRepositoryProvider call( SearchSuggestionsRepositoryProvider call(
ISearchSuggestionProvider suggestionsProvider, ISearchSuggestionProvider suggestionsProvider,
) { ) {
return SearchSuggestionsRepositoryProvider( return SearchSuggestionsRepositoryProvider(suggestionsProvider);
suggestionsProvider,
);
} }
@override @override
SearchSuggestionsRepositoryProvider getProviderOverride( SearchSuggestionsRepositoryProvider getProviderOverride(
covariant SearchSuggestionsRepositoryProvider provider, covariant SearchSuggestionsRepositoryProvider provider,
) { ) {
return call( return call(provider.suggestionsProvider);
provider.suggestionsProvider,
);
} }
static const Iterable<ProviderOrFamily>? _dependencies = null; static const Iterable<ProviderOrFamily>? _dependencies = null;
@@ -83,25 +79,30 @@ class SearchSuggestionsRepositoryFamily
} }
/// See also [SearchSuggestionsRepository]. /// See also [SearchSuggestionsRepository].
class SearchSuggestionsRepositoryProvider extends NotifierProviderImpl< class SearchSuggestionsRepositoryProvider
SearchSuggestionsRepository, Raw<Stream<List<String>>>> { extends
NotifierProviderImpl<
SearchSuggestionsRepository,
Raw<Stream<List<String>>>
> {
/// See also [SearchSuggestionsRepository]. /// See also [SearchSuggestionsRepository].
SearchSuggestionsRepositoryProvider( SearchSuggestionsRepositoryProvider(
ISearchSuggestionProvider suggestionsProvider, ISearchSuggestionProvider suggestionsProvider,
) : this._internal( ) : this._internal(
() => SearchSuggestionsRepository() () =>
..suggestionsProvider = suggestionsProvider, SearchSuggestionsRepository()
from: searchSuggestionsRepositoryProvider, ..suggestionsProvider = suggestionsProvider,
name: r'searchSuggestionsRepositoryProvider', from: searchSuggestionsRepositoryProvider,
debugGetCreateSourceHash: name: r'searchSuggestionsRepositoryProvider',
const bool.fromEnvironment('dart.vm.product') debugGetCreateSourceHash:
? null const bool.fromEnvironment('dart.vm.product')
: _$searchSuggestionsRepositoryHash, ? null
dependencies: SearchSuggestionsRepositoryFamily._dependencies, : _$searchSuggestionsRepositoryHash,
allTransitiveDependencies: dependencies: SearchSuggestionsRepositoryFamily._dependencies,
SearchSuggestionsRepositoryFamily._allTransitiveDependencies, allTransitiveDependencies:
suggestionsProvider: suggestionsProvider, SearchSuggestionsRepositoryFamily._allTransitiveDependencies,
); suggestionsProvider: suggestionsProvider,
);
SearchSuggestionsRepositoryProvider._internal( SearchSuggestionsRepositoryProvider._internal(
super._createNotifier, { super._createNotifier, {
@@ -119,9 +120,7 @@ class SearchSuggestionsRepositoryProvider extends NotifierProviderImpl<
Raw<Stream<List<String>>> runNotifierBuild( Raw<Stream<List<String>>> runNotifierBuild(
covariant SearchSuggestionsRepository notifier, covariant SearchSuggestionsRepository notifier,
) { ) {
return notifier.build( return notifier.build(suggestionsProvider);
suggestionsProvider,
);
} }
@override @override
@@ -141,8 +140,11 @@ class SearchSuggestionsRepositoryProvider extends NotifierProviderImpl<
} }
@override @override
NotifierProviderElement<SearchSuggestionsRepository, NotifierProviderElement<
Raw<Stream<List<String>>>> createElement() { SearchSuggestionsRepository,
Raw<Stream<List<String>>>
>
createElement() {
return _SearchSuggestionsRepositoryProviderElement(this); return _SearchSuggestionsRepositoryProviderElement(this);
} }
@@ -170,13 +172,18 @@ mixin SearchSuggestionsRepositoryRef
} }
class _SearchSuggestionsRepositoryProviderElement class _SearchSuggestionsRepositoryProviderElement
extends NotifierProviderElement<SearchSuggestionsRepository, extends
Raw<Stream<List<String>>>> with SearchSuggestionsRepositoryRef { NotifierProviderElement<
SearchSuggestionsRepository,
Raw<Stream<List<String>>>
>
with SearchSuggestionsRepositoryRef {
_SearchSuggestionsRepositoryProviderElement(super.provider); _SearchSuggestionsRepositoryProviderElement(super.provider);
@override @override
ISearchSuggestionProvider get suggestionsProvider => ISearchSuggestionProvider get suggestionsProvider =>
(origin as SearchSuggestionsRepositoryProvider).suggestionsProvider; (origin as SearchSuggestionsRepositoryProvider).suggestionsProvider;
} }
// ignore_for_file: type=lint // 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 // 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
@@ -2,11 +2,12 @@ import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:lensai/core/routing/routes.dart'; import 'package:lensai/core/routing/routes.dart';
import 'package:lensai/extensions/nullable.dart';
import 'package:lensai/features/bangs/data/models/bang_data.dart'; import 'package:lensai/features/bangs/data/models/bang_data.dart';
import 'package:lensai/features/bangs/domain/repositories/search.dart'; import 'package:lensai/features/bangs/domain/providers/search.dart';
import 'package:lensai/presentation/hooks/listenable_callback.dart'; import 'package:lensai/presentation/hooks/listenable_callback.dart';
import 'package:lensai/presentation/widgets/bang_icon.dart';
import 'package:lensai/presentation/widgets/selectable_chips.dart'; import 'package:lensai/presentation/widgets/selectable_chips.dart';
import 'package:lensai/presentation/widgets/url_icon.dart';
class BangChips extends HookConsumerWidget { class BangChips extends HookConsumerWidget {
final bool displayMenu; final bool displayMenu;
@@ -99,7 +100,7 @@ class BangChips extends HookConsumerWidget {
await context.push( await context.push(
BangSearchRoute( BangSearchRoute(
searchText: searchText:
(searchText?.isEmpty ?? true) (searchText.isEmpty)
? BangSearchRoute.emptySearchText ? BangSearchRoute.emptySearchText
: searchText!, : searchText!,
).location, ).location,

Some files were not shown because too many files have changed in this diff Show More