From 3c4d479bd92d50972ee231ce7f9d021cc28d83dc Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Fri, 28 Feb 2025 14:30:49 +0100 Subject: [PATCH] majro update --- app/build.yaml | 3 + app/lib/core/providers/defaults.g.dart | 14 +- app/lib/core/providers/format.dart | 19 + app/lib/core/providers/format.g.dart | 24 + app/lib/core/providers/global_drop.g.dart | 17 +- app/lib/core/providers/models.g.dart | 14 +- app/lib/core/routing/routes.dart | 6 + app/lib/core/routing/routes.feeds.dart | 52 + app/lib/core/routing/routes.g.dart | 418 ++- .../data/database/converters/string_list.dart | 17 + app/lib/data/models/web_page_info.dart | 3 +- app/lib/data/models/web_page_info.g.dart | 37 +- .../domain/services/app_initialization.dart | 3 + .../domain/services/app_initialization.g.dart | 25 +- app/lib/domain/services/generic_website.dart | 12 +- .../domain/services/generic_website.g.dart | 19 +- app/lib/extensions/duartion.dart | 9 + app/lib/extensions/image.dart | 8 +- app/lib/extensions/nullable.dart | 25 +- app/lib/extensions/uri.dart | 3 + .../domain/services/home_widget.g.dart | 28 +- .../bangs/data/database/daos/bang.dart | 6 +- .../bangs/data/database/daos/sync.dart | 2 +- .../bangs/data/database/database.g.dart | 2417 +++++++------ .../features/bangs/data/models/bang.g.dart | 106 +- .../bangs/data/models/bang_data.g.dart | 91 +- .../bangs/data/services/data_source.dart | 2 +- .../bangs/data/services/data_source.g.dart | 19 +- .../bangs/domain/providers/bangs.g.dart | 205 +- .../bangs/domain/providers/search.dart | 54 +- .../bangs/domain/providers/search.g.dart | 35 +- .../bangs/domain/repositories/data.g.dart | 17 +- .../bangs/domain/repositories/search.dart | 62 - .../bangs/domain/repositories/search.g.dart | 43 - .../bangs/domain/repositories/sync.g.dart | 17 +- .../bangs/presentation/screens/search.dart | 4 +- .../presentation/widgets/bang_details.dart | 2 +- .../presentation/widgets/site_search.dart | 4 +- .../data/database/daos/messages.dart | 2 +- .../chat_store/data/database/database.g.dart | 677 ++-- .../data/models/chat_metadata.g.dart | 6 +- .../chat_store/domain/providers.g.dart | 89 +- .../domain/repositories/chat_message.dart | 7 +- .../domain/repositories/chat_message.g.dart | 58 +- .../domain/repositories/chat_metadata.g.dart | 56 +- .../domain/controllers/bottom_sheet.g.dart | 34 +- .../domain/controllers/overlay.g.dart | 17 +- .../domain/entities/states/tab.g.dart | 118 +- .../entities/states/web_extension.g.dart | 64 +- .../features/geckoview/domain/providers.dart | 32 +- .../geckoview/domain/providers.g.dart | 60 +- .../domain/providers/selected_tab.dart | 2 +- .../domain/providers/selected_tab.g.dart | 2 +- .../geckoview/domain/providers/tab_list.dart | 2 +- .../domain/providers/tab_list.g.dart | 16 +- .../domain/providers/tab_session.g.dart | 70 +- .../geckoview/domain/providers/tab_state.dart | 10 +- .../domain/providers/tab_state.g.dart | 75 +- .../providers/web_extensions_state.dart | 4 +- .../providers/web_extensions_state.g.dart | 72 +- .../geckoview/domain/repositories/tab.dart | 2 +- .../geckoview/domain/repositories/tab.g.dart | 9 +- .../browser/domain/entities/sheet.dart | 2 +- .../features/browser/domain/providers.dart | 5 +- .../features/browser/domain/providers.g.dart | 320 +- .../browser/domain/providers/intent.g.dart | 16 +- .../domain/services/browser_data.g.dart | 17 +- .../engine_settings_replication.g.dart | 17 +- .../proxy_settings_replucation.g.dart | 17 +- .../presentation/dialogs/web_page_dialog.dart | 31 +- .../browser/presentation/screens/browser.dart | 9 +- .../browser_modules/bottom_app_bar.dart | 23 +- .../widgets/browser_modules/browser_view.dart | 2 +- .../widgets/extension_badge_icon.dart | 3 +- .../widgets/sheets/view_tabs.dart | 2 +- .../contextmenu/extensions/hit_result.dart | 9 +- .../presentation/candidates/copy_email.dart | 5 + .../presentation/candidates/copy_image.dart | 5 + .../candidates/copy_image_location.dart | 11 +- .../presentation/candidates/copy_link.dart | 11 +- .../candidates/launch_external.dart | 11 +- .../candidates/open_image_new_tab.dart | 25 +- .../presentation/candidates/open_new_tab.dart | 27 +- .../presentation/candidates/save_file.dart | 5 + .../presentation/candidates/save_image.dart | 5 + .../presentation/candidates/share_email.dart | 5 + .../presentation/candidates/share_image.dart | 5 + .../presentation/candidates/share_link.dart | 5 + .../domain/repositories/find_in_page.g.dart | 56 +- .../find_in_page_visibility.g.dart | 17 +- .../data/models/preference_setting.g.dart | 74 +- .../repositories/preference_settings.g.dart | 287 +- .../domain/providers/readerable.g.dart | 24 +- .../presentation/controllers/readerable.dart | 4 +- .../controllers/readerable.g.dart | 19 +- .../domain/providers/engine_suggestions.dart | 2 +- .../providers/engine_suggestions.g.dart | 34 +- .../providers/search_suggestions.g.dart | 82 +- .../repositories/search_suggestions.g.dart | 63 +- .../presentation/widgets/bang_chips.dart | 7 +- .../presentation/widgets/search_field.dart | 2 +- .../search_modules/history_suggestions.dart | 2 +- .../search_modules/search_suggestions.dart | 5 +- .../widgets/search_modules/tab_search.dart | 2 +- .../tabs/data/database/daos/container.dart | 2 +- .../features/tabs/data/database/daos/tab.dart | 20 +- .../features/tabs/data/database/database.dart | 1 + .../tabs/data/database/database.drift | 3 +- .../tabs/data/database/database.g.dart | 3196 ++++++++++------- .../tabs/data/models/container_data.g.dart | 144 +- .../tabs/data/models/tab_query_result.dart | 2 +- .../features/tabs/domain/providers.dart | 3 +- .../features/tabs/domain/providers.g.dart | 122 +- .../providers/selected_container.g.dart | 34 +- .../tabs/domain/repositories/container.dart | 2 +- .../tabs/domain/repositories/container.g.dart | 19 +- .../tabs/domain/repositories/tab.g.dart | 17 +- .../domain/repositories/tab_search.g.dart | 73 +- .../features/chat/domain/chat_backend.g.dart | 53 +- .../chat/services/qa_memory_chain.g.dart | 49 +- .../domain/repositories/document.g.dart | 17 +- .../presentation/widgets/container_chips.dart | 1 - .../geckoview/utils/image_helper.dart | 4 +- .../search/domain/autosuggest/kagi.dart | 2 +- .../search/domain/autosuggest/kagi.g.dart | 19 +- .../controllers/save_settings.dart | 8 +- .../controllers/save_settings.g.dart | 38 +- .../domain/services/sharing_intent.g.dart | 21 +- .../tor/domain/services/tor_proxy.g.dart | 17 +- .../controllers/start_tor_proxy.g.dart | 17 +- .../user/data/database/daos/cache.dart | 6 +- .../user/data/database/daos/setting.dart | 4 +- .../user/data/database/database.g.dart | 567 +-- .../user/data/models/engine_settings.g.dart | 154 +- .../user/data/models/general_settings.g.dart | 33 +- app/lib/features/user/domain/providers.g.dart | 31 +- .../user/domain/repositories/auth.g.dart | 17 +- .../user/domain/repositories/cache.g.dart | 17 +- .../repositories/engine_settings.g.dart | 17 +- .../domain/repositories/general_settings.dart | 2 +- .../repositories/general_settings.g.dart | 19 +- .../services/local_authentication.g.dart | 17 +- .../presentation/controllers/controllers.dart | 4 +- .../controllers/controllers.g.dart | 19 +- .../user/presentation/screens/auth.dart | 7 +- .../controllers/website_title.dart | 13 +- .../controllers/website_title.g.dart | 58 +- .../draggable_scrollable_controller.dart | 35 - .../hooks/overlay_portal_controller.dart | 27 - .../presentation/widgets/autocomplete.dart | 1 + .../presentation/widgets/rounded_text.dart | 24 + .../widgets/{bang_icon.dart => url_icon.dart} | 5 +- .../widgets/website_feed_tile.dart | 64 + app/lib/utils/feed_finder.dart | 96 - app/lib/utils/markdown/image_extractor.dart | 32 + app/lib/utils/ui_helper.dart | 68 +- .../analysis_options.yaml | 1 - .../readability_extract/manifest.json | 6 +- .../assets/extensions/turndown/background.js | 32 + .../assets/extensions/turndown/manifest.json | 21 + .../extensions/turndown/readability.min.js | 1 + .../EngineProvider.kt | 2 + .../FlutterMozillaComponentsPlugin.kt | 3 + .../api/GeckoTurndownApiImpl.kt | 53 + .../feature/TurndownFeature.kt | 104 + .../pigeons/Gecko.g.kt | 36 + .../readability/dist/readability.min.js | 2 +- .../javascript/readability/dist/report.html | 4 +- .../javascript/readability/dist/stats.json | 44 +- .../javascript/readability/src/index.js | 164 +- .../lib/flutter_mozilla_components.dart | 1 + .../src/domain/entities/turndown_result.dart | 7 + .../lib/src/domain/services/gecko_icon.dart | 2 +- .../src/domain/services/gecko_turndown.dart | 25 + .../lib/src/geckoview_widget.dart | 6 +- .../lib/src/pigeons/gecko.g.dart | 42 + .../pigeons/gecko.dart | 6 + .../flutter_mozilla_components/pubspec.yaml | 2 +- packages/sqlite3_vec/analysis_options.yaml | 1 - packages/sqlite3_vec/example/pubspec.yaml | 2 +- packages/sqlite3_vec/pubspec.yaml | 2 +- 181 files changed, 7090 insertions(+), 5299 deletions(-) create mode 100644 app/lib/core/providers/format.dart create mode 100644 app/lib/core/providers/format.g.dart create mode 100644 app/lib/core/routing/routes.feeds.dart create mode 100644 app/lib/data/database/converters/string_list.dart create mode 100644 app/lib/extensions/duartion.dart create mode 100644 app/lib/extensions/uri.dart delete mode 100644 app/lib/features/bangs/domain/repositories/search.dart delete mode 100644 app/lib/features/bangs/domain/repositories/search.g.dart delete mode 100644 app/lib/presentation/hooks/draggable_scrollable_controller.dart delete mode 100644 app/lib/presentation/hooks/overlay_portal_controller.dart create mode 100644 app/lib/presentation/widgets/rounded_text.dart rename app/lib/presentation/widgets/{bang_icon.dart => url_icon.dart} (90%) create mode 100644 app/lib/presentation/widgets/website_feed_tile.dart delete mode 100644 app/lib/utils/feed_finder.dart create mode 100644 app/lib/utils/markdown/image_extractor.dart create mode 100644 packages/flutter_mozilla_components/android/src/main/assets/extensions/turndown/background.js create mode 100644 packages/flutter_mozilla_components/android/src/main/assets/extensions/turndown/manifest.json create mode 120000 packages/flutter_mozilla_components/android/src/main/assets/extensions/turndown/readability.min.js create mode 100644 packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/api/GeckoTurndownApiImpl.kt create mode 100644 packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/feature/TurndownFeature.kt create mode 100644 packages/flutter_mozilla_components/lib/src/domain/entities/turndown_result.dart create mode 100644 packages/flutter_mozilla_components/lib/src/domain/services/gecko_turndown.dart diff --git a/app/build.yaml b/app/build.yaml index 45fdb2a7..5965b238 100644 --- a/app/build.yaml +++ b/app/build.yaml @@ -18,3 +18,6 @@ targets: modules: - json1 - fts5 + json_serializable: + options: + explicit_to_json: true \ No newline at end of file diff --git a/app/lib/core/providers/defaults.g.dart b/app/lib/core/providers/defaults.g.dart index 2c2d36dc..d2fe6bfa 100644 --- a/app/lib/core/providers/defaults.g.dart +++ b/app/lib/core/providers/defaults.g.dart @@ -14,9 +14,10 @@ String _$lightSeedColorFallbackHash() => final lightSeedColorFallbackProvider = Provider.internal( lightSeedColorFallback, name: r'lightSeedColorFallbackProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$lightSeedColorFallbackHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$lightSeedColorFallbackHash, dependencies: null, allTransitiveDependencies: null, ); @@ -32,9 +33,10 @@ String _$darkSeedColorFallbackHash() => final darkSeedColorFallbackProvider = Provider.internal( darkSeedColorFallback, name: r'darkSeedColorFallbackProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$darkSeedColorFallbackHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$darkSeedColorFallbackHash, dependencies: null, allTransitiveDependencies: null, ); diff --git a/app/lib/core/providers/format.dart b/app/lib/core/providers/format.dart new file mode 100644 index 00000000..abc15c2e --- /dev/null +++ b/app/lib/core/providers/format.dart @@ -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 build() async { + await initializeDateFormatting(); + } +} diff --git a/app/lib/core/providers/format.g.dart b/app/lib/core/providers/format.g.dart new file mode 100644 index 00000000..4a2c1ce9 --- /dev/null +++ b/app/lib/core/providers/format.g.dart @@ -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.internal( + Format.new, + name: r'formatProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') ? null : _$formatHash, + dependencies: null, + allTransitiveDependencies: null, +); + +typedef _$Format = AsyncNotifier; +// 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 diff --git a/app/lib/core/providers/global_drop.g.dart b/app/lib/core/providers/global_drop.g.dart index aced262c..1f50c1a5 100644 --- a/app/lib/core/providers/global_drop.g.dart +++ b/app/lib/core/providers/global_drop.g.dart @@ -12,14 +12,15 @@ String _$willAcceptDropHash() => r'97b47784ef9101757602b4408d1f545ef2308830'; @ProviderFor(WillAcceptDrop) final willAcceptDropProvider = AutoDisposeNotifierProvider.internal( - WillAcceptDrop.new, - name: r'willAcceptDropProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$willAcceptDropHash, - dependencies: null, - allTransitiveDependencies: null, -); + WillAcceptDrop.new, + name: r'willAcceptDropProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$willAcceptDropHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$WillAcceptDrop = AutoDisposeNotifier; // ignore_for_file: type=lint diff --git a/app/lib/core/providers/models.g.dart b/app/lib/core/providers/models.g.dart index 1a34108d..06f64eab 100644 --- a/app/lib/core/providers/models.g.dart +++ b/app/lib/core/providers/models.g.dart @@ -29,9 +29,10 @@ String _$embeddingModelHash() => r'40111a5f08b43afe6edd399ff0e6c022b3387265'; final embeddingModelProvider = Provider.internal( embeddingModel, name: r'embeddingModelProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$embeddingModelHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$embeddingModelHash, dependencies: null, allTransitiveDependencies: null, ); @@ -47,9 +48,10 @@ String _$embeddingDimensionsHash() => final embeddingDimensionsProvider = Provider.internal( embeddingDimensions, name: r'embeddingDimensionsProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$embeddingDimensionsHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$embeddingDimensionsHash, dependencies: null, allTransitiveDependencies: null, ); diff --git a/app/lib/core/routing/routes.dart b/app/lib/core/routing/routes.dart index 68c8e823..1434e12f 100644 --- a/app/lib/core/routing/routes.dart +++ b/app/lib/core/routing/routes.dart @@ -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/tor/presentation/screens/tor_proxy.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.settings.dart'; part 'routes.browser.dart'; part 'routes.bangs.dart'; +part 'routes.feeds.dart'; @TypedGoRoute(name: 'AboutRoute', path: '/about') class AboutRoute extends GoRouteData { diff --git a/app/lib/core/routing/routes.feeds.dart b/app/lib/core/routing/routes.feeds.dart new file mode 100644 index 00000000..ae10051a --- /dev/null +++ b/app/lib/core/routing/routes.feeds.dart @@ -0,0 +1,52 @@ +part of 'routes.dart'; + +@TypedGoRoute( + name: 'FeedListRoute', + path: '/feeds', + routes: [ + TypedGoRoute( + name: 'FeedArticleListRoute', + path: 'articles/:feedId', + ), + TypedGoRoute( + name: 'FeedArticleRoute', + path: 'article/:articleId', + ), + TypedGoRoute(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); + } +} diff --git a/app/lib/core/routing/routes.g.dart b/app/lib/core/routing/routes.g.dart index 147a3aad..bf86de1a 100644 --- a/app/lib/core/routing/routes.g.dart +++ b/app/lib/core/routing/routes.g.dart @@ -7,25 +7,25 @@ part of 'routes.dart'; // ************************************************************************** List get $appRoutes => [ - $aboutRoute, - $userAuthRoute, - $settingsRoute, - $browserRoute, - $bangCategoriesRoute, - ]; + $aboutRoute, + $userAuthRoute, + $settingsRoute, + $browserRoute, + $bangCategoriesRoute, + $feedListRoute, +]; RouteBase get $aboutRoute => GoRouteData.$route( - path: '/about', - name: 'AboutRoute', - factory: $AboutRouteExtension._fromState, - ); + path: '/about', + name: 'AboutRoute', + + factory: $AboutRouteExtension._fromState, +); extension $AboutRouteExtension on AboutRoute { static AboutRoute _fromState(GoRouterState state) => AboutRoute(); - String get location => GoRouteData.$location( - '/about', - ); + String get location => GoRouteData.$location('/about'); void go(BuildContext context) => context.go(location); @@ -38,17 +38,16 @@ extension $AboutRouteExtension on AboutRoute { } RouteBase get $userAuthRoute => GoRouteData.$route( - path: '/userAuth', - name: 'UserAuthRoute', - factory: $UserAuthRouteExtension._fromState, - ); + path: '/userAuth', + name: 'UserAuthRoute', + + factory: $UserAuthRouteExtension._fromState, +); extension $UserAuthRouteExtension on UserAuthRoute { static UserAuthRoute _fromState(GoRouterState state) => UserAuthRoute(); - String get location => GoRouteData.$location( - '/userAuth', - ); + String get location => GoRouteData.$location('/userAuth'); void go(BuildContext context) => context.go(location); @@ -61,48 +60,52 @@ extension $UserAuthRouteExtension on UserAuthRoute { } RouteBase get $settingsRoute => GoRouteData.$route( - path: '/settings', - name: 'SettingsRoute', - factory: $SettingsRouteExtension._fromState, + path: '/settings', + name: 'SettingsRoute', + + 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: [ 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, + path: 'hardening', + name: 'WebEngineHardeningRoute', + + factory: $WebEngineHardeningRouteExtension._fromState, routes: [ GoRouteData.$route( - path: 'hardening', - name: 'WebEngineHardeningRoute', - factory: $WebEngineHardeningRouteExtension._fromState, - routes: [ - GoRouteData.$route( - path: 'group/:group', - name: 'WebEngineHardeningGroupRoute', - factory: $WebEngineHardeningGroupRouteExtension._fromState, - ), - ], + path: 'group/:group', + name: 'WebEngineHardeningGroupRoute', + + factory: $WebEngineHardeningGroupRouteExtension._fromState, ), ], ), ], - ); + ), + ], +); extension $SettingsRouteExtension on SettingsRoute { static SettingsRoute _fromState(GoRouterState state) => SettingsRoute(); - String get location => GoRouteData.$location( - '/settings', - ); + String get location => GoRouteData.$location('/settings'); void go(BuildContext context) => context.go(location); @@ -118,9 +121,7 @@ extension $GeneralSettingsRouteExtension on GeneralSettingsRoute { static GeneralSettingsRoute _fromState(GoRouterState state) => GeneralSettingsRoute(); - String get location => GoRouteData.$location( - '/settings/general', - ); + String get location => GoRouteData.$location('/settings/general'); void go(BuildContext context) => context.go(location); @@ -136,9 +137,7 @@ extension $BangSettingsRouteExtension on BangSettingsRoute { static BangSettingsRoute _fromState(GoRouterState state) => BangSettingsRoute(); - String get location => GoRouteData.$location( - '/settings/bang', - ); + String get location => GoRouteData.$location('/settings/bang'); void go(BuildContext context) => context.go(location); @@ -154,9 +153,7 @@ extension $WebEngineSettingsRouteExtension on WebEngineSettingsRoute { static WebEngineSettingsRoute _fromState(GoRouterState state) => WebEngineSettingsRoute(); - String get location => GoRouteData.$location( - '/settings/web_engine', - ); + String get location => GoRouteData.$location('/settings/web_engine'); void go(BuildContext context) => context.go(location); @@ -172,9 +169,8 @@ extension $WebEngineHardeningRouteExtension on WebEngineHardeningRoute { static WebEngineHardeningRoute _fromState(GoRouterState state) => WebEngineHardeningRoute(); - String get location => GoRouteData.$location( - '/settings/web_engine/hardening', - ); + String get location => + GoRouteData.$location('/settings/web_engine/hardening'); void go(BuildContext context) => context.go(location); @@ -189,13 +185,11 @@ extension $WebEngineHardeningRouteExtension on WebEngineHardeningRoute { extension $WebEngineHardeningGroupRouteExtension on WebEngineHardeningGroupRoute { static WebEngineHardeningGroupRoute _fromState(GoRouterState state) => - WebEngineHardeningGroupRoute( - group: state.pathParameters['group']!, - ); + WebEngineHardeningGroupRoute(group: state.pathParameters['group']!); 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); @@ -208,56 +202,62 @@ extension $WebEngineHardeningGroupRouteExtension } RouteBase get $browserRoute => GoRouteData.$route( - path: '/', - name: 'BrowserRoute', - factory: $BrowserRouteExtension._fromState, + path: '/', + name: 'BrowserRoute', + + 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: [ GoRouteData.$route( - path: 'page/:url', - name: 'WebPageRoute', - factory: $WebPageRouteExtension._fromState, + path: 'create', + name: 'ContainerCreateRoute', + + factory: $ContainerCreateRouteExtension._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: [ - GoRouteData.$route( - path: 'create', - name: 'ContainerCreateRoute', - factory: $ContainerCreateRouteExtension._fromState, - ), - GoRouteData.$route( - path: 'edit', - name: 'ContainerEditRoute', - factory: $ContainerEditRouteExtension._fromState, - ), - ], + path: 'edit', + name: 'ContainerEditRoute', + + factory: $ContainerEditRouteExtension._fromState, ), ], - ); + ), + ], +); extension $BrowserRouteExtension on BrowserRoute { static BrowserRoute _fromState(GoRouterState state) => BrowserRoute(); - String get location => GoRouteData.$location( - '/', - ); + String get location => GoRouteData.$location('/'); void go(BuildContext context) => context.go(location); @@ -270,13 +270,11 @@ extension $BrowserRouteExtension on BrowserRoute { } extension $WebPageRouteExtension on WebPageRoute { - static WebPageRoute _fromState(GoRouterState state) => WebPageRoute( - url: state.pathParameters['url']!, - ); + static WebPageRoute _fromState(GoRouterState state) => + WebPageRoute(url: state.pathParameters['url']!); - String get location => GoRouteData.$location( - '/page/${Uri.encodeComponent(url)}', - ); + String get location => + GoRouteData.$location('/page/${Uri.encodeComponent(url)}'); void go(BuildContext context) => context.go(location); @@ -290,13 +288,12 @@ extension $WebPageRouteExtension on WebPageRoute { extension $SearchRouteExtension on SearchRoute { static SearchRoute _fromState(GoRouterState state) => SearchRoute( - searchText: - state.pathParameters['searchText']! ?? SearchRoute.emptySearchText, - ); + searchText: + state.pathParameters['searchText'] ?? SearchRoute.emptySearchText, + ); - String get location => GoRouteData.$location( - '/search/${Uri.encodeComponent(searchText)}', - ); + String get location => + GoRouteData.$location('/search/${Uri.encodeComponent(searchText)}'); void go(BuildContext context) => context.go(location); @@ -311,9 +308,7 @@ extension $SearchRouteExtension on SearchRoute { extension $TorProxyRouteExtension on TorProxyRoute { static TorProxyRoute _fromState(GoRouterState state) => TorProxyRoute(); - String get location => GoRouteData.$location( - '/tor_proxy', - ); + String get location => GoRouteData.$location('/tor_proxy'); void go(BuildContext context) => context.go(location); @@ -329,9 +324,7 @@ extension $ContextMenuRouteExtension on ContextMenuRoute { static ContextMenuRoute _fromState(GoRouterState state) => const ContextMenuRoute(); - String get location => GoRouteData.$location( - '/context_menu', - ); + String get location => GoRouteData.$location('/context_menu'); void go(BuildContext context) => context.go(location); @@ -347,9 +340,7 @@ extension $ContainerListRouteExtension on ContainerListRoute { static ContainerListRoute _fromState(GoRouterState state) => ContainerListRoute(); - String get location => GoRouteData.$location( - '/containers', - ); + String get location => GoRouteData.$location('/containers'); void go(BuildContext context) => context.go(location); @@ -365,9 +356,7 @@ extension $ContainerCreateRouteExtension on ContainerCreateRoute { static ContainerCreateRoute _fromState(GoRouterState state) => ContainerCreateRoute(); - String get location => GoRouteData.$location( - '/containers/create', - ); + String get location => GoRouteData.$location('/containers/create'); void go(BuildContext context) => context.go(location); @@ -383,9 +372,7 @@ extension $ContainerEditRouteExtension on ContainerEditRoute { static ContainerEditRoute _fromState(GoRouterState state) => ContainerEditRoute(); - String get location => GoRouteData.$location( - '/containers/edit', - ); + String get location => GoRouteData.$location('/containers/edit'); void go(BuildContext context) => context.go(location); @@ -398,37 +385,39 @@ extension $ContainerEditRouteExtension on ContainerEditRoute { } RouteBase get $bangCategoriesRoute => GoRouteData.$route( - path: '/bangs', - name: 'BangRoute', - factory: $BangCategoriesRouteExtension._fromState, + path: '/bangs', + name: 'BangRoute', + + 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: [ GoRouteData.$route( - path: 'search/:searchText', - name: 'BangSearchRoute', - factory: $BangSearchRouteExtension._fromState, - ), - GoRouteData.$route( - path: 'category/:category', - name: 'BangCategoryRoute', - factory: $BangCategoryRouteExtension._fromState, - routes: [ - GoRouteData.$route( - path: ':subCategory', - name: 'BangSubCategoryRoute', - factory: $BangSubCategoryRouteExtension._fromState, - ), - ], + path: ':subCategory', + name: 'BangSubCategoryRoute', + + factory: $BangSubCategoryRouteExtension._fromState, ), ], - ); + ), + ], +); extension $BangCategoriesRouteExtension on BangCategoriesRoute { static BangCategoriesRoute _fromState(GoRouterState state) => BangCategoriesRoute(); - String get location => GoRouteData.$location( - '/bangs', - ); + String get location => GoRouteData.$location('/bangs'); void go(BuildContext context) => context.go(location); @@ -442,13 +431,12 @@ extension $BangCategoriesRouteExtension on BangCategoriesRoute { extension $BangSearchRouteExtension on BangSearchRoute { static BangSearchRoute _fromState(GoRouterState state) => BangSearchRoute( - searchText: state.pathParameters['searchText']! ?? - BangSearchRoute.emptySearchText, - ); + searchText: + state.pathParameters['searchText'] ?? BangSearchRoute.emptySearchText, + ); - String get location => GoRouteData.$location( - '/bangs/search/${Uri.encodeComponent(searchText)}', - ); + String get location => + GoRouteData.$location('/bangs/search/${Uri.encodeComponent(searchText)}'); void go(BuildContext context) => context.go(location); @@ -461,13 +449,11 @@ extension $BangSearchRouteExtension on BangSearchRoute { } extension $BangCategoryRouteExtension on BangCategoryRoute { - static BangCategoryRoute _fromState(GoRouterState state) => BangCategoryRoute( - category: state.pathParameters['category']!, - ); + static BangCategoryRoute _fromState(GoRouterState state) => + BangCategoryRoute(category: state.pathParameters['category']!); - String get location => GoRouteData.$location( - '/bangs/category/${Uri.encodeComponent(category)}', - ); + String get location => + GoRouteData.$location('/bangs/category/${Uri.encodeComponent(category)}'); void go(BuildContext context) => context.go(location); @@ -487,8 +473,100 @@ extension $BangSubCategoryRouteExtension on BangSubCategoryRoute { ); 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 push(BuildContext context) => context.push(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 push(BuildContext context) => context.push(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 push(BuildContext context) => context.push(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 push(BuildContext context) => context.push(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); diff --git a/app/lib/data/database/converters/string_list.dart b/app/lib/data/database/converters/string_list.dart new file mode 100644 index 00000000..15e42a17 --- /dev/null +++ b/app/lib/data/database/converters/string_list.dart @@ -0,0 +1,17 @@ +import 'dart:convert'; + +import 'package:drift/drift.dart'; + +class StringListConverter extends TypeConverter, String> { + const StringListConverter(); + + @override + List fromSql(String fromDb) { + return jsonDecode(fromDb) as List; + } + + @override + String toSql(List value) { + return jsonEncode(value); + } +} diff --git a/app/lib/data/models/web_page_info.dart b/app/lib/data/models/web_page_info.dart index 917489b7..d8e5f501 100644 --- a/app/lib/data/models/web_page_info.dart +++ b/app/lib/data/models/web_page_info.dart @@ -1,5 +1,6 @@ import 'package:copy_with_extension/copy_with_extension.dart'; import 'package:fast_equatable/fast_equatable.dart'; +import 'package:lensai/extensions/nullable.dart'; import 'package:lensai/features/geckoview/domain/entities/browser_icon.dart'; part 'web_page_info.g.dart'; @@ -12,7 +13,7 @@ class WebPageInfo with FastEquatable { final Set? feeds; bool get isPageInfoComplete => - (title?.isNotEmpty ?? false) && favicon != null; + title.isNotEmpty && favicon != null && feeds != null; WebPageInfo({required this.url, this.title, this.favicon, this.feeds}); diff --git a/app/lib/data/models/web_page_info.g.dart b/app/lib/data/models/web_page_info.g.dart index 5f1233b7..49b27f24 100644 --- a/app/lib/data/models/web_page_info.g.dart +++ b/app/lib/data/models/web_page_info.g.dart @@ -48,7 +48,6 @@ class _$WebPageInfoCWProxyImpl implements _$WebPageInfoCWProxy { WebPageInfo feeds(Set? feeds) => this(feeds: feeds); @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. /// /// Usage @@ -62,22 +61,26 @@ class _$WebPageInfoCWProxyImpl implements _$WebPageInfoCWProxy { Object? feeds = const $CopyWithPlaceholder(), }) { return WebPageInfo( - url: url == const $CopyWithPlaceholder() - ? _value.url - // ignore: cast_nullable_to_non_nullable - : url as Uri, - title: title == const $CopyWithPlaceholder() - ? _value.title - // ignore: cast_nullable_to_non_nullable - : title as String?, - favicon: favicon == const $CopyWithPlaceholder() - ? _value.favicon - // ignore: cast_nullable_to_non_nullable - : favicon as BrowserIcon?, - feeds: feeds == const $CopyWithPlaceholder() - ? _value.feeds - // ignore: cast_nullable_to_non_nullable - : feeds as Set?, + url: + url == const $CopyWithPlaceholder() + ? _value.url + // ignore: cast_nullable_to_non_nullable + : url as Uri, + title: + title == const $CopyWithPlaceholder() + ? _value.title + // ignore: cast_nullable_to_non_nullable + : title as String?, + favicon: + favicon == const $CopyWithPlaceholder() + ? _value.favicon + // ignore: cast_nullable_to_non_nullable + : favicon as BrowserIcon?, + feeds: + feeds == const $CopyWithPlaceholder() + ? _value.feeds + // ignore: cast_nullable_to_non_nullable + : feeds as Set?, ); } } diff --git a/app/lib/domain/services/app_initialization.dart b/app/lib/domain/services/app_initialization.dart index 95c5e46a..2f29879e 100644 --- a/app/lib/domain/services/app_initialization.dart +++ b/app/lib/domain/services/app_initialization.dart @@ -1,6 +1,7 @@ import 'dart:async'; 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/bangs/data/models/bang_group.dart'; import 'package:lensai/features/bangs/domain/repositories/sync.dart'; @@ -43,6 +44,8 @@ class AppInitializationService extends _$AppInitializationService { state = await Result.fromAsync(() async { final errors = []; + await ref.read(formatProvider.future); + await _initPackageInfo(); final bangSyncResults = await _initBangs(); diff --git a/app/lib/domain/services/app_initialization.g.dart b/app/lib/domain/services/app_initialization.g.dart index 7d593514..57972cd7 100644 --- a/app/lib/domain/services/app_initialization.g.dart +++ b/app/lib/domain/services/app_initialization.g.dart @@ -7,28 +7,27 @@ part of 'app_initialization.dart'; // ************************************************************************** String _$appInitializationServiceHash() => - r'fa383398929c8f3c8b430986304775e044b9af7a'; + r'5e537f916825d6c5f660cf62ff133c2ef00ab091'; /// See also [AppInitializationService]. @ProviderFor(AppInitializationService) final appInitializationServiceProvider = NotifierProvider< - AppInitializationService, - Result< - ({ - bool initialized, - String? stage, - List errors - })>>.internal( + AppInitializationService, + Result<({bool initialized, String? stage, List errors})> +>.internal( AppInitializationService.new, name: r'appInitializationServiceProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$appInitializationServiceHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$appInitializationServiceHash, dependencies: null, allTransitiveDependencies: null, ); -typedef _$AppInitializationService = Notifier< - Result<({bool initialized, String? stage, List errors})>>; +typedef _$AppInitializationService = + Notifier< + Result<({bool initialized, String? stage, List errors})> + >; // 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 diff --git a/app/lib/domain/services/generic_website.dart b/app/lib/domain/services/generic_website.dart index 52ae88d9..ee4644ea 100644 --- a/app/lib/domain/services/generic_website.dart +++ b/app/lib/domain/services/generic_website.dart @@ -13,8 +13,8 @@ import 'package:lensai/data/models/web_page_info.dart'; import 'package:lensai/extensions/nullable.dart'; import 'package:lensai/features/geckoview/domain/entities/browser_icon.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/utils/feed_finder.dart'; import 'package:lensai/utils/lru_cache.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; @@ -119,7 +119,7 @@ class GenericWebsiteService extends _$GenericWebsiteService { url: _resolveRelativeUri(baseUrl, url).toString(), type: type, sizes: sizesToList(link.attributes['sizes']).toList(), - mimeType: (mimeType?.isNotEmpty ?? true) ? null : mimeType, + mimeType: mimeType.isNotEmpty ? mimeType : null, maskable: false, ), ); @@ -186,7 +186,7 @@ class GenericWebsiteService extends _$GenericWebsiteService { return icons; } - Future> fetchPageInfo(Uri url) async { + Future> fetchPageInfo(Uri url) { return Result.fromAsync(() async { final result = await compute((String urlString) async { final client = http.Client(); @@ -200,10 +200,8 @@ class GenericWebsiteService extends _$GenericWebsiteService { final title = document.querySelector('title')?.text; final resources = _extractIcons(baseUri, document); - final feeds = await FeedFinder( - url: baseUri, - document: document, - ).parse(verifyCandidates: false); + final feeds = + await FeedFinder(url: baseUri, document: document).parse(); return { 'title': title, diff --git a/app/lib/domain/services/generic_website.g.dart b/app/lib/domain/services/generic_website.g.dart index 7cf324db..07d2dcf1 100644 --- a/app/lib/domain/services/generic_website.g.dart +++ b/app/lib/domain/services/generic_website.g.dart @@ -7,20 +7,21 @@ part of 'generic_website.dart'; // ************************************************************************** String _$genericWebsiteServiceHash() => - r'12396df7370ebc31b0a53b786e5a3e27c6d05177'; + r'9d17f41596579c289a6cd021ed8d8049e1fb7aff'; /// See also [GenericWebsiteService]. @ProviderFor(GenericWebsiteService) final genericWebsiteServiceProvider = NotifierProvider.internal( - GenericWebsiteService.new, - name: r'genericWebsiteServiceProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$genericWebsiteServiceHash, - dependencies: null, - allTransitiveDependencies: null, -); + GenericWebsiteService.new, + name: r'genericWebsiteServiceProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$genericWebsiteServiceHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$GenericWebsiteService = Notifier; // ignore_for_file: type=lint diff --git a/app/lib/extensions/duartion.dart b/app/lib/extensions/duartion.dart new file mode 100644 index 00000000..5bda5e77 --- /dev/null +++ b/app/lib/extensions/duartion.dart @@ -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'; + } +} diff --git a/app/lib/extensions/image.dart b/app/lib/extensions/image.dart index cd46d759..005cc941 100644 --- a/app/lib/extensions/image.dart +++ b/app/lib/extensions/image.dart @@ -1,12 +1,12 @@ import 'dart:ui'; -import 'package:xxh3/xxh3.dart'; +import 'package:fast_equatable/hash.dart'; extension ImageHash on Image { Future calculateHash() async { - final bytes = await toByteData(); - if (bytes != null) { - final digest = xxh3(bytes.buffer.asUint8List()); + final byteData = await toByteData(); + if (byteData != null) { + final digest = secureHash(byteData); return digest; } diff --git a/app/lib/extensions/nullable.dart b/app/lib/extensions/nullable.dart index 59cfa6f0..3190170b 100644 --- a/app/lib/extensions/nullable.dart +++ b/app/lib/extensions/nullable.dart @@ -1,7 +1,26 @@ -extension NullableX on T? { +extension NullableX on T? { @pragma('vm:prefer-inline') R? mapNotNull(R? Function(T) callback) { - // ignore: null_check_on_nullable_type_parameter validated - return (this != null) ? callback(this!) : null; + // We can simplify this by using the null-aware operator + 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; +} diff --git a/app/lib/extensions/uri.dart b/app/lib/extensions/uri.dart new file mode 100644 index 00000000..ad1b9e56 --- /dev/null +++ b/app/lib/extensions/uri.dart @@ -0,0 +1,3 @@ +extension UriX on Uri { + Uri get base => Uri.parse('$scheme://$authority'); +} diff --git a/app/lib/features/app_widget/domain/services/home_widget.g.dart b/app/lib/features/app_widget/domain/services/home_widget.g.dart index db023291..6382062a 100644 --- a/app/lib/features/app_widget/domain/services/home_widget.g.dart +++ b/app/lib/features/app_widget/domain/services/home_widget.g.dart @@ -13,9 +13,10 @@ String _$widgetPinnableHash() => r'f91041f0f051ad0f00dd765cafea5571ca8c8088'; final widgetPinnableProvider = FutureProvider.internal( widgetPinnable, name: r'widgetPinnableProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$widgetPinnableHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$widgetPinnableHash, dependencies: null, allTransitiveDependencies: null, ); @@ -30,18 +31,19 @@ String _$appWidgetLaunchStreamHash() => @ProviderFor(appWidgetLaunchStream) final appWidgetLaunchStreamProvider = AutoDisposeProvider>>.internal( - appWidgetLaunchStream, - name: r'appWidgetLaunchStreamProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$appWidgetLaunchStreamHash, - dependencies: null, - allTransitiveDependencies: null, -); + appWidgetLaunchStream, + name: r'appWidgetLaunchStreamProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$appWidgetLaunchStreamHash, + dependencies: null, + allTransitiveDependencies: null, + ); @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element -typedef AppWidgetLaunchStreamRef - = AutoDisposeProviderRef>>; +typedef AppWidgetLaunchStreamRef = + AutoDisposeProviderRef>>; // 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 diff --git a/app/lib/features/bangs/data/database/daos/bang.dart b/app/lib/features/bangs/data/database/daos/bang.dart index 530b1a78..b444e6f8 100644 --- a/app/lib/features/bangs/data/database/daos/bang.dart +++ b/app/lib/features/bangs/data/database/daos/bang.dart @@ -111,9 +111,9 @@ class BangDao extends DatabaseAccessor with _$BangDaoMixin { ), onConflict: DoUpdate( target: [db.bangHistory.searchQuery], - (old) => BangHistoryCompanion.custom( - trigger: Variable(trigger), - searchDate: Variable(DateTime.now()), + (old) => BangHistoryCompanion( + trigger: Value(trigger), + searchDate: Value(DateTime.now()), ), ), ); diff --git a/app/lib/features/bangs/data/database/daos/sync.dart b/app/lib/features/bangs/data/database/daos/sync.dart index 190a1a34..3b0cf4f2 100644 --- a/app/lib/features/bangs/data/database/daos/sync.dart +++ b/app/lib/features/bangs/data/database/daos/sync.dart @@ -22,7 +22,7 @@ class SyncDao extends DatabaseAccessor with _$SyncDaoMixin { return db.bangSync.insertOne( BangSyncCompanion.insert(group: Value(group), lastSync: lastSync), onConflict: DoUpdate( - (old) => BangSyncCompanion.custom(lastSync: Variable(lastSync)), + (old) => BangSyncCompanion(lastSync: Value(lastSync)), ), ); } diff --git a/app/lib/features/bangs/data/database/database.g.dart b/app/lib/features/bangs/data/database/database.g.dart index 7f188011..2f516bb3 100644 --- a/app/lib/features/bangs/data/database/database.g.dart +++ b/app/lib/features/bangs/data/database/database.g.dart @@ -9,58 +9,82 @@ class BangTable extends Table with TableInfo { final String? _alias; BangTable(this.attachedDatabase, [this._alias]); late final GeneratedColumn trigger = GeneratedColumn( - 'trigger', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'PRIMARY KEY NOT NULL'); + 'trigger', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'PRIMARY KEY NOT NULL', + ); late final GeneratedColumnWithTypeConverter group = - GeneratedColumn('group', aliasedName, false, - type: DriftSqlType.int, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL') - .withConverter(BangTable.$convertergroup); + GeneratedColumn( + 'group', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ).withConverter(BangTable.$convertergroup); late final GeneratedColumn websiteName = GeneratedColumn( - 'website_name', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL'); + 'website_name', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ); late final GeneratedColumn domain = GeneratedColumn( - 'domain', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL'); + 'domain', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ); late final GeneratedColumn urlTemplate = GeneratedColumn( - 'url_template', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL'); + 'url_template', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ); late final GeneratedColumn category = GeneratedColumn( - 'category', aliasedName, true, - type: DriftSqlType.string, - requiredDuringInsert: false, - $customConstraints: ''); + 'category', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: '', + ); late final GeneratedColumn subCategory = GeneratedColumn( - 'sub_category', aliasedName, true, - type: DriftSqlType.string, - requiredDuringInsert: false, - $customConstraints: ''); + 'sub_category', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: '', + ); late final GeneratedColumnWithTypeConverter?, String> format = - GeneratedColumn('format', aliasedName, true, - type: DriftSqlType.string, - requiredDuringInsert: false, - $customConstraints: '') - .withConverter?>(BangTable.$converterformat); + GeneratedColumn( + 'format', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: '', + ).withConverter?>(BangTable.$converterformat); @override List get $columns => [ - trigger, - group, - websiteName, - domain, - urlTemplate, - category, - subCategory, - format - ]; + trigger, + group, + websiteName, + domain, + urlTemplate, + category, + subCategory, + format, + ]; @override String get aliasedName => _alias ?? actualTableName; @override @@ -72,22 +96,46 @@ class BangTable extends Table with TableInfo { Bang map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return Bang( - websiteName: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}website_name'])!, - domain: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}domain'])!, - trigger: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}trigger'])!, - urlTemplate: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}url_template'])!, - group: BangTable.$convertergroup.fromSql(attachedDatabase.typeMapping - .read(DriftSqlType.int, data['${effectivePrefix}group'])!), - category: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}category']), - subCategory: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}sub_category']), - format: BangTable.$converterformat.fromSql(attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}format'])), + websiteName: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}website_name'], + )!, + domain: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}domain'], + )!, + trigger: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}trigger'], + )!, + urlTemplate: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}url_template'], + )!, + group: BangTable.$convertergroup.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}group'], + )!, + ), + category: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}category'], + ), + subCategory: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}sub_category'], + ), + format: BangTable.$converterformat.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}format'], + ), + ), ); } @@ -135,11 +183,11 @@ class BangCompanion extends UpdateCompanion { this.subCategory = const Value.absent(), this.format = const Value.absent(), this.rowid = const Value.absent(), - }) : trigger = Value(trigger), - group = Value(group), - websiteName = Value(websiteName), - domain = Value(domain), - urlTemplate = Value(urlTemplate); + }) : trigger = Value(trigger), + group = Value(group), + websiteName = Value(websiteName), + domain = Value(domain), + urlTemplate = Value(urlTemplate); static Insertable custom({ Expression? trigger, Expression? group, @@ -164,16 +212,17 @@ class BangCompanion extends UpdateCompanion { }); } - BangCompanion copyWith( - {Value? trigger, - Value? group, - Value? websiteName, - Value? domain, - Value? urlTemplate, - Value? category, - Value? subCategory, - Value?>? format, - Value? rowid}) { + BangCompanion copyWith({ + Value? trigger, + Value? group, + Value? websiteName, + Value? domain, + Value? urlTemplate, + Value? category, + Value? subCategory, + Value?>? format, + Value? rowid, + }) { return BangCompanion( trigger: trigger ?? this.trigger, group: group ?? this.group, @@ -194,8 +243,9 @@ class BangCompanion extends UpdateCompanion { map['trigger'] = Variable(trigger.value); } if (group.present) { - map['group'] = - Variable(BangTable.$convertergroup.toSql(group.value)); + map['group'] = Variable( + BangTable.$convertergroup.toSql(group.value), + ); } if (websiteName.present) { map['website_name'] = Variable(websiteName.value); @@ -213,8 +263,9 @@ class BangCompanion extends UpdateCompanion { map['sub_category'] = Variable(subCategory.value); } if (format.present) { - map['format'] = - Variable(BangTable.$converterformat.toSql(format.value)); + map['format'] = Variable( + BangTable.$converterformat.toSql(format.value), + ); } if (rowid.present) { map['rowid'] = Variable(rowid.value); @@ -245,16 +296,22 @@ class BangSync extends Table with TableInfo { final String? _alias; BangSync(this.attachedDatabase, [this._alias]); late final GeneratedColumnWithTypeConverter group = - GeneratedColumn('group', aliasedName, false, - type: DriftSqlType.int, - requiredDuringInsert: false, - $customConstraints: 'PRIMARY KEY NOT NULL') - .withConverter(BangSync.$convertergroup); + GeneratedColumn( + 'group', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: false, + $customConstraints: 'PRIMARY KEY NOT NULL', + ).withConverter(BangSync.$convertergroup); late final GeneratedColumn lastSync = GeneratedColumn( - 'last_sync', aliasedName, false, - type: DriftSqlType.dateTime, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL'); + 'last_sync', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ); @override List get $columns => [group, lastSync]; @override @@ -268,10 +325,17 @@ class BangSync extends Table with TableInfo { BangSyncData map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return BangSyncData( - group: BangSync.$convertergroup.fromSql(attachedDatabase.typeMapping - .read(DriftSqlType.int, data['${effectivePrefix}group'])!), - lastSync: attachedDatabase.typeMapping - .read(DriftSqlType.dateTime, data['${effectivePrefix}last_sync'])!, + group: BangSync.$convertergroup.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}group'], + )!, + ), + lastSync: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_sync'], + )!, ); } @@ -300,12 +364,15 @@ class BangSyncData extends DataClass implements Insertable { return map; } - factory BangSyncData.fromJson(Map json, - {ValueSerializer? serializer}) { + factory BangSyncData.fromJson( + Map json, { + ValueSerializer? serializer, + }) { serializer ??= driftRuntimeOptions.defaultSerializer; return BangSyncData( - group: BangSync.$convertergroup - .fromJson(serializer.fromJson(json['group'])), + group: BangSync.$convertergroup.fromJson( + serializer.fromJson(json['group']), + ), lastSync: serializer.fromJson(json['last_sync']), ); } @@ -319,9 +386,9 @@ class BangSyncData extends DataClass implements Insertable { } BangSyncData copyWith({BangGroup? group, DateTime? lastSync}) => BangSyncData( - group: group ?? this.group, - lastSync: lastSync ?? this.lastSync, - ); + group: group ?? this.group, + lastSync: lastSync ?? this.lastSync, + ); BangSyncData copyWithCompanion(BangSyncCompanion data) { return BangSyncData( group: data.group.present ? data.group.value : this.group, @@ -369,8 +436,10 @@ class BangSyncCompanion extends UpdateCompanion { }); } - BangSyncCompanion copyWith( - {Value? group, Value? lastSync}) { + BangSyncCompanion copyWith({ + Value? group, + Value? lastSync, + }) { return BangSyncCompanion( group: group ?? this.group, lastSync: lastSync ?? this.lastSync, @@ -406,21 +475,30 @@ class BangFrequency extends Table final String? _alias; BangFrequency(this.attachedDatabase, [this._alias]); late final GeneratedColumn trigger = GeneratedColumn( - 'trigger', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: - 'PRIMARY KEY NOT NULL REFERENCES bang("trigger")ON DELETE CASCADE'); + 'trigger', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: + 'PRIMARY KEY NOT NULL REFERENCES bang("trigger")ON DELETE CASCADE', + ); late final GeneratedColumn frequency = GeneratedColumn( - 'frequency', aliasedName, false, - type: DriftSqlType.int, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL'); + 'frequency', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ); late final GeneratedColumn lastUsed = GeneratedColumn( - 'last_used', aliasedName, false, - type: DriftSqlType.dateTime, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL'); + 'last_used', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ); @override List get $columns => [trigger, frequency, lastUsed]; @override @@ -434,12 +512,21 @@ class BangFrequency extends Table BangFrequencyData map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return BangFrequencyData( - trigger: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}trigger'])!, - frequency: attachedDatabase.typeMapping - .read(DriftSqlType.int, data['${effectivePrefix}frequency'])!, - lastUsed: attachedDatabase.typeMapping - .read(DriftSqlType.dateTime, data['${effectivePrefix}last_used'])!, + trigger: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}trigger'], + )!, + frequency: + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}frequency'], + )!, + lastUsed: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_used'], + )!, ); } @@ -457,8 +544,11 @@ class BangFrequencyData extends DataClass final String trigger; final int frequency; final DateTime lastUsed; - const BangFrequencyData( - {required this.trigger, required this.frequency, required this.lastUsed}); + const BangFrequencyData({ + required this.trigger, + required this.frequency, + required this.lastUsed, + }); @override Map toColumns(bool nullToAbsent) { final map = {}; @@ -468,8 +558,10 @@ class BangFrequencyData extends DataClass return map; } - factory BangFrequencyData.fromJson(Map json, - {ValueSerializer? serializer}) { + factory BangFrequencyData.fromJson( + Map json, { + ValueSerializer? serializer, + }) { serializer ??= driftRuntimeOptions.defaultSerializer; return BangFrequencyData( trigger: serializer.fromJson(json['trigger']), @@ -487,13 +579,15 @@ class BangFrequencyData extends DataClass }; } - BangFrequencyData copyWith( - {String? trigger, int? frequency, DateTime? lastUsed}) => - BangFrequencyData( - trigger: trigger ?? this.trigger, - frequency: frequency ?? this.frequency, - lastUsed: lastUsed ?? this.lastUsed, - ); + BangFrequencyData copyWith({ + String? trigger, + int? frequency, + DateTime? lastUsed, + }) => BangFrequencyData( + trigger: trigger ?? this.trigger, + frequency: frequency ?? this.frequency, + lastUsed: lastUsed ?? this.lastUsed, + ); BangFrequencyData copyWithCompanion(BangFrequencyCompanion data) { return BangFrequencyData( trigger: data.trigger.present ? data.trigger.value : this.trigger, @@ -539,9 +633,9 @@ class BangFrequencyCompanion extends UpdateCompanion { required int frequency, required DateTime lastUsed, this.rowid = const Value.absent(), - }) : trigger = Value(trigger), - frequency = Value(frequency), - lastUsed = Value(lastUsed); + }) : trigger = Value(trigger), + frequency = Value(frequency), + lastUsed = Value(lastUsed); static Insertable custom({ Expression? trigger, Expression? frequency, @@ -556,11 +650,12 @@ class BangFrequencyCompanion extends UpdateCompanion { }); } - BangFrequencyCompanion copyWith( - {Value? trigger, - Value? frequency, - Value? lastUsed, - Value? rowid}) { + BangFrequencyCompanion copyWith({ + Value? trigger, + Value? frequency, + Value? lastUsed, + Value? rowid, + }) { return BangFrequencyCompanion( trigger: trigger ?? this.trigger, frequency: frequency ?? this.frequency, @@ -605,20 +700,29 @@ class BangHistory extends Table with TableInfo { final String? _alias; BangHistory(this.attachedDatabase, [this._alias]); late final GeneratedColumn searchQuery = GeneratedColumn( - 'search_query', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'UNIQUE NOT NULL'); + 'search_query', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'UNIQUE NOT NULL', + ); late final GeneratedColumn trigger = GeneratedColumn( - 'trigger', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL REFERENCES bang("trigger")'); + 'trigger', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL REFERENCES bang("trigger")', + ); late final GeneratedColumn searchDate = GeneratedColumn( - 'search_date', aliasedName, false, - type: DriftSqlType.dateTime, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL'); + 'search_date', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ); @override List get $columns => [searchQuery, trigger, searchDate]; @override @@ -632,12 +736,21 @@ class BangHistory extends Table with TableInfo { BangHistoryData map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return BangHistoryData( - searchQuery: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}search_query'])!, - trigger: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}trigger'])!, - searchDate: attachedDatabase.typeMapping - .read(DriftSqlType.dateTime, data['${effectivePrefix}search_date'])!, + searchQuery: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}search_query'], + )!, + trigger: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}trigger'], + )!, + searchDate: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}search_date'], + )!, ); } @@ -654,10 +767,11 @@ class BangHistoryData extends DataClass implements Insertable { final String searchQuery; final String trigger; final DateTime searchDate; - const BangHistoryData( - {required this.searchQuery, - required this.trigger, - required this.searchDate}); + const BangHistoryData({ + required this.searchQuery, + required this.trigger, + required this.searchDate, + }); @override Map toColumns(bool nullToAbsent) { final map = {}; @@ -667,8 +781,10 @@ class BangHistoryData extends DataClass implements Insertable { return map; } - factory BangHistoryData.fromJson(Map json, - {ValueSerializer? serializer}) { + factory BangHistoryData.fromJson( + Map json, { + ValueSerializer? serializer, + }) { serializer ??= driftRuntimeOptions.defaultSerializer; return BangHistoryData( searchQuery: serializer.fromJson(json['search_query']), @@ -686,13 +802,15 @@ class BangHistoryData extends DataClass implements Insertable { }; } - BangHistoryData copyWith( - {String? searchQuery, String? trigger, DateTime? searchDate}) => - BangHistoryData( - searchQuery: searchQuery ?? this.searchQuery, - trigger: trigger ?? this.trigger, - searchDate: searchDate ?? this.searchDate, - ); + BangHistoryData copyWith({ + String? searchQuery, + String? trigger, + DateTime? searchDate, + }) => BangHistoryData( + searchQuery: searchQuery ?? this.searchQuery, + trigger: trigger ?? this.trigger, + searchDate: searchDate ?? this.searchDate, + ); BangHistoryData copyWithCompanion(BangHistoryCompanion data) { return BangHistoryData( searchQuery: @@ -740,9 +858,9 @@ class BangHistoryCompanion extends UpdateCompanion { required String trigger, required DateTime searchDate, this.rowid = const Value.absent(), - }) : searchQuery = Value(searchQuery), - trigger = Value(trigger), - searchDate = Value(searchDate); + }) : searchQuery = Value(searchQuery), + trigger = Value(trigger), + searchDate = Value(searchDate); static Insertable custom({ Expression? searchQuery, Expression? trigger, @@ -757,11 +875,12 @@ class BangHistoryCompanion extends UpdateCompanion { }); } - BangHistoryCompanion copyWith( - {Value? searchQuery, - Value? trigger, - Value? searchDate, - Value? rowid}) { + BangHistoryCompanion copyWith({ + Value? searchQuery, + Value? trigger, + Value? searchDate, + Value? rowid, + }) { return BangHistoryCompanion( searchQuery: searchQuery ?? this.searchQuery, trigger: trigger ?? this.trigger, @@ -807,15 +926,21 @@ class BangFts extends Table final String? _alias; BangFts(this.attachedDatabase, [this._alias]); late final GeneratedColumn trigger = GeneratedColumn( - 'trigger', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: ''); + 'trigger', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: '', + ); late final GeneratedColumn websiteName = GeneratedColumn( - 'website_name', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: ''); + 'website_name', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: '', + ); @override List get $columns => [trigger, websiteName]; @override @@ -829,10 +954,16 @@ class BangFts extends Table BangFt map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return BangFt( - trigger: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}trigger'])!, - websiteName: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}website_name'])!, + trigger: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}trigger'], + )!, + websiteName: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}website_name'], + )!, ); } @@ -860,8 +991,10 @@ class BangFt extends DataClass implements Insertable { return map; } - factory BangFt.fromJson(Map json, - {ValueSerializer? serializer}) { + factory BangFt.fromJson( + Map json, { + ValueSerializer? serializer, + }) { serializer ??= driftRuntimeOptions.defaultSerializer; return BangFt( trigger: serializer.fromJson(json['trigger']), @@ -878,9 +1011,9 @@ class BangFt extends DataClass implements Insertable { } BangFt copyWith({String? trigger, String? websiteName}) => BangFt( - trigger: trigger ?? this.trigger, - websiteName: websiteName ?? this.websiteName, - ); + trigger: trigger ?? this.trigger, + websiteName: websiteName ?? this.websiteName, + ); BangFt copyWithCompanion(BangFtsCompanion data) { return BangFt( trigger: data.trigger.present ? data.trigger.value : this.trigger, @@ -921,8 +1054,8 @@ class BangFtsCompanion extends UpdateCompanion { required String trigger, required String websiteName, this.rowid = const Value.absent(), - }) : trigger = Value(trigger), - websiteName = Value(websiteName); + }) : trigger = Value(trigger), + websiteName = Value(websiteName); static Insertable custom({ Expression? trigger, Expression? websiteName, @@ -935,8 +1068,11 @@ class BangFtsCompanion extends UpdateCompanion { }); } - BangFtsCompanion copyWith( - {Value? trigger, Value? websiteName, Value? rowid}) { + BangFtsCompanion copyWith({ + Value? trigger, + Value? websiteName, + Value? rowid, + }) { return BangFtsCompanion( trigger: trigger ?? this.trigger, websiteName: websiteName ?? this.websiteName, @@ -978,84 +1114,139 @@ class BangDataView extends ViewInfo BangDataView(this.attachedDatabase, [this._alias]); @override List get $columns => [ - trigger, - group, - websiteName, - domain, - urlTemplate, - category, - subCategory, - format, - frequency, - lastUsed - ]; + trigger, + group, + websiteName, + domain, + urlTemplate, + category, + subCategory, + format, + frequency, + lastUsed, + ]; @override String get aliasedName => _alias ?? entityName; @override String get entityName => 'bang_data_view'; @override Map get createViewStatements => { - SqlDialect.sqlite: - 'CREATE VIEW bang_data_view AS SELECT b.*, bf.frequency, bf.last_used FROM bang AS b LEFT JOIN bang_frequency AS bf ON b."trigger" = bf."trigger"', - }; + SqlDialect.sqlite: + 'CREATE VIEW bang_data_view AS SELECT b.*, bf.frequency, bf.last_used FROM bang AS b LEFT JOIN bang_frequency AS bf ON b."trigger" = bf."trigger"', + }; @override BangDataView get asDslTable => this; @override BangData map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return BangData( - websiteName: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}website_name'])!, - domain: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}domain'])!, - trigger: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}trigger'])!, - urlTemplate: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}url_template'])!, - category: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}category']), - subCategory: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}sub_category']), - format: BangTable.$converterformat.fromSql(attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}format'])), - frequency: attachedDatabase.typeMapping - .read(DriftSqlType.int, data['${effectivePrefix}frequency']), - lastUsed: attachedDatabase.typeMapping - .read(DriftSqlType.dateTime, data['${effectivePrefix}last_used']), + websiteName: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}website_name'], + )!, + domain: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}domain'], + )!, + trigger: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}trigger'], + )!, + urlTemplate: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}url_template'], + )!, + category: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}category'], + ), + subCategory: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}sub_category'], + ), + format: BangTable.$converterformat.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}format'], + ), + ), + frequency: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}frequency'], + ), + lastUsed: attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}last_used'], + ), ); } late final GeneratedColumn trigger = GeneratedColumn( - 'trigger', aliasedName, false, - type: DriftSqlType.string); + 'trigger', + aliasedName, + false, + type: DriftSqlType.string, + ); late final GeneratedColumnWithTypeConverter group = - GeneratedColumn('group', aliasedName, false, type: DriftSqlType.int) - .withConverter(BangTable.$convertergroup); + GeneratedColumn( + 'group', + aliasedName, + false, + type: DriftSqlType.int, + ).withConverter(BangTable.$convertergroup); late final GeneratedColumn websiteName = GeneratedColumn( - 'website_name', aliasedName, false, - type: DriftSqlType.string); + 'website_name', + aliasedName, + false, + type: DriftSqlType.string, + ); late final GeneratedColumn domain = GeneratedColumn( - 'domain', aliasedName, false, - type: DriftSqlType.string); + 'domain', + aliasedName, + false, + type: DriftSqlType.string, + ); late final GeneratedColumn urlTemplate = GeneratedColumn( - 'url_template', aliasedName, false, - type: DriftSqlType.string); + 'url_template', + aliasedName, + false, + type: DriftSqlType.string, + ); late final GeneratedColumn category = GeneratedColumn( - 'category', aliasedName, true, - type: DriftSqlType.string); + 'category', + aliasedName, + true, + type: DriftSqlType.string, + ); late final GeneratedColumn subCategory = GeneratedColumn( - 'sub_category', aliasedName, true, - type: DriftSqlType.string); + 'sub_category', + aliasedName, + true, + type: DriftSqlType.string, + ); late final GeneratedColumnWithTypeConverter?, String> format = - GeneratedColumn('format', aliasedName, true, - type: DriftSqlType.string) - .withConverter?>(BangTable.$converterformat); + GeneratedColumn( + 'format', + aliasedName, + true, + type: DriftSqlType.string, + ).withConverter?>(BangTable.$converterformat); late final GeneratedColumn frequency = GeneratedColumn( - 'frequency', aliasedName, true, - type: DriftSqlType.int); + 'frequency', + aliasedName, + true, + type: DriftSqlType.int, + ); late final GeneratedColumn lastUsed = GeneratedColumn( - 'last_used', aliasedName, true, - type: DriftSqlType.dateTime); + 'last_used', + aliasedName, + true, + type: DriftSqlType.dateTime, + ); @override BangDataView createAlias(String alias) { return BangDataView(attachedDatabase, alias); @@ -1077,14 +1268,17 @@ abstract class _$BangDatabase extends GeneratedDatabase { late final BangFts bangFts = BangFts(this); late final BangDataView bangDataView = BangDataView(this); late final Trigger bangAfterInsert = Trigger( - 'CREATE TRIGGER bang_after_insert AFTER INSERT ON bang BEGIN INSERT INTO bang_fts ("rowid", "trigger", website_name) VALUES (new."rowid", new."trigger", new.website_name);END', - 'bang_after_insert'); + 'CREATE TRIGGER bang_after_insert AFTER INSERT ON bang BEGIN INSERT INTO bang_fts ("rowid", "trigger", website_name) VALUES (new."rowid", new."trigger", new.website_name);END', + 'bang_after_insert', + ); late final Trigger bangAfterDelete = Trigger( - 'CREATE TRIGGER bang_after_delete AFTER DELETE ON bang BEGIN INSERT INTO bang_fts (bang_fts, "rowid", "trigger", website_name) VALUES (\'delete\', old."rowid", old."trigger", old.website_name);END', - 'bang_after_delete'); + 'CREATE TRIGGER bang_after_delete AFTER DELETE ON bang BEGIN INSERT INTO bang_fts (bang_fts, "rowid", "trigger", website_name) VALUES (\'delete\', old."rowid", old."trigger", old.website_name);END', + 'bang_after_delete', + ); late final Trigger bangAfterUpdate = Trigger( - 'CREATE TRIGGER bang_after_update AFTER UPDATE ON bang BEGIN INSERT INTO bang_fts (bang_fts, "rowid", "trigger", website_name) VALUES (\'delete\', old."rowid", old."trigger", old.website_name);INSERT INTO bang_fts ("rowid", "trigger", website_name) VALUES (new."rowid", new."trigger", new.website_name);END', - 'bang_after_update'); + 'CREATE TRIGGER bang_after_update AFTER UPDATE ON bang BEGIN INSERT INTO bang_fts (bang_fts, "rowid", "trigger", website_name) VALUES (\'delete\', old."rowid", old."trigger", old.website_name);INSERT INTO bang_fts ("rowid", "trigger", website_name) VALUES (new."rowid", new."trigger", new.website_name);END', + 'bang_after_update', + ); late final BangDao bangDao = BangDao(this as BangDatabase); late final SyncDao syncDao = SyncDao(this as BangDatabase); Future optimizeFtsIndex() { @@ -1097,74 +1291,68 @@ abstract class _$BangDatabase extends GeneratedDatabase { Selectable queryBangs({required String query}) { return customSelect( - 'WITH weights AS (SELECT 10.0 AS "trigger", 5.0 AS website_name) SELECT b.*, bf.frequency, bf.last_used, bm25(bang_fts, weights."trigger", weights.website_name) AS weighted_rank FROM bang_fts(?1)AS fts INNER JOIN bang AS b ON b."rowid" = fts."rowid" LEFT JOIN bang_frequency AS bf ON b."trigger" = bf."trigger" CROSS JOIN weights ORDER BY weighted_rank ASC, bf.frequency NULLS LAST', - variables: [ - Variable(query) - ], - readsFrom: { - bangFrequency, - bangFts, - bang, - }).map((QueryRow row) => BangData( - websiteName: row.read('website_name'), - domain: row.read('domain'), - trigger: row.read('trigger'), - urlTemplate: row.read('url_template'), - category: row.readNullable('category'), - subCategory: row.readNullable('sub_category'), - format: BangTable.$converterformat - .fromSql(row.readNullable('format')), - frequency: row.readNullable('frequency'), - lastUsed: row.readNullable('last_used'), - )); + 'WITH weights AS (SELECT 10.0 AS "trigger", 5.0 AS website_name) SELECT b.*, bf.frequency, bf.last_used, bm25(bang_fts, weights."trigger", weights.website_name) AS weighted_rank FROM bang_fts(?1)AS fts INNER JOIN bang AS b ON b."rowid" = fts."rowid" LEFT JOIN bang_frequency AS bf ON b."trigger" = bf."trigger" CROSS JOIN weights ORDER BY weighted_rank ASC, bf.frequency NULLS LAST', + variables: [Variable(query)], + readsFrom: {bangFrequency, bangFts, bang}, + ).map( + (QueryRow row) => BangData( + websiteName: row.read('website_name'), + domain: row.read('domain'), + trigger: row.read('trigger'), + urlTemplate: row.read('url_template'), + category: row.readNullable('category'), + subCategory: row.readNullable('sub_category'), + format: BangTable.$converterformat.fromSql( + row.readNullable('format'), + ), + frequency: row.readNullable('frequency'), + lastUsed: row.readNullable('last_used'), + ), + ); } Selectable queryBangsBasic({required String query}) { return customSelect( - 'WITH weights AS (SELECT 10.0 AS "trigger", 5.0 AS website_name) SELECT b.*, bf.frequency, bf.last_used, bm25(bang_fts, weights."trigger", weights.website_name) AS weighted_rank FROM bang_fts AS fts INNER JOIN bang AS b ON b."rowid" = fts."rowid" LEFT JOIN bang_frequency AS bf ON b."trigger" = bf."trigger" CROSS JOIN weights WHERE fts."trigger" LIKE ?1 OR fts.website_name LIKE ?1 ORDER BY weighted_rank ASC, bf.frequency NULLS LAST', - variables: [ - Variable(query) - ], - readsFrom: { - bangFrequency, - bangFts, - bang, - }).map((QueryRow row) => BangData( - websiteName: row.read('website_name'), - domain: row.read('domain'), - trigger: row.read('trigger'), - urlTemplate: row.read('url_template'), - category: row.readNullable('category'), - subCategory: row.readNullable('sub_category'), - format: BangTable.$converterformat - .fromSql(row.readNullable('format')), - frequency: row.readNullable('frequency'), - lastUsed: row.readNullable('last_used'), - )); + 'WITH weights AS (SELECT 10.0 AS "trigger", 5.0 AS website_name) SELECT b.*, bf.frequency, bf.last_used, bm25(bang_fts, weights."trigger", weights.website_name) AS weighted_rank FROM bang_fts AS fts INNER JOIN bang AS b ON b."rowid" = fts."rowid" LEFT JOIN bang_frequency AS bf ON b."trigger" = bf."trigger" CROSS JOIN weights WHERE fts."trigger" LIKE ?1 OR fts.website_name LIKE ?1 ORDER BY weighted_rank ASC, bf.frequency NULLS LAST', + variables: [Variable(query)], + readsFrom: {bangFrequency, bangFts, bang}, + ).map( + (QueryRow row) => BangData( + websiteName: row.read('website_name'), + domain: row.read('domain'), + trigger: row.read('trigger'), + urlTemplate: row.read('url_template'), + category: row.readNullable('category'), + subCategory: row.readNullable('sub_category'), + format: BangTable.$converterformat.fromSql( + row.readNullable('format'), + ), + frequency: row.readNullable('frequency'), + lastUsed: row.readNullable('last_used'), + ), + ); } Selectable categoriesJson() { return customSelect( - 'WITH categories AS (SELECT b.category, json_group_array(DISTINCT b.sub_category ORDER BY b.sub_category)AS sub_categories FROM bang AS b WHERE b.category IS NOT NULL AND b.sub_category IS NOT NULL GROUP BY b.category ORDER BY b.category) SELECT json_group_object(c.category, json(c.sub_categories)) AS categories_json FROM categories AS c', - variables: [], - readsFrom: { - bang, - }).map((QueryRow row) => row.read('categories_json')); + 'WITH categories AS (SELECT b.category, json_group_array(DISTINCT b.sub_category ORDER BY b.sub_category)AS sub_categories FROM bang AS b WHERE b.category IS NOT NULL AND b.sub_category IS NOT NULL GROUP BY b.category ORDER BY b.category) SELECT json_group_object(c.category, json(c.sub_categories)) AS categories_json FROM categories AS c', + variables: [], + readsFrom: {bang}, + ).map((QueryRow row) => row.read('categories_json')); } Selectable searchHistoryEntries({required int limit}) { return customSelect( - 'SELECT * FROM bang_history ORDER BY search_date DESC LIMIT ?1', - variables: [ - Variable(limit) - ], - readsFrom: { - bangHistory, - }).map((QueryRow row) => SearchHistoryEntry( - searchQuery: row.read('search_query'), - trigger: row.read('trigger'), - searchDate: row.read('search_date'), - )); + 'SELECT * FROM bang_history ORDER BY search_date DESC LIMIT ?1', + variables: [Variable(limit)], + readsFrom: {bangHistory}, + ).map( + (QueryRow row) => SearchHistoryEntry( + searchQuery: row.read('search_query'), + trigger: row.read('trigger'), + searchDate: row.read('search_date'), + ), + ); } Future evictHistoryEntries({required int limit}) { @@ -1181,106 +1369,110 @@ abstract class _$BangDatabase extends GeneratedDatabase { allSchemaEntities.whereType>(); @override List get allSchemaEntities => [ - bang, - bangSync, - bangFrequency, - bangHistory, - bangFts, - bangDataView, - bangAfterInsert, - bangAfterDelete, - bangAfterUpdate - ]; + bang, + bangSync, + bangFrequency, + bangHistory, + bangFts, + bangDataView, + bangAfterInsert, + bangAfterDelete, + bangAfterUpdate, + ]; @override - StreamQueryUpdateRules get streamUpdateRules => const StreamQueryUpdateRules( - [ - WritePropagation( - on: TableUpdateQuery.onTableName('bang', - limitUpdateKind: UpdateKind.delete), - result: [ - TableUpdate('bang_frequency', kind: UpdateKind.delete), - ], - ), - WritePropagation( - on: TableUpdateQuery.onTableName('bang', - limitUpdateKind: UpdateKind.insert), - result: [ - TableUpdate('bang_fts', kind: UpdateKind.insert), - ], - ), - WritePropagation( - on: TableUpdateQuery.onTableName('bang', - limitUpdateKind: UpdateKind.delete), - result: [ - TableUpdate('bang_fts', kind: UpdateKind.insert), - ], - ), - WritePropagation( - on: TableUpdateQuery.onTableName('bang', - limitUpdateKind: UpdateKind.update), - result: [ - TableUpdate('bang_fts', kind: UpdateKind.insert), - ], - ), - ], - ); + StreamQueryUpdateRules get streamUpdateRules => const StreamQueryUpdateRules([ + WritePropagation( + on: TableUpdateQuery.onTableName( + 'bang', + limitUpdateKind: UpdateKind.delete, + ), + result: [TableUpdate('bang_frequency', kind: UpdateKind.delete)], + ), + WritePropagation( + on: TableUpdateQuery.onTableName( + 'bang', + limitUpdateKind: UpdateKind.insert, + ), + result: [TableUpdate('bang_fts', kind: UpdateKind.insert)], + ), + WritePropagation( + on: TableUpdateQuery.onTableName( + 'bang', + limitUpdateKind: UpdateKind.delete, + ), + result: [TableUpdate('bang_fts', kind: UpdateKind.insert)], + ), + WritePropagation( + on: TableUpdateQuery.onTableName( + 'bang', + limitUpdateKind: UpdateKind.update, + ), + result: [TableUpdate('bang_fts', kind: UpdateKind.insert)], + ), + ]); } -typedef $BangTableCreateCompanionBuilder = BangCompanion Function({ - required String trigger, - required BangGroup group, - required String websiteName, - required String domain, - required String urlTemplate, - Value category, - Value subCategory, - Value?> format, - Value rowid, -}); -typedef $BangTableUpdateCompanionBuilder = BangCompanion Function({ - Value trigger, - Value group, - Value websiteName, - Value domain, - Value urlTemplate, - Value category, - Value subCategory, - Value?> format, - Value rowid, -}); +typedef $BangTableCreateCompanionBuilder = + BangCompanion Function({ + required String trigger, + required BangGroup group, + required String websiteName, + required String domain, + required String urlTemplate, + Value category, + Value subCategory, + Value?> format, + Value rowid, + }); +typedef $BangTableUpdateCompanionBuilder = + BangCompanion Function({ + Value trigger, + Value group, + Value websiteName, + Value domain, + Value urlTemplate, + Value category, + Value subCategory, + Value?> format, + Value rowid, + }); final class $BangTableReferences extends BaseReferences<_$BangDatabase, BangTable, Bang> { $BangTableReferences(super.$_db, super.$_table, super.$_typedResult); static MultiTypedResultKey> - _bangFrequencyRefsTable(_$BangDatabase db) => - MultiTypedResultKey.fromTable(db.bangFrequency, - aliasName: $_aliasNameGenerator( - db.bang.trigger, db.bangFrequency.trigger)); + _bangFrequencyRefsTable(_$BangDatabase db) => MultiTypedResultKey.fromTable( + db.bangFrequency, + aliasName: $_aliasNameGenerator(db.bang.trigger, db.bangFrequency.trigger), + ); $BangFrequencyProcessedTableManager get bangFrequencyRefs { final manager = $BangFrequencyTableManager($_db, $_db.bangFrequency).filter( - (f) => f.trigger.trigger.sqlEquals($_itemColumn('trigger')!)); + (f) => f.trigger.trigger.sqlEquals($_itemColumn('trigger')!), + ); final cache = $_typedResult.readTableOrNull(_bangFrequencyRefsTable($_db)); return ProcessedTableManager( - manager.$state.copyWith(prefetchedData: cache)); + manager.$state.copyWith(prefetchedData: cache), + ); } static MultiTypedResultKey> - _bangHistoryRefsTable(_$BangDatabase db) => MultiTypedResultKey.fromTable( - db.bangHistory, - aliasName: - $_aliasNameGenerator(db.bang.trigger, db.bangHistory.trigger)); + _bangHistoryRefsTable(_$BangDatabase db) => MultiTypedResultKey.fromTable( + db.bangHistory, + aliasName: $_aliasNameGenerator(db.bang.trigger, db.bangHistory.trigger), + ); $BangHistoryProcessedTableManager get bangHistoryRefs { final manager = $BangHistoryTableManager($_db, $_db.bangHistory).filter( - (f) => f.trigger.trigger.sqlEquals($_itemColumn('trigger')!)); + (f) => f.trigger.trigger.sqlEquals($_itemColumn('trigger')!), + ); final cache = $_typedResult.readTableOrNull(_bangHistoryRefsTable($_db)); return ProcessedTableManager( - manager.$state.copyWith(prefetchedData: cache)); + manager.$state.copyWith(prefetchedData: cache), + ); } } @@ -1293,72 +1485,94 @@ class $BangTableFilterComposer extends Composer<_$BangDatabase, BangTable> { super.$removeJoinBuilderFromRootComposer, }); ColumnFilters get trigger => $composableBuilder( - column: $table.trigger, builder: (column) => ColumnFilters(column)); + column: $table.trigger, + builder: (column) => ColumnFilters(column), + ); ColumnWithTypeConverterFilters get group => $composableBuilder( - column: $table.group, - builder: (column) => ColumnWithTypeConverterFilters(column)); + column: $table.group, + builder: (column) => ColumnWithTypeConverterFilters(column), + ); ColumnFilters get websiteName => $composableBuilder( - column: $table.websiteName, builder: (column) => ColumnFilters(column)); + column: $table.websiteName, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get domain => $composableBuilder( - column: $table.domain, builder: (column) => ColumnFilters(column)); + column: $table.domain, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get urlTemplate => $composableBuilder( - column: $table.urlTemplate, builder: (column) => ColumnFilters(column)); + column: $table.urlTemplate, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get category => $composableBuilder( - column: $table.category, builder: (column) => ColumnFilters(column)); + column: $table.category, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get subCategory => $composableBuilder( - column: $table.subCategory, builder: (column) => ColumnFilters(column)); + column: $table.subCategory, + builder: (column) => ColumnFilters(column), + ); ColumnWithTypeConverterFilters?, Set, String> - get format => $composableBuilder( - column: $table.format, - builder: (column) => ColumnWithTypeConverterFilters(column)); + get format => $composableBuilder( + column: $table.format, + builder: (column) => ColumnWithTypeConverterFilters(column), + ); Expression bangFrequencyRefs( - Expression Function($BangFrequencyFilterComposer f) f) { + Expression Function($BangFrequencyFilterComposer f) f, + ) { final $BangFrequencyFilterComposer composer = $composerBuilder( - composer: this, - getCurrentColumn: (t) => t.trigger, - referencedTable: $db.bangFrequency, - getReferencedColumn: (t) => t.trigger, - builder: (joinBuilder, - {$addJoinBuilderToRootComposer, - $removeJoinBuilderFromRootComposer}) => - $BangFrequencyFilterComposer( - $db: $db, - $table: $db.bangFrequency, - $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, - joinBuilder: joinBuilder, - $removeJoinBuilderFromRootComposer: - $removeJoinBuilderFromRootComposer, - )); + composer: this, + getCurrentColumn: (t) => t.trigger, + referencedTable: $db.bangFrequency, + getReferencedColumn: (t) => t.trigger, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $BangFrequencyFilterComposer( + $db: $db, + $table: $db.bangFrequency, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); return f(composer); } Expression bangHistoryRefs( - Expression Function($BangHistoryFilterComposer f) f) { + Expression Function($BangHistoryFilterComposer f) f, + ) { final $BangHistoryFilterComposer composer = $composerBuilder( - composer: this, - getCurrentColumn: (t) => t.trigger, - referencedTable: $db.bangHistory, - getReferencedColumn: (t) => t.trigger, - builder: (joinBuilder, - {$addJoinBuilderToRootComposer, - $removeJoinBuilderFromRootComposer}) => - $BangHistoryFilterComposer( - $db: $db, - $table: $db.bangHistory, - $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, - joinBuilder: joinBuilder, - $removeJoinBuilderFromRootComposer: - $removeJoinBuilderFromRootComposer, - )); + composer: this, + getCurrentColumn: (t) => t.trigger, + referencedTable: $db.bangHistory, + getReferencedColumn: (t) => t.trigger, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $BangHistoryFilterComposer( + $db: $db, + $table: $db.bangHistory, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); return f(composer); } } @@ -1372,28 +1586,44 @@ class $BangTableOrderingComposer extends Composer<_$BangDatabase, BangTable> { super.$removeJoinBuilderFromRootComposer, }); ColumnOrderings get trigger => $composableBuilder( - column: $table.trigger, builder: (column) => ColumnOrderings(column)); + column: $table.trigger, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get group => $composableBuilder( - column: $table.group, builder: (column) => ColumnOrderings(column)); + column: $table.group, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get websiteName => $composableBuilder( - column: $table.websiteName, builder: (column) => ColumnOrderings(column)); + column: $table.websiteName, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get domain => $composableBuilder( - column: $table.domain, builder: (column) => ColumnOrderings(column)); + column: $table.domain, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get urlTemplate => $composableBuilder( - column: $table.urlTemplate, builder: (column) => ColumnOrderings(column)); + column: $table.urlTemplate, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get category => $composableBuilder( - column: $table.category, builder: (column) => ColumnOrderings(column)); + column: $table.category, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get subCategory => $composableBuilder( - column: $table.subCategory, builder: (column) => ColumnOrderings(column)); + column: $table.subCategory, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get format => $composableBuilder( - column: $table.format, builder: (column) => ColumnOrderings(column)); + column: $table.format, + builder: (column) => ColumnOrderings(column), + ); } class $BangTableAnnotationComposer extends Composer<_$BangDatabase, BangTable> { @@ -1411,198 +1641,245 @@ class $BangTableAnnotationComposer extends Composer<_$BangDatabase, BangTable> { $composableBuilder(column: $table.group, builder: (column) => column); GeneratedColumn get websiteName => $composableBuilder( - column: $table.websiteName, builder: (column) => column); + column: $table.websiteName, + builder: (column) => column, + ); GeneratedColumn get domain => $composableBuilder(column: $table.domain, builder: (column) => column); GeneratedColumn get urlTemplate => $composableBuilder( - column: $table.urlTemplate, builder: (column) => column); + column: $table.urlTemplate, + builder: (column) => column, + ); GeneratedColumn get category => $composableBuilder(column: $table.category, builder: (column) => column); GeneratedColumn get subCategory => $composableBuilder( - column: $table.subCategory, builder: (column) => column); + column: $table.subCategory, + builder: (column) => column, + ); GeneratedColumnWithTypeConverter?, String> get format => $composableBuilder(column: $table.format, builder: (column) => column); Expression bangFrequencyRefs( - Expression Function($BangFrequencyAnnotationComposer a) f) { + Expression Function($BangFrequencyAnnotationComposer a) f, + ) { final $BangFrequencyAnnotationComposer composer = $composerBuilder( - composer: this, - getCurrentColumn: (t) => t.trigger, - referencedTable: $db.bangFrequency, - getReferencedColumn: (t) => t.trigger, - builder: (joinBuilder, - {$addJoinBuilderToRootComposer, - $removeJoinBuilderFromRootComposer}) => - $BangFrequencyAnnotationComposer( - $db: $db, - $table: $db.bangFrequency, - $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, - joinBuilder: joinBuilder, - $removeJoinBuilderFromRootComposer: - $removeJoinBuilderFromRootComposer, - )); + composer: this, + getCurrentColumn: (t) => t.trigger, + referencedTable: $db.bangFrequency, + getReferencedColumn: (t) => t.trigger, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $BangFrequencyAnnotationComposer( + $db: $db, + $table: $db.bangFrequency, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); return f(composer); } Expression bangHistoryRefs( - Expression Function($BangHistoryAnnotationComposer a) f) { + Expression Function($BangHistoryAnnotationComposer a) f, + ) { final $BangHistoryAnnotationComposer composer = $composerBuilder( - composer: this, - getCurrentColumn: (t) => t.trigger, - referencedTable: $db.bangHistory, - getReferencedColumn: (t) => t.trigger, - builder: (joinBuilder, - {$addJoinBuilderToRootComposer, - $removeJoinBuilderFromRootComposer}) => - $BangHistoryAnnotationComposer( - $db: $db, - $table: $db.bangHistory, - $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, - joinBuilder: joinBuilder, - $removeJoinBuilderFromRootComposer: - $removeJoinBuilderFromRootComposer, - )); + composer: this, + getCurrentColumn: (t) => t.trigger, + referencedTable: $db.bangHistory, + getReferencedColumn: (t) => t.trigger, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $BangHistoryAnnotationComposer( + $db: $db, + $table: $db.bangHistory, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); return f(composer); } } -class $BangTableTableManager extends RootTableManager< - _$BangDatabase, - BangTable, - Bang, - $BangTableFilterComposer, - $BangTableOrderingComposer, - $BangTableAnnotationComposer, - $BangTableCreateCompanionBuilder, - $BangTableUpdateCompanionBuilder, - (Bang, $BangTableReferences), - Bang, - PrefetchHooks Function({bool bangFrequencyRefs, bool bangHistoryRefs})> { +class $BangTableTableManager + extends + RootTableManager< + _$BangDatabase, + BangTable, + Bang, + $BangTableFilterComposer, + $BangTableOrderingComposer, + $BangTableAnnotationComposer, + $BangTableCreateCompanionBuilder, + $BangTableUpdateCompanionBuilder, + (Bang, $BangTableReferences), + Bang, + PrefetchHooks Function({bool bangFrequencyRefs, bool bangHistoryRefs}) + > { $BangTableTableManager(_$BangDatabase db, BangTable table) - : super(TableManagerState( + : super( + TableManagerState( db: db, table: table, - createFilteringComposer: () => - $BangTableFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $BangTableOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $BangTableAnnotationComposer($db: db, $table: table), - updateCompanionCallback: ({ - Value trigger = const Value.absent(), - Value group = const Value.absent(), - Value websiteName = const Value.absent(), - Value domain = const Value.absent(), - Value urlTemplate = const Value.absent(), - Value category = const Value.absent(), - Value subCategory = const Value.absent(), - Value?> format = const Value.absent(), - Value rowid = const Value.absent(), - }) => - BangCompanion( - trigger: trigger, - group: group, - websiteName: websiteName, - domain: domain, - urlTemplate: urlTemplate, - category: category, - subCategory: subCategory, - format: format, - rowid: rowid, - ), - createCompanionCallback: ({ - required String trigger, - required BangGroup group, - required String websiteName, - required String domain, - required String urlTemplate, - Value category = const Value.absent(), - Value subCategory = const Value.absent(), - Value?> format = const Value.absent(), - Value rowid = const Value.absent(), - }) => - BangCompanion.insert( - trigger: trigger, - group: group, - websiteName: websiteName, - domain: domain, - urlTemplate: urlTemplate, - category: category, - subCategory: subCategory, - format: format, - rowid: rowid, - ), - withReferenceMapper: (p0) => p0 - .map((e) => - (e.readTable(table), $BangTableReferences(db, table, e))) - .toList(), - prefetchHooksCallback: ( - {bangFrequencyRefs = false, bangHistoryRefs = false}) { + createFilteringComposer: + () => $BangTableFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $BangTableOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $BangTableAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value trigger = const Value.absent(), + Value group = const Value.absent(), + Value websiteName = const Value.absent(), + Value domain = const Value.absent(), + Value urlTemplate = const Value.absent(), + Value category = const Value.absent(), + Value subCategory = const Value.absent(), + Value?> format = const Value.absent(), + Value rowid = const Value.absent(), + }) => BangCompanion( + trigger: trigger, + group: group, + websiteName: websiteName, + domain: domain, + urlTemplate: urlTemplate, + category: category, + subCategory: subCategory, + format: format, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String trigger, + required BangGroup group, + required String websiteName, + required String domain, + required String urlTemplate, + Value category = const Value.absent(), + Value subCategory = const Value.absent(), + Value?> format = const Value.absent(), + Value rowid = const Value.absent(), + }) => BangCompanion.insert( + trigger: trigger, + group: group, + websiteName: websiteName, + domain: domain, + urlTemplate: urlTemplate, + category: category, + subCategory: subCategory, + format: format, + rowid: rowid, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + $BangTableReferences(db, table, e), + ), + ) + .toList(), + prefetchHooksCallback: ({ + bangFrequencyRefs = false, + bangHistoryRefs = false, + }) { return PrefetchHooks( db: db, explicitlyWatchedTables: [ if (bangFrequencyRefs) db.bangFrequency, - if (bangHistoryRefs) db.bangHistory + if (bangHistoryRefs) db.bangHistory, ], addJoins: null, getPrefetchedDataCallback: (items) async { return [ if (bangFrequencyRefs) - await $_getPrefetchedData( - currentTable: table, - referencedTable: - $BangTableReferences._bangFrequencyRefsTable(db), - managerFromTypedResult: (p0) => - $BangTableReferences(db, table, p0) - .bangFrequencyRefs, - referencedItemsForCurrentItem: - (item, referencedItems) => referencedItems - .where((e) => e.trigger == item.trigger), - typedResults: items), + await $_getPrefetchedData< + Bang, + BangTable, + BangFrequencyData + >( + currentTable: table, + referencedTable: $BangTableReferences + ._bangFrequencyRefsTable(db), + managerFromTypedResult: + (p0) => + $BangTableReferences( + db, + table, + p0, + ).bangFrequencyRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.trigger == item.trigger, + ), + typedResults: items, + ), if (bangHistoryRefs) await $_getPrefetchedData( - currentTable: table, - referencedTable: - $BangTableReferences._bangHistoryRefsTable(db), - managerFromTypedResult: (p0) => - $BangTableReferences(db, table, p0).bangHistoryRefs, - referencedItemsForCurrentItem: - (item, referencedItems) => referencedItems - .where((e) => e.trigger == item.trigger), - typedResults: items) + currentTable: table, + referencedTable: $BangTableReferences + ._bangHistoryRefsTable(db), + managerFromTypedResult: + (p0) => + $BangTableReferences( + db, + table, + p0, + ).bangHistoryRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.trigger == item.trigger, + ), + typedResults: items, + ), ]; }, ); }, - )); + ), + ); } -typedef $BangTableProcessedTableManager = ProcessedTableManager< - _$BangDatabase, - BangTable, - Bang, - $BangTableFilterComposer, - $BangTableOrderingComposer, - $BangTableAnnotationComposer, - $BangTableCreateCompanionBuilder, - $BangTableUpdateCompanionBuilder, - (Bang, $BangTableReferences), - Bang, - PrefetchHooks Function({bool bangFrequencyRefs, bool bangHistoryRefs})>; -typedef $BangSyncCreateCompanionBuilder = BangSyncCompanion Function({ - Value group, - required DateTime lastSync, -}); -typedef $BangSyncUpdateCompanionBuilder = BangSyncCompanion Function({ - Value group, - Value lastSync, -}); +typedef $BangTableProcessedTableManager = + ProcessedTableManager< + _$BangDatabase, + BangTable, + Bang, + $BangTableFilterComposer, + $BangTableOrderingComposer, + $BangTableAnnotationComposer, + $BangTableCreateCompanionBuilder, + $BangTableUpdateCompanionBuilder, + (Bang, $BangTableReferences), + Bang, + PrefetchHooks Function({bool bangFrequencyRefs, bool bangHistoryRefs}) + >; +typedef $BangSyncCreateCompanionBuilder = + BangSyncCompanion Function({ + Value group, + required DateTime lastSync, + }); +typedef $BangSyncUpdateCompanionBuilder = + BangSyncCompanion Function({ + Value group, + Value lastSync, + }); class $BangSyncFilterComposer extends Composer<_$BangDatabase, BangSync> { $BangSyncFilterComposer({ @@ -1614,11 +1891,14 @@ class $BangSyncFilterComposer extends Composer<_$BangDatabase, BangSync> { }); ColumnWithTypeConverterFilters get group => $composableBuilder( - column: $table.group, - builder: (column) => ColumnWithTypeConverterFilters(column)); + column: $table.group, + builder: (column) => ColumnWithTypeConverterFilters(column), + ); ColumnFilters get lastSync => $composableBuilder( - column: $table.lastSync, builder: (column) => ColumnFilters(column)); + column: $table.lastSync, + builder: (column) => ColumnFilters(column), + ); } class $BangSyncOrderingComposer extends Composer<_$BangDatabase, BangSync> { @@ -1630,10 +1910,14 @@ class $BangSyncOrderingComposer extends Composer<_$BangDatabase, BangSync> { super.$removeJoinBuilderFromRootComposer, }); ColumnOrderings get group => $composableBuilder( - column: $table.group, builder: (column) => ColumnOrderings(column)); + column: $table.group, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get lastSync => $composableBuilder( - column: $table.lastSync, builder: (column) => ColumnOrderings(column)); + column: $table.lastSync, + builder: (column) => ColumnOrderings(column), + ); } class $BangSyncAnnotationComposer extends Composer<_$BangDatabase, BangSync> { @@ -1651,92 +1935,109 @@ class $BangSyncAnnotationComposer extends Composer<_$BangDatabase, BangSync> { $composableBuilder(column: $table.lastSync, builder: (column) => column); } -class $BangSyncTableManager extends RootTableManager< - _$BangDatabase, - BangSync, - BangSyncData, - $BangSyncFilterComposer, - $BangSyncOrderingComposer, - $BangSyncAnnotationComposer, - $BangSyncCreateCompanionBuilder, - $BangSyncUpdateCompanionBuilder, - (BangSyncData, BaseReferences<_$BangDatabase, BangSync, BangSyncData>), - BangSyncData, - PrefetchHooks Function()> { +class $BangSyncTableManager + extends + RootTableManager< + _$BangDatabase, + BangSync, + BangSyncData, + $BangSyncFilterComposer, + $BangSyncOrderingComposer, + $BangSyncAnnotationComposer, + $BangSyncCreateCompanionBuilder, + $BangSyncUpdateCompanionBuilder, + ( + BangSyncData, + BaseReferences<_$BangDatabase, BangSync, BangSyncData>, + ), + BangSyncData, + PrefetchHooks Function() + > { $BangSyncTableManager(_$BangDatabase db, BangSync table) - : super(TableManagerState( + : super( + TableManagerState( db: db, table: table, - createFilteringComposer: () => - $BangSyncFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $BangSyncOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $BangSyncAnnotationComposer($db: db, $table: table), - updateCompanionCallback: ({ - Value group = const Value.absent(), - Value lastSync = const Value.absent(), - }) => - BangSyncCompanion( - group: group, - lastSync: lastSync, - ), - createCompanionCallback: ({ - Value group = const Value.absent(), - required DateTime lastSync, - }) => - BangSyncCompanion.insert( - group: group, - lastSync: lastSync, - ), - withReferenceMapper: (p0) => p0 - .map((e) => (e.readTable(table), BaseReferences(db, table, e))) - .toList(), + createFilteringComposer: + () => $BangSyncFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $BangSyncOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $BangSyncAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value group = const Value.absent(), + Value lastSync = const Value.absent(), + }) => BangSyncCompanion(group: group, lastSync: lastSync), + createCompanionCallback: + ({ + Value group = const Value.absent(), + required DateTime lastSync, + }) => BangSyncCompanion.insert(group: group, lastSync: lastSync), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + BaseReferences(db, table, e), + ), + ) + .toList(), prefetchHooksCallback: null, - )); + ), + ); } -typedef $BangSyncProcessedTableManager = ProcessedTableManager< - _$BangDatabase, - BangSync, - BangSyncData, - $BangSyncFilterComposer, - $BangSyncOrderingComposer, - $BangSyncAnnotationComposer, - $BangSyncCreateCompanionBuilder, - $BangSyncUpdateCompanionBuilder, - (BangSyncData, BaseReferences<_$BangDatabase, BangSync, BangSyncData>), - BangSyncData, - PrefetchHooks Function()>; -typedef $BangFrequencyCreateCompanionBuilder = BangFrequencyCompanion Function({ - required String trigger, - required int frequency, - required DateTime lastUsed, - Value rowid, -}); -typedef $BangFrequencyUpdateCompanionBuilder = BangFrequencyCompanion Function({ - Value trigger, - Value frequency, - Value lastUsed, - Value rowid, -}); +typedef $BangSyncProcessedTableManager = + ProcessedTableManager< + _$BangDatabase, + BangSync, + BangSyncData, + $BangSyncFilterComposer, + $BangSyncOrderingComposer, + $BangSyncAnnotationComposer, + $BangSyncCreateCompanionBuilder, + $BangSyncUpdateCompanionBuilder, + (BangSyncData, BaseReferences<_$BangDatabase, BangSync, BangSyncData>), + BangSyncData, + PrefetchHooks Function() + >; +typedef $BangFrequencyCreateCompanionBuilder = + BangFrequencyCompanion Function({ + required String trigger, + required int frequency, + required DateTime lastUsed, + Value rowid, + }); +typedef $BangFrequencyUpdateCompanionBuilder = + BangFrequencyCompanion Function({ + Value trigger, + Value frequency, + Value lastUsed, + Value rowid, + }); final class $BangFrequencyReferences extends BaseReferences<_$BangDatabase, BangFrequency, BangFrequencyData> { $BangFrequencyReferences(super.$_db, super.$_table, super.$_typedResult); static BangTable _triggerTable(_$BangDatabase db) => db.bang.createAlias( - $_aliasNameGenerator(db.bangFrequency.trigger, db.bang.trigger)); + $_aliasNameGenerator(db.bangFrequency.trigger, db.bang.trigger), + ); $BangTableProcessedTableManager get trigger { final $_column = $_itemColumn('trigger')!; - final manager = $BangTableTableManager($_db, $_db.bang) - .filter((f) => f.trigger.sqlEquals($_column)); + final manager = $BangTableTableManager( + $_db, + $_db.bang, + ).filter((f) => f.trigger.sqlEquals($_column)); final item = $_typedResult.readTableOrNull(_triggerTable($_db)); if (item == null) return manager; return ProcessedTableManager( - manager.$state.copyWith(prefetchedData: [item])); + manager.$state.copyWith(prefetchedData: [item]), + ); } } @@ -1750,28 +2051,35 @@ class $BangFrequencyFilterComposer super.$removeJoinBuilderFromRootComposer, }); ColumnFilters get frequency => $composableBuilder( - column: $table.frequency, builder: (column) => ColumnFilters(column)); + column: $table.frequency, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get lastUsed => $composableBuilder( - column: $table.lastUsed, builder: (column) => ColumnFilters(column)); + column: $table.lastUsed, + builder: (column) => ColumnFilters(column), + ); $BangTableFilterComposer get trigger { final $BangTableFilterComposer composer = $composerBuilder( - composer: this, - getCurrentColumn: (t) => t.trigger, - referencedTable: $db.bang, - getReferencedColumn: (t) => t.trigger, - builder: (joinBuilder, - {$addJoinBuilderToRootComposer, - $removeJoinBuilderFromRootComposer}) => - $BangTableFilterComposer( - $db: $db, - $table: $db.bang, - $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, - joinBuilder: joinBuilder, - $removeJoinBuilderFromRootComposer: - $removeJoinBuilderFromRootComposer, - )); + composer: this, + getCurrentColumn: (t) => t.trigger, + referencedTable: $db.bang, + getReferencedColumn: (t) => t.trigger, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $BangTableFilterComposer( + $db: $db, + $table: $db.bang, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); return composer; } } @@ -1786,28 +2094,35 @@ class $BangFrequencyOrderingComposer super.$removeJoinBuilderFromRootComposer, }); ColumnOrderings get frequency => $composableBuilder( - column: $table.frequency, builder: (column) => ColumnOrderings(column)); + column: $table.frequency, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get lastUsed => $composableBuilder( - column: $table.lastUsed, builder: (column) => ColumnOrderings(column)); + column: $table.lastUsed, + builder: (column) => ColumnOrderings(column), + ); $BangTableOrderingComposer get trigger { final $BangTableOrderingComposer composer = $composerBuilder( - composer: this, - getCurrentColumn: (t) => t.trigger, - referencedTable: $db.bang, - getReferencedColumn: (t) => t.trigger, - builder: (joinBuilder, - {$addJoinBuilderToRootComposer, - $removeJoinBuilderFromRootComposer}) => - $BangTableOrderingComposer( - $db: $db, - $table: $db.bang, - $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, - joinBuilder: joinBuilder, - $removeJoinBuilderFromRootComposer: - $removeJoinBuilderFromRootComposer, - )); + composer: this, + getCurrentColumn: (t) => t.trigger, + referencedTable: $db.bang, + getReferencedColumn: (t) => t.trigger, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $BangTableOrderingComposer( + $db: $db, + $table: $db.bang, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); return composer; } } @@ -1829,100 +2144,120 @@ class $BangFrequencyAnnotationComposer $BangTableAnnotationComposer get trigger { final $BangTableAnnotationComposer composer = $composerBuilder( - composer: this, - getCurrentColumn: (t) => t.trigger, - referencedTable: $db.bang, - getReferencedColumn: (t) => t.trigger, - builder: (joinBuilder, - {$addJoinBuilderToRootComposer, - $removeJoinBuilderFromRootComposer}) => - $BangTableAnnotationComposer( - $db: $db, - $table: $db.bang, - $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, - joinBuilder: joinBuilder, - $removeJoinBuilderFromRootComposer: - $removeJoinBuilderFromRootComposer, - )); + composer: this, + getCurrentColumn: (t) => t.trigger, + referencedTable: $db.bang, + getReferencedColumn: (t) => t.trigger, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $BangTableAnnotationComposer( + $db: $db, + $table: $db.bang, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); return composer; } } -class $BangFrequencyTableManager extends RootTableManager< - _$BangDatabase, - BangFrequency, - BangFrequencyData, - $BangFrequencyFilterComposer, - $BangFrequencyOrderingComposer, - $BangFrequencyAnnotationComposer, - $BangFrequencyCreateCompanionBuilder, - $BangFrequencyUpdateCompanionBuilder, - (BangFrequencyData, $BangFrequencyReferences), - BangFrequencyData, - PrefetchHooks Function({bool trigger})> { +class $BangFrequencyTableManager + extends + RootTableManager< + _$BangDatabase, + BangFrequency, + BangFrequencyData, + $BangFrequencyFilterComposer, + $BangFrequencyOrderingComposer, + $BangFrequencyAnnotationComposer, + $BangFrequencyCreateCompanionBuilder, + $BangFrequencyUpdateCompanionBuilder, + (BangFrequencyData, $BangFrequencyReferences), + BangFrequencyData, + PrefetchHooks Function({bool trigger}) + > { $BangFrequencyTableManager(_$BangDatabase db, BangFrequency table) - : super(TableManagerState( + : super( + TableManagerState( db: db, table: table, - createFilteringComposer: () => - $BangFrequencyFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $BangFrequencyOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $BangFrequencyAnnotationComposer($db: db, $table: table), - updateCompanionCallback: ({ - Value trigger = const Value.absent(), - Value frequency = const Value.absent(), - Value lastUsed = const Value.absent(), - Value rowid = const Value.absent(), - }) => - BangFrequencyCompanion( - trigger: trigger, - frequency: frequency, - lastUsed: lastUsed, - rowid: rowid, - ), - createCompanionCallback: ({ - required String trigger, - required int frequency, - required DateTime lastUsed, - Value rowid = const Value.absent(), - }) => - BangFrequencyCompanion.insert( - trigger: trigger, - frequency: frequency, - lastUsed: lastUsed, - rowid: rowid, - ), - withReferenceMapper: (p0) => p0 - .map((e) => - (e.readTable(table), $BangFrequencyReferences(db, table, e))) - .toList(), + createFilteringComposer: + () => $BangFrequencyFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $BangFrequencyOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $BangFrequencyAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value trigger = const Value.absent(), + Value frequency = const Value.absent(), + Value lastUsed = const Value.absent(), + Value rowid = const Value.absent(), + }) => BangFrequencyCompanion( + trigger: trigger, + frequency: frequency, + lastUsed: lastUsed, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String trigger, + required int frequency, + required DateTime lastUsed, + Value rowid = const Value.absent(), + }) => BangFrequencyCompanion.insert( + trigger: trigger, + frequency: frequency, + lastUsed: lastUsed, + rowid: rowid, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + $BangFrequencyReferences(db, table, e), + ), + ) + .toList(), prefetchHooksCallback: ({trigger = false}) { return PrefetchHooks( db: db, explicitlyWatchedTables: [], addJoins: < - T extends TableManagerState< - dynamic, - dynamic, - dynamic, - dynamic, - dynamic, - dynamic, - dynamic, - dynamic, - dynamic, - dynamic, - dynamic>>(state) { + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic + > + >(state) { if (trigger) { - state = state.withJoin( - currentTable: table, - currentColumn: table.trigger, - referencedTable: $BangFrequencyReferences._triggerTable(db), - referencedColumn: - $BangFrequencyReferences._triggerTable(db).trigger, - ) as T; + state = + state.withJoin( + currentTable: table, + currentColumn: table.trigger, + referencedTable: $BangFrequencyReferences + ._triggerTable(db), + referencedColumn: + $BangFrequencyReferences + ._triggerTable(db) + .trigger, + ) + as T; } return state; @@ -1932,50 +2267,59 @@ class $BangFrequencyTableManager extends RootTableManager< }, ); }, - )); + ), + ); } -typedef $BangFrequencyProcessedTableManager = ProcessedTableManager< - _$BangDatabase, - BangFrequency, - BangFrequencyData, - $BangFrequencyFilterComposer, - $BangFrequencyOrderingComposer, - $BangFrequencyAnnotationComposer, - $BangFrequencyCreateCompanionBuilder, - $BangFrequencyUpdateCompanionBuilder, - (BangFrequencyData, $BangFrequencyReferences), - BangFrequencyData, - PrefetchHooks Function({bool trigger})>; -typedef $BangHistoryCreateCompanionBuilder = BangHistoryCompanion Function({ - required String searchQuery, - required String trigger, - required DateTime searchDate, - Value rowid, -}); -typedef $BangHistoryUpdateCompanionBuilder = BangHistoryCompanion Function({ - Value searchQuery, - Value trigger, - Value searchDate, - Value rowid, -}); +typedef $BangFrequencyProcessedTableManager = + ProcessedTableManager< + _$BangDatabase, + BangFrequency, + BangFrequencyData, + $BangFrequencyFilterComposer, + $BangFrequencyOrderingComposer, + $BangFrequencyAnnotationComposer, + $BangFrequencyCreateCompanionBuilder, + $BangFrequencyUpdateCompanionBuilder, + (BangFrequencyData, $BangFrequencyReferences), + BangFrequencyData, + PrefetchHooks Function({bool trigger}) + >; +typedef $BangHistoryCreateCompanionBuilder = + BangHistoryCompanion Function({ + required String searchQuery, + required String trigger, + required DateTime searchDate, + Value rowid, + }); +typedef $BangHistoryUpdateCompanionBuilder = + BangHistoryCompanion Function({ + Value searchQuery, + Value trigger, + Value searchDate, + Value rowid, + }); final class $BangHistoryReferences extends BaseReferences<_$BangDatabase, BangHistory, BangHistoryData> { $BangHistoryReferences(super.$_db, super.$_table, super.$_typedResult); static BangTable _triggerTable(_$BangDatabase db) => db.bang.createAlias( - $_aliasNameGenerator(db.bangHistory.trigger, db.bang.trigger)); + $_aliasNameGenerator(db.bangHistory.trigger, db.bang.trigger), + ); $BangTableProcessedTableManager get trigger { final $_column = $_itemColumn('trigger')!; - final manager = $BangTableTableManager($_db, $_db.bang) - .filter((f) => f.trigger.sqlEquals($_column)); + final manager = $BangTableTableManager( + $_db, + $_db.bang, + ).filter((f) => f.trigger.sqlEquals($_column)); final item = $_typedResult.readTableOrNull(_triggerTable($_db)); if (item == null) return manager; return ProcessedTableManager( - manager.$state.copyWith(prefetchedData: [item])); + manager.$state.copyWith(prefetchedData: [item]), + ); } } @@ -1988,28 +2332,35 @@ class $BangHistoryFilterComposer extends Composer<_$BangDatabase, BangHistory> { super.$removeJoinBuilderFromRootComposer, }); ColumnFilters get searchQuery => $composableBuilder( - column: $table.searchQuery, builder: (column) => ColumnFilters(column)); + column: $table.searchQuery, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get searchDate => $composableBuilder( - column: $table.searchDate, builder: (column) => ColumnFilters(column)); + column: $table.searchDate, + builder: (column) => ColumnFilters(column), + ); $BangTableFilterComposer get trigger { final $BangTableFilterComposer composer = $composerBuilder( - composer: this, - getCurrentColumn: (t) => t.trigger, - referencedTable: $db.bang, - getReferencedColumn: (t) => t.trigger, - builder: (joinBuilder, - {$addJoinBuilderToRootComposer, - $removeJoinBuilderFromRootComposer}) => - $BangTableFilterComposer( - $db: $db, - $table: $db.bang, - $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, - joinBuilder: joinBuilder, - $removeJoinBuilderFromRootComposer: - $removeJoinBuilderFromRootComposer, - )); + composer: this, + getCurrentColumn: (t) => t.trigger, + referencedTable: $db.bang, + getReferencedColumn: (t) => t.trigger, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $BangTableFilterComposer( + $db: $db, + $table: $db.bang, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); return composer; } } @@ -2024,28 +2375,35 @@ class $BangHistoryOrderingComposer super.$removeJoinBuilderFromRootComposer, }); ColumnOrderings get searchQuery => $composableBuilder( - column: $table.searchQuery, builder: (column) => ColumnOrderings(column)); + column: $table.searchQuery, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get searchDate => $composableBuilder( - column: $table.searchDate, builder: (column) => ColumnOrderings(column)); + column: $table.searchDate, + builder: (column) => ColumnOrderings(column), + ); $BangTableOrderingComposer get trigger { final $BangTableOrderingComposer composer = $composerBuilder( - composer: this, - getCurrentColumn: (t) => t.trigger, - referencedTable: $db.bang, - getReferencedColumn: (t) => t.trigger, - builder: (joinBuilder, - {$addJoinBuilderToRootComposer, - $removeJoinBuilderFromRootComposer}) => - $BangTableOrderingComposer( - $db: $db, - $table: $db.bang, - $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, - joinBuilder: joinBuilder, - $removeJoinBuilderFromRootComposer: - $removeJoinBuilderFromRootComposer, - )); + composer: this, + getCurrentColumn: (t) => t.trigger, + referencedTable: $db.bang, + getReferencedColumn: (t) => t.trigger, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $BangTableOrderingComposer( + $db: $db, + $table: $db.bang, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); return composer; } } @@ -2060,107 +2418,131 @@ class $BangHistoryAnnotationComposer super.$removeJoinBuilderFromRootComposer, }); GeneratedColumn get searchQuery => $composableBuilder( - column: $table.searchQuery, builder: (column) => column); + column: $table.searchQuery, + builder: (column) => column, + ); GeneratedColumn get searchDate => $composableBuilder( - column: $table.searchDate, builder: (column) => column); + column: $table.searchDate, + builder: (column) => column, + ); $BangTableAnnotationComposer get trigger { final $BangTableAnnotationComposer composer = $composerBuilder( - composer: this, - getCurrentColumn: (t) => t.trigger, - referencedTable: $db.bang, - getReferencedColumn: (t) => t.trigger, - builder: (joinBuilder, - {$addJoinBuilderToRootComposer, - $removeJoinBuilderFromRootComposer}) => - $BangTableAnnotationComposer( - $db: $db, - $table: $db.bang, - $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, - joinBuilder: joinBuilder, - $removeJoinBuilderFromRootComposer: - $removeJoinBuilderFromRootComposer, - )); + composer: this, + getCurrentColumn: (t) => t.trigger, + referencedTable: $db.bang, + getReferencedColumn: (t) => t.trigger, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $BangTableAnnotationComposer( + $db: $db, + $table: $db.bang, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); return composer; } } -class $BangHistoryTableManager extends RootTableManager< - _$BangDatabase, - BangHistory, - BangHistoryData, - $BangHistoryFilterComposer, - $BangHistoryOrderingComposer, - $BangHistoryAnnotationComposer, - $BangHistoryCreateCompanionBuilder, - $BangHistoryUpdateCompanionBuilder, - (BangHistoryData, $BangHistoryReferences), - BangHistoryData, - PrefetchHooks Function({bool trigger})> { +class $BangHistoryTableManager + extends + RootTableManager< + _$BangDatabase, + BangHistory, + BangHistoryData, + $BangHistoryFilterComposer, + $BangHistoryOrderingComposer, + $BangHistoryAnnotationComposer, + $BangHistoryCreateCompanionBuilder, + $BangHistoryUpdateCompanionBuilder, + (BangHistoryData, $BangHistoryReferences), + BangHistoryData, + PrefetchHooks Function({bool trigger}) + > { $BangHistoryTableManager(_$BangDatabase db, BangHistory table) - : super(TableManagerState( + : super( + TableManagerState( db: db, table: table, - createFilteringComposer: () => - $BangHistoryFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $BangHistoryOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $BangHistoryAnnotationComposer($db: db, $table: table), - updateCompanionCallback: ({ - Value searchQuery = const Value.absent(), - Value trigger = const Value.absent(), - Value searchDate = const Value.absent(), - Value rowid = const Value.absent(), - }) => - BangHistoryCompanion( - searchQuery: searchQuery, - trigger: trigger, - searchDate: searchDate, - rowid: rowid, - ), - createCompanionCallback: ({ - required String searchQuery, - required String trigger, - required DateTime searchDate, - Value rowid = const Value.absent(), - }) => - BangHistoryCompanion.insert( - searchQuery: searchQuery, - trigger: trigger, - searchDate: searchDate, - rowid: rowid, - ), - withReferenceMapper: (p0) => p0 - .map((e) => - (e.readTable(table), $BangHistoryReferences(db, table, e))) - .toList(), + createFilteringComposer: + () => $BangHistoryFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $BangHistoryOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $BangHistoryAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value searchQuery = const Value.absent(), + Value trigger = const Value.absent(), + Value searchDate = const Value.absent(), + Value rowid = const Value.absent(), + }) => BangHistoryCompanion( + searchQuery: searchQuery, + trigger: trigger, + searchDate: searchDate, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String searchQuery, + required String trigger, + required DateTime searchDate, + Value rowid = const Value.absent(), + }) => BangHistoryCompanion.insert( + searchQuery: searchQuery, + trigger: trigger, + searchDate: searchDate, + rowid: rowid, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + $BangHistoryReferences(db, table, e), + ), + ) + .toList(), prefetchHooksCallback: ({trigger = false}) { return PrefetchHooks( db: db, explicitlyWatchedTables: [], addJoins: < - T extends TableManagerState< - dynamic, - dynamic, - dynamic, - dynamic, - dynamic, - dynamic, - dynamic, - dynamic, - dynamic, - dynamic, - dynamic>>(state) { + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic + > + >(state) { if (trigger) { - state = state.withJoin( - currentTable: table, - currentColumn: table.trigger, - referencedTable: $BangHistoryReferences._triggerTable(db), - referencedColumn: - $BangHistoryReferences._triggerTable(db).trigger, - ) as T; + state = + state.withJoin( + currentTable: table, + currentColumn: table.trigger, + referencedTable: $BangHistoryReferences + ._triggerTable(db), + referencedColumn: + $BangHistoryReferences + ._triggerTable(db) + .trigger, + ) + as T; } return state; @@ -2170,31 +2552,36 @@ class $BangHistoryTableManager extends RootTableManager< }, ); }, - )); + ), + ); } -typedef $BangHistoryProcessedTableManager = ProcessedTableManager< - _$BangDatabase, - BangHistory, - BangHistoryData, - $BangHistoryFilterComposer, - $BangHistoryOrderingComposer, - $BangHistoryAnnotationComposer, - $BangHistoryCreateCompanionBuilder, - $BangHistoryUpdateCompanionBuilder, - (BangHistoryData, $BangHistoryReferences), - BangHistoryData, - PrefetchHooks Function({bool trigger})>; -typedef $BangFtsCreateCompanionBuilder = BangFtsCompanion Function({ - required String trigger, - required String websiteName, - Value rowid, -}); -typedef $BangFtsUpdateCompanionBuilder = BangFtsCompanion Function({ - Value trigger, - Value websiteName, - Value rowid, -}); +typedef $BangHistoryProcessedTableManager = + ProcessedTableManager< + _$BangDatabase, + BangHistory, + BangHistoryData, + $BangHistoryFilterComposer, + $BangHistoryOrderingComposer, + $BangHistoryAnnotationComposer, + $BangHistoryCreateCompanionBuilder, + $BangHistoryUpdateCompanionBuilder, + (BangHistoryData, $BangHistoryReferences), + BangHistoryData, + PrefetchHooks Function({bool trigger}) + >; +typedef $BangFtsCreateCompanionBuilder = + BangFtsCompanion Function({ + required String trigger, + required String websiteName, + Value rowid, + }); +typedef $BangFtsUpdateCompanionBuilder = + BangFtsCompanion Function({ + Value trigger, + Value websiteName, + Value rowid, + }); class $BangFtsFilterComposer extends Composer<_$BangDatabase, BangFts> { $BangFtsFilterComposer({ @@ -2205,10 +2592,14 @@ class $BangFtsFilterComposer extends Composer<_$BangDatabase, BangFts> { super.$removeJoinBuilderFromRootComposer, }); ColumnFilters get trigger => $composableBuilder( - column: $table.trigger, builder: (column) => ColumnFilters(column)); + column: $table.trigger, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get websiteName => $composableBuilder( - column: $table.websiteName, builder: (column) => ColumnFilters(column)); + column: $table.websiteName, + builder: (column) => ColumnFilters(column), + ); } class $BangFtsOrderingComposer extends Composer<_$BangDatabase, BangFts> { @@ -2220,10 +2611,14 @@ class $BangFtsOrderingComposer extends Composer<_$BangDatabase, BangFts> { super.$removeJoinBuilderFromRootComposer, }); ColumnOrderings get trigger => $composableBuilder( - column: $table.trigger, builder: (column) => ColumnOrderings(column)); + column: $table.trigger, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get websiteName => $composableBuilder( - column: $table.websiteName, builder: (column) => ColumnOrderings(column)); + column: $table.websiteName, + builder: (column) => ColumnOrderings(column), + ); } class $BangFtsAnnotationComposer extends Composer<_$BangDatabase, BangFts> { @@ -2238,70 +2633,86 @@ class $BangFtsAnnotationComposer extends Composer<_$BangDatabase, BangFts> { $composableBuilder(column: $table.trigger, builder: (column) => column); GeneratedColumn get websiteName => $composableBuilder( - column: $table.websiteName, builder: (column) => column); + column: $table.websiteName, + builder: (column) => column, + ); } -class $BangFtsTableManager extends RootTableManager< - _$BangDatabase, - BangFts, - BangFt, - $BangFtsFilterComposer, - $BangFtsOrderingComposer, - $BangFtsAnnotationComposer, - $BangFtsCreateCompanionBuilder, - $BangFtsUpdateCompanionBuilder, - (BangFt, BaseReferences<_$BangDatabase, BangFts, BangFt>), - BangFt, - PrefetchHooks Function()> { +class $BangFtsTableManager + extends + RootTableManager< + _$BangDatabase, + BangFts, + BangFt, + $BangFtsFilterComposer, + $BangFtsOrderingComposer, + $BangFtsAnnotationComposer, + $BangFtsCreateCompanionBuilder, + $BangFtsUpdateCompanionBuilder, + (BangFt, BaseReferences<_$BangDatabase, BangFts, BangFt>), + BangFt, + PrefetchHooks Function() + > { $BangFtsTableManager(_$BangDatabase db, BangFts table) - : super(TableManagerState( + : super( + TableManagerState( db: db, table: table, - createFilteringComposer: () => - $BangFtsFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $BangFtsOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $BangFtsAnnotationComposer($db: db, $table: table), - updateCompanionCallback: ({ - Value trigger = const Value.absent(), - Value websiteName = const Value.absent(), - Value rowid = const Value.absent(), - }) => - BangFtsCompanion( - trigger: trigger, - websiteName: websiteName, - rowid: rowid, - ), - createCompanionCallback: ({ - required String trigger, - required String websiteName, - Value rowid = const Value.absent(), - }) => - BangFtsCompanion.insert( - trigger: trigger, - websiteName: websiteName, - rowid: rowid, - ), - withReferenceMapper: (p0) => p0 - .map((e) => (e.readTable(table), BaseReferences(db, table, e))) - .toList(), + createFilteringComposer: + () => $BangFtsFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $BangFtsOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $BangFtsAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value trigger = const Value.absent(), + Value websiteName = const Value.absent(), + Value rowid = const Value.absent(), + }) => BangFtsCompanion( + trigger: trigger, + websiteName: websiteName, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String trigger, + required String websiteName, + Value rowid = const Value.absent(), + }) => BangFtsCompanion.insert( + trigger: trigger, + websiteName: websiteName, + rowid: rowid, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + BaseReferences(db, table, e), + ), + ) + .toList(), prefetchHooksCallback: null, - )); + ), + ); } -typedef $BangFtsProcessedTableManager = ProcessedTableManager< - _$BangDatabase, - BangFts, - BangFt, - $BangFtsFilterComposer, - $BangFtsOrderingComposer, - $BangFtsAnnotationComposer, - $BangFtsCreateCompanionBuilder, - $BangFtsUpdateCompanionBuilder, - (BangFt, BaseReferences<_$BangDatabase, BangFts, BangFt>), - BangFt, - PrefetchHooks Function()>; +typedef $BangFtsProcessedTableManager = + ProcessedTableManager< + _$BangDatabase, + BangFts, + BangFt, + $BangFtsFilterComposer, + $BangFtsOrderingComposer, + $BangFtsAnnotationComposer, + $BangFtsCreateCompanionBuilder, + $BangFtsUpdateCompanionBuilder, + (BangFt, BaseReferences<_$BangDatabase, BangFts, BangFt>), + BangFt, + PrefetchHooks Function() + >; class $BangDatabaseManager { final _$BangDatabase _db; diff --git a/app/lib/features/bangs/data/models/bang.g.dart b/app/lib/features/bangs/data/models/bang.g.dart index 228b0546..3b8c0e7e 100644 --- a/app/lib/features/bangs/data/models/bang.g.dart +++ b/app/lib/features/bangs/data/models/bang.g.dart @@ -72,7 +72,6 @@ class _$BangCWProxyImpl implements _$BangCWProxy { Bang format(Set? format) => this(format: format); @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. /// /// Usage @@ -90,38 +89,46 @@ class _$BangCWProxyImpl implements _$BangCWProxy { Object? format = const $CopyWithPlaceholder(), }) { return Bang( - websiteName: websiteName == const $CopyWithPlaceholder() - ? _value.websiteName - // ignore: cast_nullable_to_non_nullable - : websiteName as String, - domain: domain == const $CopyWithPlaceholder() - ? _value.domain - // ignore: cast_nullable_to_non_nullable - : domain as String, - trigger: trigger == const $CopyWithPlaceholder() - ? _value.trigger - // ignore: cast_nullable_to_non_nullable - : trigger as String, - urlTemplate: urlTemplate == const $CopyWithPlaceholder() - ? _value.urlTemplate - // ignore: cast_nullable_to_non_nullable - : urlTemplate as String, - group: group == const $CopyWithPlaceholder() - ? _value.group - // ignore: cast_nullable_to_non_nullable - : group as BangGroup?, - category: category == const $CopyWithPlaceholder() - ? _value.category - // ignore: cast_nullable_to_non_nullable - : category as String?, - subCategory: 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?, + websiteName: + websiteName == const $CopyWithPlaceholder() + ? _value.websiteName + // ignore: cast_nullable_to_non_nullable + : websiteName as String, + domain: + domain == const $CopyWithPlaceholder() + ? _value.domain + // ignore: cast_nullable_to_non_nullable + : domain as String, + trigger: + trigger == const $CopyWithPlaceholder() + ? _value.trigger + // ignore: cast_nullable_to_non_nullable + : trigger as String, + urlTemplate: + urlTemplate == const $CopyWithPlaceholder() + ? _value.urlTemplate + // ignore: cast_nullable_to_non_nullable + : urlTemplate as String, + group: + group == const $CopyWithPlaceholder() + ? _value.group + // ignore: cast_nullable_to_non_nullable + : group as BangGroup?, + category: + category == const $CopyWithPlaceholder() + ? _value.category + // ignore: cast_nullable_to_non_nullable + : category as String?, + subCategory: + 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?, ); } } @@ -137,26 +144,27 @@ extension $BangCopyWith on Bang { // ************************************************************************** Bang _$BangFromJson(Map json) => Bang( - websiteName: json['s'] as String, - domain: json['d'] as String, - trigger: json['t'] as String, - urlTemplate: json['u'] as String, - category: json['c'] as String?, - subCategory: json['sc'] as String?, - format: (json['fmt'] as List?) + websiteName: json['s'] as String, + domain: json['d'] as String, + trigger: json['t'] as String, + urlTemplate: json['u'] as String, + category: json['c'] as String?, + subCategory: json['sc'] as String?, + format: + (json['fmt'] as List?) ?.map((e) => $enumDecode(_$BangFormatEnumMap, e)) .toSet(), - ); +); Map _$BangToJson(Bang instance) => { - 's': instance.websiteName, - 'd': instance.domain, - 't': instance.trigger, - 'u': instance.urlTemplate, - 'c': instance.category, - 'sc': instance.subCategory, - 'fmt': instance.format?.map((e) => _$BangFormatEnumMap[e]!).toList(), - }; + 's': instance.websiteName, + 'd': instance.domain, + 't': instance.trigger, + 'u': instance.urlTemplate, + 'c': instance.category, + 'sc': instance.subCategory, + 'fmt': instance.format?.map((e) => _$BangFormatEnumMap[e]!).toList(), +}; const _$BangFormatEnumMap = { BangFormat.openBasePath: 'open_base_path', diff --git a/app/lib/features/bangs/data/models/bang_data.g.dart b/app/lib/features/bangs/data/models/bang_data.g.dart index 1f5997ff..cdd80e84 100644 --- a/app/lib/features/bangs/data/models/bang_data.g.dart +++ b/app/lib/features/bangs/data/models/bang_data.g.dart @@ -84,7 +84,6 @@ class _$BangDataCWProxyImpl implements _$BangDataCWProxy { BangData icon(BrowserIcon? icon) => this(icon: icon); @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. /// /// Usage @@ -104,46 +103,56 @@ class _$BangDataCWProxyImpl implements _$BangDataCWProxy { Object? icon = const $CopyWithPlaceholder(), }) { return BangData( - websiteName: websiteName == const $CopyWithPlaceholder() - ? _value.websiteName - // ignore: cast_nullable_to_non_nullable - : websiteName as String, - domain: domain == const $CopyWithPlaceholder() - ? _value.domain - // ignore: cast_nullable_to_non_nullable - : domain as String, - trigger: trigger == const $CopyWithPlaceholder() - ? _value.trigger - // ignore: cast_nullable_to_non_nullable - : trigger as String, - urlTemplate: urlTemplate == const $CopyWithPlaceholder() - ? _value.urlTemplate - // ignore: cast_nullable_to_non_nullable - : urlTemplate as String, - category: category == const $CopyWithPlaceholder() - ? _value.category - // ignore: cast_nullable_to_non_nullable - : category as String?, - subCategory: 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?, - frequency: frequency == const $CopyWithPlaceholder() - ? _value.frequency - // ignore: cast_nullable_to_non_nullable - : 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?, + websiteName: + websiteName == const $CopyWithPlaceholder() + ? _value.websiteName + // ignore: cast_nullable_to_non_nullable + : websiteName as String, + domain: + domain == const $CopyWithPlaceholder() + ? _value.domain + // ignore: cast_nullable_to_non_nullable + : domain as String, + trigger: + trigger == const $CopyWithPlaceholder() + ? _value.trigger + // ignore: cast_nullable_to_non_nullable + : trigger as String, + urlTemplate: + urlTemplate == const $CopyWithPlaceholder() + ? _value.urlTemplate + // ignore: cast_nullable_to_non_nullable + : urlTemplate as String, + category: + category == const $CopyWithPlaceholder() + ? _value.category + // ignore: cast_nullable_to_non_nullable + : category as String?, + subCategory: + 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?, + frequency: + frequency == const $CopyWithPlaceholder() + ? _value.frequency + // ignore: cast_nullable_to_non_nullable + : 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?, ); } } diff --git a/app/lib/features/bangs/data/services/data_source.dart b/app/lib/features/bangs/data/services/data_source.dart index 349f3614..a78bac41 100644 --- a/app/lib/features/bangs/data/services/data_source.dart +++ b/app/lib/features/bangs/data/services/data_source.dart @@ -15,7 +15,7 @@ class BangDataSourceService extends _$BangDataSourceService { @override void build() {} - Future>> getBangs(Uri url, BangGroup? group) async { + Future>> getBangs(Uri url, BangGroup? group) { return Result.fromAsync(() async { return await compute((args) async { final client = http.Client(); diff --git a/app/lib/features/bangs/data/services/data_source.g.dart b/app/lib/features/bangs/data/services/data_source.g.dart index f2c45f22..1ccf94d8 100644 --- a/app/lib/features/bangs/data/services/data_source.g.dart +++ b/app/lib/features/bangs/data/services/data_source.g.dart @@ -7,20 +7,21 @@ part of 'data_source.dart'; // ************************************************************************** String _$bangDataSourceServiceHash() => - r'28b774af3338e3e949ccd0f04205ccd4a7fe67a5'; + r'f802b9fb3c467a24d65d170229d37f745ae869e5'; /// See also [BangDataSourceService]. @ProviderFor(BangDataSourceService) final bangDataSourceServiceProvider = AutoDisposeNotifierProvider.internal( - BangDataSourceService.new, - name: r'bangDataSourceServiceProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$bangDataSourceServiceHash, - dependencies: null, - allTransitiveDependencies: null, -); + BangDataSourceService.new, + name: r'bangDataSourceServiceProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$bangDataSourceServiceHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$BangDataSourceService = AutoDisposeNotifier; // ignore_for_file: type=lint diff --git a/app/lib/features/bangs/domain/providers/bangs.g.dart b/app/lib/features/bangs/domain/providers/bangs.g.dart index 81f14400..6c09bcf0 100644 --- a/app/lib/features/bangs/domain/providers/bangs.g.dart +++ b/app/lib/features/bangs/domain/providers/bangs.g.dart @@ -14,9 +14,10 @@ String _$defaultSearchBangDataHash() => final defaultSearchBangDataProvider = StreamProvider.internal( defaultSearchBangData, name: r'defaultSearchBangDataProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$defaultSearchBangDataHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$defaultSearchBangDataHash, dependencies: null, allTransitiveDependencies: null, ); @@ -30,19 +31,20 @@ String _$bangCategoriesHash() => r'947fcfd2dffcc7f585c6ed7379d319f4fe72293a'; @ProviderFor(bangCategories) final bangCategoriesProvider = AutoDisposeStreamProvider>>.internal( - bangCategories, - name: r'bangCategoriesProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$bangCategoriesHash, - dependencies: null, - allTransitiveDependencies: null, -); + bangCategories, + name: r'bangCategoriesProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$bangCategoriesHash, + dependencies: null, + allTransitiveDependencies: null, + ); @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element -typedef BangCategoriesRef - = AutoDisposeStreamProviderRef>>; +typedef BangCategoriesRef = + AutoDisposeStreamProviderRef>>; String _$bangListHash() => r'dc168bd1246bea3e5f8015dd52fbf41c5f98ca13'; /// Copied from Dart SDK @@ -91,9 +93,7 @@ class BangListFamily extends Family>> { } @override - BangListProvider getProviderOverride( - covariant BangListProvider provider, - ) { + BangListProvider getProviderOverride(covariant BangListProvider provider) { return call( groups: provider.groups, domain: provider.domain, @@ -126,26 +126,26 @@ class BangListProvider extends AutoDisposeStreamProvider> { ({String category, String? subCategory})? categoryFilter, bool? orderMostFrequentFirst, }) : this._internal( - (ref) => bangList( - ref as BangListRef, - groups: groups, - domain: domain, - categoryFilter: categoryFilter, - orderMostFrequentFirst: orderMostFrequentFirst, - ), - from: bangListProvider, - name: r'bangListProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$bangListHash, - dependencies: BangListFamily._dependencies, - allTransitiveDependencies: BangListFamily._allTransitiveDependencies, - groups: groups, - domain: domain, - categoryFilter: categoryFilter, - orderMostFrequentFirst: orderMostFrequentFirst, - ); + (ref) => bangList( + ref as BangListRef, + groups: groups, + domain: domain, + categoryFilter: categoryFilter, + orderMostFrequentFirst: orderMostFrequentFirst, + ), + from: bangListProvider, + name: r'bangListProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$bangListHash, + dependencies: BangListFamily._dependencies, + allTransitiveDependencies: BangListFamily._allTransitiveDependencies, + groups: groups, + domain: domain, + categoryFilter: categoryFilter, + orderMostFrequentFirst: orderMostFrequentFirst, + ); BangListProvider._internal( super._createNotifier, { @@ -229,7 +229,8 @@ mixin BangListRef on AutoDisposeStreamProviderRef> { } class _BangListProviderElement - extends AutoDisposeStreamProviderElement> with BangListRef { + extends AutoDisposeStreamProviderElement> + with BangListRef { _BangListProviderElement(super.provider); @override @@ -250,14 +251,15 @@ String _$frequentBangListHash() => r'2c1ecb7e9416772fc1c32d01d767e1eb4f865975'; @ProviderFor(frequentBangList) final frequentBangListProvider = AutoDisposeStreamProvider>.internal( - frequentBangList, - name: r'frequentBangListProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$frequentBangListHash, - dependencies: null, - allTransitiveDependencies: null, -); + frequentBangList, + name: r'frequentBangListProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$frequentBangListHash, + dependencies: null, + allTransitiveDependencies: null, + ); @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element @@ -268,19 +270,20 @@ String _$searchHistoryHash() => r'7b97798729643de8e44fd8024cdc02f35124b08b'; @ProviderFor(searchHistory) final searchHistoryProvider = AutoDisposeStreamProvider>.internal( - searchHistory, - name: r'searchHistoryProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$searchHistoryHash, - dependencies: null, - allTransitiveDependencies: null, -); + searchHistory, + name: r'searchHistoryProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$searchHistoryHash, + dependencies: null, + allTransitiveDependencies: null, + ); @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element -typedef SearchHistoryRef - = AutoDisposeStreamProviderRef>; +typedef SearchHistoryRef = + AutoDisposeStreamProviderRef>; String _$lastSyncOfGroupHash() => r'23d07f3132ba9bb35a31f74e3a69698d31d4c569'; /// See also [lastSyncOfGroup]. @@ -293,21 +296,15 @@ class LastSyncOfGroupFamily extends Family> { const LastSyncOfGroupFamily(); /// See also [lastSyncOfGroup]. - LastSyncOfGroupProvider call( - BangGroup group, - ) { - return LastSyncOfGroupProvider( - group, - ); + LastSyncOfGroupProvider call(BangGroup group) { + return LastSyncOfGroupProvider(group); } @override LastSyncOfGroupProvider getProviderOverride( covariant LastSyncOfGroupProvider provider, ) { - return call( - provider.group, - ); + return call(provider.group); } static const Iterable? _dependencies = null; @@ -328,24 +325,20 @@ class LastSyncOfGroupFamily extends Family> { /// See also [lastSyncOfGroup]. class LastSyncOfGroupProvider extends AutoDisposeStreamProvider { /// See also [lastSyncOfGroup]. - LastSyncOfGroupProvider( - BangGroup group, - ) : this._internal( - (ref) => lastSyncOfGroup( - ref as LastSyncOfGroupRef, - group, - ), - from: lastSyncOfGroupProvider, - name: r'lastSyncOfGroupProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$lastSyncOfGroupHash, - dependencies: LastSyncOfGroupFamily._dependencies, - allTransitiveDependencies: - LastSyncOfGroupFamily._allTransitiveDependencies, - group: group, - ); + LastSyncOfGroupProvider(BangGroup group) + : this._internal( + (ref) => lastSyncOfGroup(ref as LastSyncOfGroupRef, group), + from: lastSyncOfGroupProvider, + name: r'lastSyncOfGroupProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$lastSyncOfGroupHash, + dependencies: LastSyncOfGroupFamily._dependencies, + allTransitiveDependencies: + LastSyncOfGroupFamily._allTransitiveDependencies, + group: group, + ); LastSyncOfGroupProvider._internal( super._createNotifier, { @@ -424,21 +417,15 @@ class BangCountOfGroupFamily extends Family> { const BangCountOfGroupFamily(); /// See also [bangCountOfGroup]. - BangCountOfGroupProvider call( - BangGroup group, - ) { - return BangCountOfGroupProvider( - group, - ); + BangCountOfGroupProvider call(BangGroup group) { + return BangCountOfGroupProvider(group); } @override BangCountOfGroupProvider getProviderOverride( covariant BangCountOfGroupProvider provider, ) { - return call( - provider.group, - ); + return call(provider.group); } static const Iterable? _dependencies = null; @@ -459,24 +446,20 @@ class BangCountOfGroupFamily extends Family> { /// See also [bangCountOfGroup]. class BangCountOfGroupProvider extends AutoDisposeStreamProvider { /// See also [bangCountOfGroup]. - BangCountOfGroupProvider( - BangGroup group, - ) : this._internal( - (ref) => bangCountOfGroup( - ref as BangCountOfGroupRef, - group, - ), - from: bangCountOfGroupProvider, - name: r'bangCountOfGroupProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$bangCountOfGroupHash, - dependencies: BangCountOfGroupFamily._dependencies, - allTransitiveDependencies: - BangCountOfGroupFamily._allTransitiveDependencies, - group: group, - ); + BangCountOfGroupProvider(BangGroup group) + : this._internal( + (ref) => bangCountOfGroup(ref as BangCountOfGroupRef, group), + from: bangCountOfGroupProvider, + name: r'bangCountOfGroupProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$bangCountOfGroupHash, + dependencies: BangCountOfGroupFamily._dependencies, + allTransitiveDependencies: + BangCountOfGroupFamily._allTransitiveDependencies, + group: group, + ); BangCountOfGroupProvider._internal( super._createNotifier, { @@ -535,11 +518,13 @@ mixin BangCountOfGroupRef on AutoDisposeStreamProviderRef { } class _BangCountOfGroupProviderElement - extends AutoDisposeStreamProviderElement with BangCountOfGroupRef { + extends AutoDisposeStreamProviderElement + with BangCountOfGroupRef { _BangCountOfGroupProviderElement(super.provider); @override BangGroup get group => (origin as BangCountOfGroupProvider).group; } + // 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 diff --git a/app/lib/features/bangs/domain/providers/search.dart b/app/lib/features/bangs/domain/providers/search.dart index 705b696f..6c2e9c36 100644 --- a/app/lib/features/bangs/domain/providers/search.dart +++ b/app/lib/features/bangs/domain/providers/search.dart @@ -1,4 +1,8 @@ +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:lensai/features/bangs/domain/repositories/data.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; @@ -6,6 +10,8 @@ part 'search.g.dart'; @Riverpod() class BangSearch extends _$BangSearch { + late StreamController> _streamController; + Future triggerBangSearch(BangData bang, String searchQuery) async { final bangDataNotifier = ref.read(bangDataRepositoryProvider.notifier); @@ -19,6 +25,52 @@ class BangSearch extends _$BangSearch { return bang.getUrl(searchQuery); } + Future search(String input) async { + if (input.isNotEmpty) { + await ref.read(bangDatabaseProvider).bangDao.queryBangs(input).get().then( + (value) { + if (!_streamController.isClosed) { + _streamController.add(value); + } + }, + ); + } + } + @override - void build() {} + Stream> 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> build() { + return _hasSearch + ? ref.watch(bangSearchProvider) + : ref.watch(frequentBangListProvider); + } } diff --git a/app/lib/features/bangs/domain/providers/search.g.dart b/app/lib/features/bangs/domain/providers/search.g.dart index 085e0008..21fadbf3 100644 --- a/app/lib/features/bangs/domain/providers/search.g.dart +++ b/app/lib/features/bangs/domain/providers/search.g.dart @@ -6,20 +6,43 @@ part of 'search.dart'; // RiverpodGenerator // ************************************************************************** -String _$bangSearchHash() => r'a9bc5efc6e0df7b64bb648623f65911373a8e8e4'; +String _$bangSearchHash() => r'ff7035d269041c6415f2a2afb0a71ef67d3b9841'; /// See also [BangSearch]. @ProviderFor(BangSearch) final bangSearchProvider = - AutoDisposeNotifierProvider.internal( - BangSearch.new, - name: r'bangSearchProvider', + AutoDisposeStreamNotifierProvider>.internal( + BangSearch.new, + name: r'bangSearchProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$bangSearchHash, + dependencies: null, + allTransitiveDependencies: null, + ); + +typedef _$BangSearch = AutoDisposeStreamNotifier>; +String _$seamlessBangProviderHash() => + r'c4c0b452c94ba447be5b02dfef5bc16148cc3dc7'; + +/// See also [SeamlessBangProvider]. +@ProviderFor(SeamlessBangProvider) +final seamlessBangProviderProvider = AutoDisposeNotifierProvider< + SeamlessBangProvider, + AsyncValue> +>.internal( + SeamlessBangProvider.new, + name: r'seamlessBangProviderProvider', debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$bangSearchHash, + const bool.fromEnvironment('dart.vm.product') + ? null + : _$seamlessBangProviderHash, dependencies: null, allTransitiveDependencies: null, ); -typedef _$BangSearch = AutoDisposeNotifier; +typedef _$SeamlessBangProvider = + AutoDisposeNotifier>>; // 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 diff --git a/app/lib/features/bangs/domain/repositories/data.g.dart b/app/lib/features/bangs/domain/repositories/data.g.dart index 7c23dec8..7b34d275 100644 --- a/app/lib/features/bangs/domain/repositories/data.g.dart +++ b/app/lib/features/bangs/domain/repositories/data.g.dart @@ -13,14 +13,15 @@ String _$bangDataRepositoryHash() => @ProviderFor(BangDataRepository) final bangDataRepositoryProvider = NotifierProvider.internal( - BangDataRepository.new, - name: r'bangDataRepositoryProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$bangDataRepositoryHash, - dependencies: null, - allTransitiveDependencies: null, -); + BangDataRepository.new, + name: r'bangDataRepositoryProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$bangDataRepositoryHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$BangDataRepository = Notifier; // ignore_for_file: type=lint diff --git a/app/lib/features/bangs/domain/repositories/search.dart b/app/lib/features/bangs/domain/repositories/search.dart deleted file mode 100644 index 3a4a7769..00000000 --- a/app/lib/features/bangs/domain/repositories/search.dart +++ /dev/null @@ -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> _streamController; - - Future 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> 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> build() { - return _hasSearch - ? ref.watch(bangSearchProvider) - : ref.watch(frequentBangListProvider); - } -} diff --git a/app/lib/features/bangs/domain/repositories/search.g.dart b/app/lib/features/bangs/domain/repositories/search.g.dart deleted file mode 100644 index a0ba15b3..00000000 --- a/app/lib/features/bangs/domain/repositories/search.g.dart +++ /dev/null @@ -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>.internal( - BangSearch.new, - name: r'bangSearchProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$bangSearchHash, - dependencies: null, - allTransitiveDependencies: null, -); - -typedef _$BangSearch = AutoDisposeStreamNotifier>; -String _$seamlessBangProviderHash() => - r'c4c0b452c94ba447be5b02dfef5bc16148cc3dc7'; - -/// See also [SeamlessBangProvider]. -@ProviderFor(SeamlessBangProvider) -final seamlessBangProviderProvider = AutoDisposeNotifierProvider< - SeamlessBangProvider, AsyncValue>>.internal( - SeamlessBangProvider.new, - name: r'seamlessBangProviderProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$seamlessBangProviderHash, - dependencies: null, - allTransitiveDependencies: null, -); - -typedef _$SeamlessBangProvider - = AutoDisposeNotifier>>; -// 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 diff --git a/app/lib/features/bangs/domain/repositories/sync.g.dart b/app/lib/features/bangs/domain/repositories/sync.g.dart index 1f4f6057..ce271fb7 100644 --- a/app/lib/features/bangs/domain/repositories/sync.g.dart +++ b/app/lib/features/bangs/domain/repositories/sync.g.dart @@ -13,14 +13,15 @@ String _$bangSyncRepositoryHash() => @ProviderFor(BangSyncRepository) final bangSyncRepositoryProvider = NotifierProvider.internal( - BangSyncRepository.new, - name: r'bangSyncRepositoryProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$bangSyncRepositoryHash, - dependencies: null, - allTransitiveDependencies: null, -); + BangSyncRepository.new, + name: r'bangSyncRepositoryProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$bangSyncRepositoryHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$BangSyncRepository = Notifier; // ignore_for_file: type=lint diff --git a/app/lib/features/bangs/presentation/screens/search.dart b/app/lib/features/bangs/presentation/screens/search.dart index ccb6eba2..f495bf3e 100644 --- a/app/lib/features/bangs/presentation/screens/search.dart +++ b/app/lib/features/bangs/presentation/screens/search.dart @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; -import 'package:lensai/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/geckoview/features/browser/domain/providers.dart'; import 'package:lensai/features/user/domain/providers.dart'; @@ -26,7 +26,7 @@ class BangSearchScreen extends HookConsumerWidget { text: initialSearchText, ); - useListenableCallback(textEditingController, () async { + useListenableCallback(textEditingController, () { unawaited( ref .read(bangSearchProvider.notifier) diff --git a/app/lib/features/bangs/presentation/widgets/bang_details.dart b/app/lib/features/bangs/presentation/widgets/bang_details.dart index c977de94..451b557e 100644 --- a/app/lib/features/bangs/presentation/widgets/bang_details.dart +++ b/app/lib/features/bangs/presentation/widgets/bang_details.dart @@ -4,7 +4,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:lensai/core/routing/routes.dart'; import 'package:lensai/features/bangs/data/models/bang_data.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 { final BangData bangData; diff --git a/app/lib/features/bangs/presentation/widgets/site_search.dart b/app/lib/features/bangs/presentation/widgets/site_search.dart index 1a0554e4..782cc705 100644 --- a/app/lib/features/bangs/presentation/widgets/site_search.dart +++ b/app/lib/features/bangs/presentation/widgets/site_search.dart @@ -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_modules/search_suggestions.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/url_icon.dart'; class SiteSearch extends HookConsumerWidget { final String domain; @@ -33,7 +33,7 @@ class SiteSearch extends HookConsumerWidget { final searchTextController = useTextEditingController(); - useListenableCallback(searchTextController, () async { + useListenableCallback(searchTextController, () { ref .read(searchSuggestionsProvider().notifier) .addQuery(searchTextController.text); diff --git a/app/lib/features/chat/features/chat_store/data/database/daos/messages.dart b/app/lib/features/chat/features/chat_store/data/database/daos/messages.dart index 1054a946..84dd0e8d 100644 --- a/app/lib/features/chat/features/chat_store/data/database/daos/messages.dart +++ b/app/lib/features/chat/features/chat_store/data/database/daos/messages.dart @@ -110,7 +110,7 @@ class MessagesDao extends DatabaseAccessor Future replaceChatMessages({ required String chatId, required List messages, - }) async { + }) { return db.transaction(() async { await deleteChatMessages(chatId: chatId); diff --git a/app/lib/features/chat/features/chat_store/data/database/database.g.dart b/app/lib/features/chat/features/chat_store/data/database/database.g.dart index bbf9cdd0..c50b6d5e 100644 --- a/app/lib/features/chat/features/chat_store/data/database/database.g.dart +++ b/app/lib/features/chat/features/chat_store/data/database/database.g.dart @@ -9,16 +9,22 @@ class ChatData extends Table with TableInfo { final String? _alias; ChatData(this.attachedDatabase, [this._alias]); late final GeneratedColumn chatId = GeneratedColumn( - 'chat_id', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'PRIMARY KEY NOT NULL'); + 'chat_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'PRIMARY KEY NOT NULL', + ); late final GeneratedColumnWithTypeConverter metadata = - GeneratedColumn('metadata', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL') - .withConverter(ChatData.$convertermetadata); + GeneratedColumn( + 'metadata', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ).withConverter(ChatData.$convertermetadata); @override List get $columns => [chatId, metadata]; @override @@ -32,10 +38,17 @@ class ChatData extends Table with TableInfo { ChatDataData map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return ChatDataData( - chatId: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}chat_id'])!, - metadata: ChatData.$convertermetadata.fromSql(attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}metadata'])!), + chatId: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + 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 { final map = {}; map['chat_id'] = Variable(chatId); { - map['metadata'] = - Variable(ChatData.$convertermetadata.toSql(metadata)); + map['metadata'] = Variable( + ChatData.$convertermetadata.toSql(metadata), + ); } return map; } - factory ChatDataData.fromJson(Map json, - {ValueSerializer? serializer}) { + factory ChatDataData.fromJson( + Map json, { + ValueSerializer? serializer, + }) { serializer ??= driftRuntimeOptions.defaultSerializer; return ChatDataData( chatId: serializer.fromJson(json['chat_id']), @@ -126,8 +142,8 @@ class ChatDataCompanion extends UpdateCompanion { required String chatId, required ChatMetadata metadata, this.rowid = const Value.absent(), - }) : chatId = Value(chatId), - metadata = Value(metadata); + }) : chatId = Value(chatId), + metadata = Value(metadata); static Insertable custom({ Expression? chatId, Expression? metadata, @@ -140,10 +156,11 @@ class ChatDataCompanion extends UpdateCompanion { }); } - ChatDataCompanion copyWith( - {Value? chatId, - Value? metadata, - Value? rowid}) { + ChatDataCompanion copyWith({ + Value? chatId, + Value? metadata, + Value? rowid, + }) { return ChatDataCompanion( chatId: chatId ?? this.chatId, metadata: metadata ?? this.metadata, @@ -158,8 +175,9 @@ class ChatDataCompanion extends UpdateCompanion { map['chat_id'] = Variable(chatId.value); } if (metadata.present) { - map['metadata'] = - Variable(ChatData.$convertermetadata.toSql(metadata.value)); + map['metadata'] = Variable( + ChatData.$convertermetadata.toSql(metadata.value), + ); } if (rowid.present) { map['rowid'] = Variable(rowid.value); @@ -184,28 +202,44 @@ class ChatMessage extends Table with TableInfo { final String? _alias; ChatMessage(this.attachedDatabase, [this._alias]); late final GeneratedColumn messageId = GeneratedColumn( - 'message_id', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'PRIMARY KEY NOT NULL'); + 'message_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'PRIMARY KEY NOT NULL', + ); late final GeneratedColumn chatId = GeneratedColumn( - 'chat_id', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL'); + 'chat_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ); late final GeneratedColumn orderKey = GeneratedColumn( - 'order_key', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL'); + 'order_key', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ); late final GeneratedColumn messageJson = GeneratedColumn( - 'message_json', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL'); + 'message_json', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ); @override - List get $columns => - [messageId, chatId, orderKey, messageJson]; + List get $columns => [ + messageId, + chatId, + orderKey, + messageJson, + ]; @override String get aliasedName => _alias ?? actualTableName; @override @@ -217,14 +251,26 @@ class ChatMessage extends Table with TableInfo { ChatMessageData map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return ChatMessageData( - messageId: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}message_id'])!, - chatId: attachedDatabase.typeMapping - .read(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'])!, + messageId: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}message_id'], + )!, + chatId: + attachedDatabase.typeMapping.read( + 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 { final String chatId; final String orderKey; final String messageJson; - const ChatMessageData( - {required this.messageId, - required this.chatId, - required this.orderKey, - required this.messageJson}); + const ChatMessageData({ + required this.messageId, + required this.chatId, + required this.orderKey, + required this.messageJson, + }); @override Map toColumns(bool nullToAbsent) { final map = {}; @@ -257,8 +304,10 @@ class ChatMessageData extends DataClass implements Insertable { return map; } - factory ChatMessageData.fromJson(Map json, - {ValueSerializer? serializer}) { + factory ChatMessageData.fromJson( + Map json, { + ValueSerializer? serializer, + }) { serializer ??= driftRuntimeOptions.defaultSerializer; return ChatMessageData( messageId: serializer.fromJson(json['message_id']), @@ -278,17 +327,17 @@ class ChatMessageData extends DataClass implements Insertable { }; } - ChatMessageData copyWith( - {String? messageId, - String? chatId, - String? orderKey, - String? messageJson}) => - ChatMessageData( - messageId: messageId ?? this.messageId, - chatId: chatId ?? this.chatId, - orderKey: orderKey ?? this.orderKey, - messageJson: messageJson ?? this.messageJson, - ); + ChatMessageData copyWith({ + String? messageId, + String? chatId, + String? orderKey, + String? messageJson, + }) => ChatMessageData( + messageId: messageId ?? this.messageId, + chatId: chatId ?? this.chatId, + orderKey: orderKey ?? this.orderKey, + messageJson: messageJson ?? this.messageJson, + ); ChatMessageData copyWithCompanion(ChatMessageCompanion data) { return ChatMessageData( messageId: data.messageId.present ? data.messageId.value : this.messageId, @@ -341,10 +390,10 @@ class ChatMessageCompanion extends UpdateCompanion { required String orderKey, required String messageJson, this.rowid = const Value.absent(), - }) : messageId = Value(messageId), - chatId = Value(chatId), - orderKey = Value(orderKey), - messageJson = Value(messageJson); + }) : messageId = Value(messageId), + chatId = Value(chatId), + orderKey = Value(orderKey), + messageJson = Value(messageJson); static Insertable custom({ Expression? messageId, Expression? chatId, @@ -361,12 +410,13 @@ class ChatMessageCompanion extends UpdateCompanion { }); } - ChatMessageCompanion copyWith( - {Value? messageId, - Value? chatId, - Value? orderKey, - Value? messageJson, - Value? rowid}) { + ChatMessageCompanion copyWith({ + Value? messageId, + Value? chatId, + Value? orderKey, + Value? messageJson, + Value? rowid, + }) { return ChatMessageCompanion( messageId: messageId ?? this.messageId, chatId: chatId ?? this.chatId, @@ -415,80 +465,79 @@ abstract class _$ChatDatabase extends GeneratedDatabase { $ChatDatabaseManager get managers => $ChatDatabaseManager(this); late final ChatData chatData = ChatData(this); late final ChatMessage chatMessage = ChatMessage(this); - late final Index groupOrderIdx = Index('group_order_idx', - 'CREATE UNIQUE INDEX group_order_idx ON chat_message (chat_id, order_key)'); + late final Index groupOrderIdx = Index( + '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 MetadataDao metadataDao = MetadataDao(this as ChatDatabase); - Selectable leadingOrderKey( - {required int bucket, required String chatId}) { + Selectable leadingOrderKey({ + required int bucket, + required String chatId, + }) { 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', - variables: [ - Variable(bucket), - Variable(chatId) - ], - readsFrom: { - chatMessage, - }).map((QueryRow row) => row.read('_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: [Variable(bucket), Variable(chatId)], + readsFrom: {chatMessage}, + ).map((QueryRow row) => row.read('_c0')); } - Selectable trailingOrderKey( - {required int bucket, required String chatId}) { + Selectable trailingOrderKey({ + required int bucket, + required String chatId, + }) { 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', - variables: [ - Variable(bucket), - Variable(chatId) - ], - readsFrom: { - chatMessage, - }).map((QueryRow row) => row.read('_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: [Variable(bucket), Variable(chatId)], + readsFrom: {chatMessage}, + ).map((QueryRow row) => row.read('_c0')); } - Selectable orderKeyBeforeIndex( - {required String chatId, required int rowIdx}) { + Selectable orderKeyBeforeIndex({ + required String chatId, + required int rowIdx, + }) { 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)', - variables: [ - Variable(chatId), - Variable(rowIdx) - ], - readsFrom: { - chatMessage, - }).map((QueryRow row) => row.read('_c0')); + '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: [Variable(chatId), Variable(rowIdx)], + readsFrom: {chatMessage}, + ).map((QueryRow row) => row.read('_c0')); } - Selectable messageIndex( - {required String chatId, required String messageId}) { + Selectable messageIndex({ + required String chatId, + required String messageId, + }) { 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', - variables: [ - Variable(chatId), - Variable(messageId) - ], - readsFrom: { - chatMessage, - }).map((QueryRow row) => row.read('row_idx')); + '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: [Variable(chatId), Variable(messageId)], + readsFrom: {chatMessage}, + ).map((QueryRow row) => row.read('row_idx')); } @override Iterable> get allTables => allSchemaEntities.whereType>(); @override - List get allSchemaEntities => - [chatData, chatMessage, groupOrderIdx]; + List get allSchemaEntities => [ + chatData, + chatMessage, + groupOrderIdx, + ]; } -typedef $ChatDataCreateCompanionBuilder = ChatDataCompanion Function({ - required String chatId, - required ChatMetadata metadata, - Value rowid, -}); -typedef $ChatDataUpdateCompanionBuilder = ChatDataCompanion Function({ - Value chatId, - Value metadata, - Value rowid, -}); +typedef $ChatDataCreateCompanionBuilder = + ChatDataCompanion Function({ + required String chatId, + required ChatMetadata metadata, + Value rowid, + }); +typedef $ChatDataUpdateCompanionBuilder = + ChatDataCompanion Function({ + Value chatId, + Value metadata, + Value rowid, + }); class $ChatDataFilterComposer extends Composer<_$ChatDatabase, ChatData> { $ChatDataFilterComposer({ @@ -499,12 +548,15 @@ class $ChatDataFilterComposer extends Composer<_$ChatDatabase, ChatData> { super.$removeJoinBuilderFromRootComposer, }); ColumnFilters get chatId => $composableBuilder( - column: $table.chatId, builder: (column) => ColumnFilters(column)); + column: $table.chatId, + builder: (column) => ColumnFilters(column), + ); ColumnWithTypeConverterFilters - get metadata => $composableBuilder( - column: $table.metadata, - builder: (column) => ColumnWithTypeConverterFilters(column)); + get metadata => $composableBuilder( + column: $table.metadata, + builder: (column) => ColumnWithTypeConverterFilters(column), + ); } class $ChatDataOrderingComposer extends Composer<_$ChatDatabase, ChatData> { @@ -516,10 +568,14 @@ class $ChatDataOrderingComposer extends Composer<_$ChatDatabase, ChatData> { super.$removeJoinBuilderFromRootComposer, }); ColumnOrderings get chatId => $composableBuilder( - column: $table.chatId, builder: (column) => ColumnOrderings(column)); + column: $table.chatId, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get metadata => $composableBuilder( - column: $table.metadata, builder: (column) => ColumnOrderings(column)); + column: $table.metadata, + builder: (column) => ColumnOrderings(column), + ); } class $ChatDataAnnotationComposer extends Composer<_$ChatDatabase, ChatData> { @@ -537,81 +593,100 @@ class $ChatDataAnnotationComposer extends Composer<_$ChatDatabase, ChatData> { $composableBuilder(column: $table.metadata, builder: (column) => column); } -class $ChatDataTableManager extends RootTableManager< - _$ChatDatabase, - ChatData, - ChatDataData, - $ChatDataFilterComposer, - $ChatDataOrderingComposer, - $ChatDataAnnotationComposer, - $ChatDataCreateCompanionBuilder, - $ChatDataUpdateCompanionBuilder, - (ChatDataData, BaseReferences<_$ChatDatabase, ChatData, ChatDataData>), - ChatDataData, - PrefetchHooks Function()> { +class $ChatDataTableManager + extends + RootTableManager< + _$ChatDatabase, + ChatData, + ChatDataData, + $ChatDataFilterComposer, + $ChatDataOrderingComposer, + $ChatDataAnnotationComposer, + $ChatDataCreateCompanionBuilder, + $ChatDataUpdateCompanionBuilder, + ( + ChatDataData, + BaseReferences<_$ChatDatabase, ChatData, ChatDataData>, + ), + ChatDataData, + PrefetchHooks Function() + > { $ChatDataTableManager(_$ChatDatabase db, ChatData table) - : super(TableManagerState( + : super( + TableManagerState( db: db, table: table, - createFilteringComposer: () => - $ChatDataFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $ChatDataOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $ChatDataAnnotationComposer($db: db, $table: table), - updateCompanionCallback: ({ - Value chatId = const Value.absent(), - Value metadata = const Value.absent(), - Value rowid = const Value.absent(), - }) => - ChatDataCompanion( - chatId: chatId, - metadata: metadata, - rowid: rowid, - ), - createCompanionCallback: ({ - required String chatId, - required ChatMetadata metadata, - Value rowid = const Value.absent(), - }) => - ChatDataCompanion.insert( - chatId: chatId, - metadata: metadata, - rowid: rowid, - ), - withReferenceMapper: (p0) => p0 - .map((e) => (e.readTable(table), BaseReferences(db, table, e))) - .toList(), + createFilteringComposer: + () => $ChatDataFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $ChatDataOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $ChatDataAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value chatId = const Value.absent(), + Value metadata = const Value.absent(), + Value rowid = const Value.absent(), + }) => ChatDataCompanion( + chatId: chatId, + metadata: metadata, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String chatId, + required ChatMetadata metadata, + Value rowid = const Value.absent(), + }) => ChatDataCompanion.insert( + chatId: chatId, + metadata: metadata, + rowid: rowid, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + BaseReferences(db, table, e), + ), + ) + .toList(), prefetchHooksCallback: null, - )); + ), + ); } -typedef $ChatDataProcessedTableManager = ProcessedTableManager< - _$ChatDatabase, - ChatData, - ChatDataData, - $ChatDataFilterComposer, - $ChatDataOrderingComposer, - $ChatDataAnnotationComposer, - $ChatDataCreateCompanionBuilder, - $ChatDataUpdateCompanionBuilder, - (ChatDataData, BaseReferences<_$ChatDatabase, ChatData, ChatDataData>), - ChatDataData, - PrefetchHooks Function()>; -typedef $ChatMessageCreateCompanionBuilder = ChatMessageCompanion Function({ - required String messageId, - required String chatId, - required String orderKey, - required String messageJson, - Value rowid, -}); -typedef $ChatMessageUpdateCompanionBuilder = ChatMessageCompanion Function({ - Value messageId, - Value chatId, - Value orderKey, - Value messageJson, - Value rowid, -}); +typedef $ChatDataProcessedTableManager = + ProcessedTableManager< + _$ChatDatabase, + ChatData, + ChatDataData, + $ChatDataFilterComposer, + $ChatDataOrderingComposer, + $ChatDataAnnotationComposer, + $ChatDataCreateCompanionBuilder, + $ChatDataUpdateCompanionBuilder, + (ChatDataData, BaseReferences<_$ChatDatabase, ChatData, ChatDataData>), + ChatDataData, + PrefetchHooks Function() + >; +typedef $ChatMessageCreateCompanionBuilder = + ChatMessageCompanion Function({ + required String messageId, + required String chatId, + required String orderKey, + required String messageJson, + Value rowid, + }); +typedef $ChatMessageUpdateCompanionBuilder = + ChatMessageCompanion Function({ + Value messageId, + Value chatId, + Value orderKey, + Value messageJson, + Value rowid, + }); class $ChatMessageFilterComposer extends Composer<_$ChatDatabase, ChatMessage> { $ChatMessageFilterComposer({ @@ -622,16 +697,24 @@ class $ChatMessageFilterComposer extends Composer<_$ChatDatabase, ChatMessage> { super.$removeJoinBuilderFromRootComposer, }); ColumnFilters get messageId => $composableBuilder( - column: $table.messageId, builder: (column) => ColumnFilters(column)); + column: $table.messageId, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get chatId => $composableBuilder( - column: $table.chatId, builder: (column) => ColumnFilters(column)); + column: $table.chatId, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get orderKey => $composableBuilder( - column: $table.orderKey, builder: (column) => ColumnFilters(column)); + column: $table.orderKey, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get messageJson => $composableBuilder( - column: $table.messageJson, builder: (column) => ColumnFilters(column)); + column: $table.messageJson, + builder: (column) => ColumnFilters(column), + ); } class $ChatMessageOrderingComposer @@ -644,16 +727,24 @@ class $ChatMessageOrderingComposer super.$removeJoinBuilderFromRootComposer, }); ColumnOrderings get messageId => $composableBuilder( - column: $table.messageId, builder: (column) => ColumnOrderings(column)); + column: $table.messageId, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get chatId => $composableBuilder( - column: $table.chatId, builder: (column) => ColumnOrderings(column)); + column: $table.chatId, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get orderKey => $composableBuilder( - column: $table.orderKey, builder: (column) => ColumnOrderings(column)); + column: $table.orderKey, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get messageJson => $composableBuilder( - column: $table.messageJson, builder: (column) => ColumnOrderings(column)); + column: $table.messageJson, + builder: (column) => ColumnOrderings(column), + ); } class $ChatMessageAnnotationComposer @@ -675,84 +766,100 @@ class $ChatMessageAnnotationComposer $composableBuilder(column: $table.orderKey, builder: (column) => column); GeneratedColumn get messageJson => $composableBuilder( - column: $table.messageJson, builder: (column) => column); + column: $table.messageJson, + builder: (column) => column, + ); } -class $ChatMessageTableManager extends RootTableManager< - _$ChatDatabase, - ChatMessage, - ChatMessageData, - $ChatMessageFilterComposer, - $ChatMessageOrderingComposer, - $ChatMessageAnnotationComposer, - $ChatMessageCreateCompanionBuilder, - $ChatMessageUpdateCompanionBuilder, - ( - ChatMessageData, - BaseReferences<_$ChatDatabase, ChatMessage, ChatMessageData> - ), - ChatMessageData, - PrefetchHooks Function()> { +class $ChatMessageTableManager + extends + RootTableManager< + _$ChatDatabase, + ChatMessage, + ChatMessageData, + $ChatMessageFilterComposer, + $ChatMessageOrderingComposer, + $ChatMessageAnnotationComposer, + $ChatMessageCreateCompanionBuilder, + $ChatMessageUpdateCompanionBuilder, + ( + ChatMessageData, + BaseReferences<_$ChatDatabase, ChatMessage, ChatMessageData>, + ), + ChatMessageData, + PrefetchHooks Function() + > { $ChatMessageTableManager(_$ChatDatabase db, ChatMessage table) - : super(TableManagerState( + : super( + TableManagerState( db: db, table: table, - createFilteringComposer: () => - $ChatMessageFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $ChatMessageOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $ChatMessageAnnotationComposer($db: db, $table: table), - updateCompanionCallback: ({ - Value messageId = const Value.absent(), - Value chatId = const Value.absent(), - Value orderKey = const Value.absent(), - Value messageJson = const Value.absent(), - Value rowid = const Value.absent(), - }) => - ChatMessageCompanion( - messageId: messageId, - chatId: chatId, - orderKey: orderKey, - messageJson: messageJson, - rowid: rowid, - ), - createCompanionCallback: ({ - required String messageId, - required String chatId, - required String orderKey, - required String messageJson, - Value rowid = const Value.absent(), - }) => - ChatMessageCompanion.insert( - messageId: messageId, - chatId: chatId, - orderKey: orderKey, - messageJson: messageJson, - rowid: rowid, - ), - withReferenceMapper: (p0) => p0 - .map((e) => (e.readTable(table), BaseReferences(db, table, e))) - .toList(), + createFilteringComposer: + () => $ChatMessageFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $ChatMessageOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $ChatMessageAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value messageId = const Value.absent(), + Value chatId = const Value.absent(), + Value orderKey = const Value.absent(), + Value messageJson = const Value.absent(), + Value rowid = const Value.absent(), + }) => ChatMessageCompanion( + messageId: messageId, + chatId: chatId, + orderKey: orderKey, + messageJson: messageJson, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String messageId, + required String chatId, + required String orderKey, + required String messageJson, + Value rowid = const Value.absent(), + }) => ChatMessageCompanion.insert( + messageId: messageId, + chatId: chatId, + orderKey: orderKey, + messageJson: messageJson, + rowid: rowid, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + BaseReferences(db, table, e), + ), + ) + .toList(), prefetchHooksCallback: null, - )); + ), + ); } -typedef $ChatMessageProcessedTableManager = ProcessedTableManager< - _$ChatDatabase, - ChatMessage, - ChatMessageData, - $ChatMessageFilterComposer, - $ChatMessageOrderingComposer, - $ChatMessageAnnotationComposer, - $ChatMessageCreateCompanionBuilder, - $ChatMessageUpdateCompanionBuilder, - ( +typedef $ChatMessageProcessedTableManager = + ProcessedTableManager< + _$ChatDatabase, + ChatMessage, ChatMessageData, - BaseReferences<_$ChatDatabase, ChatMessage, ChatMessageData> - ), - ChatMessageData, - PrefetchHooks Function()>; + $ChatMessageFilterComposer, + $ChatMessageOrderingComposer, + $ChatMessageAnnotationComposer, + $ChatMessageCreateCompanionBuilder, + $ChatMessageUpdateCompanionBuilder, + ( + ChatMessageData, + BaseReferences<_$ChatDatabase, ChatMessage, ChatMessageData>, + ), + ChatMessageData, + PrefetchHooks Function() + >; class $ChatDatabaseManager { final _$ChatDatabase _db; diff --git a/app/lib/features/chat/features/chat_store/data/models/chat_metadata.g.dart b/app/lib/features/chat/features/chat_store/data/models/chat_metadata.g.dart index 2f1b7598..526b847c 100644 --- a/app/lib/features/chat/features/chat_store/data/models/chat_metadata.g.dart +++ b/app/lib/features/chat/features/chat_store/data/models/chat_metadata.g.dart @@ -7,9 +7,9 @@ part of 'chat_metadata.dart'; // ************************************************************************** ChatMetadata _$ChatMetadataFromJson(Map json) => ChatMetadata( - mainDocumentId: json['mainDocumentId'] as String?, - contextId: json['contextId'] as String?, - ); + mainDocumentId: json['mainDocumentId'] as String?, + contextId: json['contextId'] as String?, +); Map _$ChatMetadataToJson(ChatMetadata instance) => { diff --git a/app/lib/features/chat/features/chat_store/domain/providers.g.dart b/app/lib/features/chat/features/chat_store/domain/providers.g.dart index ea81b46a..0cf7db38 100644 --- a/app/lib/features/chat/features/chat_store/domain/providers.g.dart +++ b/app/lib/features/chat/features/chat_store/domain/providers.g.dart @@ -39,21 +39,15 @@ class ChatControllerFamily extends Family { const ChatControllerFamily(); /// See also [chatController]. - ChatControllerProvider call( - String chatId, - ) { - return ChatControllerProvider( - chatId, - ); + ChatControllerProvider call(String chatId) { + return ChatControllerProvider(chatId); } @override ChatControllerProvider getProviderOverride( covariant ChatControllerProvider provider, ) { - return call( - provider.chatId, - ); + return call(provider.chatId); } static const Iterable? _dependencies = null; @@ -74,24 +68,20 @@ class ChatControllerFamily extends Family { /// See also [chatController]. class ChatControllerProvider extends AutoDisposeProvider { /// See also [chatController]. - ChatControllerProvider( - String chatId, - ) : this._internal( - (ref) => chatController( - ref as ChatControllerRef, - chatId, - ), - from: chatControllerProvider, - name: r'chatControllerProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$chatControllerHash, - dependencies: ChatControllerFamily._dependencies, - allTransitiveDependencies: - ChatControllerFamily._allTransitiveDependencies, - chatId: chatId, - ); + ChatControllerProvider(String chatId) + : this._internal( + (ref) => chatController(ref as ChatControllerRef, chatId), + from: chatControllerProvider, + name: r'chatControllerProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$chatControllerHash, + dependencies: ChatControllerFamily._dependencies, + allTransitiveDependencies: + ChatControllerFamily._allTransitiveDependencies, + chatId: chatId, + ); ChatControllerProvider._internal( super._createNotifier, { @@ -170,21 +160,15 @@ class ChatMetadataFamily extends Family> { const ChatMetadataFamily(); /// See also [chatMetadata]. - ChatMetadataProvider call( - String chatId, - ) { - return ChatMetadataProvider( - chatId, - ); + ChatMetadataProvider call(String chatId) { + return ChatMetadataProvider(chatId); } @override ChatMetadataProvider getProviderOverride( covariant ChatMetadataProvider provider, ) { - return call( - provider.chatId, - ); + return call(provider.chatId); } static const Iterable? _dependencies = null; @@ -205,24 +189,20 @@ class ChatMetadataFamily extends Family> { /// See also [chatMetadata]. class ChatMetadataProvider extends AutoDisposeStreamProvider { /// See also [chatMetadata]. - ChatMetadataProvider( - String chatId, - ) : this._internal( - (ref) => chatMetadata( - ref as ChatMetadataRef, - chatId, - ), - from: chatMetadataProvider, - name: r'chatMetadataProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$chatMetadataHash, - dependencies: ChatMetadataFamily._dependencies, - allTransitiveDependencies: - ChatMetadataFamily._allTransitiveDependencies, - chatId: chatId, - ); + ChatMetadataProvider(String chatId) + : this._internal( + (ref) => chatMetadata(ref as ChatMetadataRef, chatId), + from: chatMetadataProvider, + name: r'chatMetadataProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$chatMetadataHash, + dependencies: ChatMetadataFamily._dependencies, + allTransitiveDependencies: + ChatMetadataFamily._allTransitiveDependencies, + chatId: chatId, + ); ChatMetadataProvider._internal( super._createNotifier, { @@ -288,5 +268,6 @@ class _ChatMetadataProviderElement @override String get chatId => (origin as ChatMetadataProvider).chatId; } + // 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 diff --git a/app/lib/features/chat/features/chat_store/domain/repositories/chat_message.dart b/app/lib/features/chat/features/chat_store/domain/repositories/chat_message.dart index 53b1a6d4..ca4ad937 100644 --- a/app/lib/features/chat/features/chat_store/domain/repositories/chat_message.dart +++ b/app/lib/features/chat/features/chat_store/domain/repositories/chat_message.dart @@ -2,6 +2,7 @@ import 'package:exceptions/exceptions.dart'; import 'package:flutter_chat_core/flutter_chat_core.dart'; import 'package:langchain/langchain.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/domain/controllers/drift_chat_controller.dart'; import 'package:lensai/features/chat/features/chat_store/domain/providers.dart'; @@ -44,7 +45,7 @@ class ChatMessageRepository extends _$ChatMessageRepository { ); await Future.wait( - typingMessages.map((message) => _controller.remove(message)), + typingMessages.map((message) => _controller.remove(message)).toList(), ); _isTyping.remove(author); @@ -56,7 +57,7 @@ class ChatMessageRepository extends _$ChatMessageRepository { required String content, List? toolCalls, bool hideFromModelChatHistory = false, - }) async { + }) { final message = TextMessage( id: uuid.v4(), authorId: author.user.id, @@ -64,7 +65,7 @@ class ChatMessageRepository extends _$ChatMessageRepository { text: content, isOnlyEmoji: isOnlyEmoji(content), metadata: - (hideFromModelChatHistory || (toolCalls?.isNotEmpty ?? false)) + (hideFromModelChatHistory || (toolCalls.isNotEmpty)) ? { 'toolCalls': toolCalls?.map((tool) => tool.toMap()).toList(), if (hideFromModelChatHistory) 'hideFromModelChatHistory': true, diff --git a/app/lib/features/chat/features/chat_store/domain/repositories/chat_message.g.dart b/app/lib/features/chat/features/chat_store/domain/repositories/chat_message.g.dart index 82a2cd20..af35ad60 100644 --- a/app/lib/features/chat/features/chat_store/domain/repositories/chat_message.g.dart +++ b/app/lib/features/chat/features/chat_store/domain/repositories/chat_message.g.dart @@ -7,7 +7,7 @@ part of 'chat_message.dart'; // ************************************************************************** String _$chatMessageRepositoryHash() => - r'a4144618b339f7c0c329a01a294b6bebbb648bf6'; + r'34055588fb83fd3d4a91219e96a0c5e961af5212'; /// Copied from Dart SDK class _SystemHash { @@ -34,9 +34,7 @@ abstract class _$ChatMessageRepository extends BuildlessAutoDisposeNotifier { late final String chatId; - void build( - String chatId, - ); + void build(String chatId); } /// See also [ChatMessageRepository]. @@ -49,21 +47,15 @@ class ChatMessageRepositoryFamily extends Family { const ChatMessageRepositoryFamily(); /// See also [ChatMessageRepository]. - ChatMessageRepositoryProvider call( - String chatId, - ) { - return ChatMessageRepositoryProvider( - chatId, - ); + ChatMessageRepositoryProvider call(String chatId) { + return ChatMessageRepositoryProvider(chatId); } @override ChatMessageRepositoryProvider getProviderOverride( covariant ChatMessageRepositoryProvider provider, ) { - return call( - provider.chatId, - ); + return call(provider.chatId); } static const Iterable? _dependencies = null; @@ -85,21 +77,20 @@ class ChatMessageRepositoryFamily extends Family { class ChatMessageRepositoryProvider extends AutoDisposeNotifierProviderImpl { /// See also [ChatMessageRepository]. - ChatMessageRepositoryProvider( - String chatId, - ) : this._internal( - () => ChatMessageRepository()..chatId = chatId, - from: chatMessageRepositoryProvider, - name: r'chatMessageRepositoryProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$chatMessageRepositoryHash, - dependencies: ChatMessageRepositoryFamily._dependencies, - allTransitiveDependencies: - ChatMessageRepositoryFamily._allTransitiveDependencies, - chatId: chatId, - ); + ChatMessageRepositoryProvider(String chatId) + : this._internal( + () => ChatMessageRepository()..chatId = chatId, + from: chatMessageRepositoryProvider, + name: r'chatMessageRepositoryProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$chatMessageRepositoryHash, + dependencies: ChatMessageRepositoryFamily._dependencies, + allTransitiveDependencies: + ChatMessageRepositoryFamily._allTransitiveDependencies, + chatId: chatId, + ); ChatMessageRepositoryProvider._internal( super._createNotifier, { @@ -114,12 +105,8 @@ class ChatMessageRepositoryProvider final String chatId; @override - void runNotifierBuild( - covariant ChatMessageRepository notifier, - ) { - return notifier.build( - chatId, - ); + void runNotifierBuild(covariant ChatMessageRepository notifier) { + return notifier.build(chatId); } @override @@ -140,7 +127,7 @@ class ChatMessageRepositoryProvider @override AutoDisposeNotifierProviderElement - createElement() { + createElement() { return _ChatMessageRepositoryProviderElement(this); } @@ -173,5 +160,6 @@ class _ChatMessageRepositoryProviderElement @override String get chatId => (origin as ChatMessageRepositoryProvider).chatId; } + // 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 diff --git a/app/lib/features/chat/features/chat_store/domain/repositories/chat_metadata.g.dart b/app/lib/features/chat/features/chat_store/domain/repositories/chat_metadata.g.dart index 71e0d410..2df00afe 100644 --- a/app/lib/features/chat/features/chat_store/domain/repositories/chat_metadata.g.dart +++ b/app/lib/features/chat/features/chat_store/domain/repositories/chat_metadata.g.dart @@ -34,9 +34,7 @@ abstract class _$ChatMetadataRepository extends BuildlessAutoDisposeNotifier { late final String chatId; - void build( - String chatId, - ); + void build(String chatId); } /// See also [ChatMetadataRepository]. @@ -49,21 +47,15 @@ class ChatMetadataRepositoryFamily extends Family { const ChatMetadataRepositoryFamily(); /// See also [ChatMetadataRepository]. - ChatMetadataRepositoryProvider call( - String chatId, - ) { - return ChatMetadataRepositoryProvider( - chatId, - ); + ChatMetadataRepositoryProvider call(String chatId) { + return ChatMetadataRepositoryProvider(chatId); } @override ChatMetadataRepositoryProvider getProviderOverride( covariant ChatMetadataRepositoryProvider provider, ) { - return call( - provider.chatId, - ); + return call(provider.chatId); } static const Iterable? _dependencies = null; @@ -85,21 +77,20 @@ class ChatMetadataRepositoryFamily extends Family { class ChatMetadataRepositoryProvider extends AutoDisposeNotifierProviderImpl { /// See also [ChatMetadataRepository]. - ChatMetadataRepositoryProvider( - String chatId, - ) : this._internal( - () => ChatMetadataRepository()..chatId = chatId, - from: chatMetadataRepositoryProvider, - name: r'chatMetadataRepositoryProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$chatMetadataRepositoryHash, - dependencies: ChatMetadataRepositoryFamily._dependencies, - allTransitiveDependencies: - ChatMetadataRepositoryFamily._allTransitiveDependencies, - chatId: chatId, - ); + ChatMetadataRepositoryProvider(String chatId) + : this._internal( + () => ChatMetadataRepository()..chatId = chatId, + from: chatMetadataRepositoryProvider, + name: r'chatMetadataRepositoryProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$chatMetadataRepositoryHash, + dependencies: ChatMetadataRepositoryFamily._dependencies, + allTransitiveDependencies: + ChatMetadataRepositoryFamily._allTransitiveDependencies, + chatId: chatId, + ); ChatMetadataRepositoryProvider._internal( super._createNotifier, { @@ -114,12 +105,8 @@ class ChatMetadataRepositoryProvider final String chatId; @override - void runNotifierBuild( - covariant ChatMetadataRepository notifier, - ) { - return notifier.build( - chatId, - ); + void runNotifierBuild(covariant ChatMetadataRepository notifier) { + return notifier.build(chatId); } @override @@ -140,7 +127,7 @@ class ChatMetadataRepositoryProvider @override AutoDisposeNotifierProviderElement - createElement() { + createElement() { return _ChatMetadataRepositoryProviderElement(this); } @@ -173,5 +160,6 @@ class _ChatMetadataRepositoryProviderElement @override String get chatId => (origin as ChatMetadataRepositoryProvider).chatId; } + // 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 diff --git a/app/lib/features/geckoview/domain/controllers/bottom_sheet.g.dart b/app/lib/features/geckoview/domain/controllers/bottom_sheet.g.dart index b0f980af..035e1230 100644 --- a/app/lib/features/geckoview/domain/controllers/bottom_sheet.g.dart +++ b/app/lib/features/geckoview/domain/controllers/bottom_sheet.g.dart @@ -13,14 +13,15 @@ String _$bottomSheetControllerHash() => @ProviderFor(BottomSheetController) final bottomSheetControllerProvider = AutoDisposeNotifierProvider.internal( - BottomSheetController.new, - name: r'bottomSheetControllerProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$bottomSheetControllerHash, - dependencies: null, - allTransitiveDependencies: null, -); + BottomSheetController.new, + name: r'bottomSheetControllerProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$bottomSheetControllerHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$BottomSheetController = AutoDisposeNotifier; String _$bottomSheetExtendHash() => r'7e11b9047c15bdeb4dfcb488a8573daadb64e25c'; @@ -29,14 +30,15 @@ String _$bottomSheetExtendHash() => r'7e11b9047c15bdeb4dfcb488a8573daadb64e25c'; @ProviderFor(BottomSheetExtend) final bottomSheetExtendProvider = StreamNotifierProvider.internal( - BottomSheetExtend.new, - name: r'bottomSheetExtendProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$bottomSheetExtendHash, - dependencies: null, - allTransitiveDependencies: null, -); + BottomSheetExtend.new, + name: r'bottomSheetExtendProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$bottomSheetExtendHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$BottomSheetExtend = StreamNotifier; // ignore_for_file: type=lint diff --git a/app/lib/features/geckoview/domain/controllers/overlay.g.dart b/app/lib/features/geckoview/domain/controllers/overlay.g.dart index db80872e..cf396674 100644 --- a/app/lib/features/geckoview/domain/controllers/overlay.g.dart +++ b/app/lib/features/geckoview/domain/controllers/overlay.g.dart @@ -12,14 +12,15 @@ String _$overlayControllerHash() => r'b6dc3ca17611c4efadc7e8248d493cd3c7061e01'; @ProviderFor(OverlayController) final overlayControllerProvider = AutoDisposeNotifierProvider.internal( - OverlayController.new, - name: r'overlayControllerProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$overlayControllerHash, - dependencies: null, - allTransitiveDependencies: null, -); + OverlayController.new, + name: r'overlayControllerProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$overlayControllerHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$OverlayController = AutoDisposeNotifier; // ignore_for_file: type=lint diff --git a/app/lib/features/geckoview/domain/entities/states/tab.g.dart b/app/lib/features/geckoview/domain/entities/states/tab.g.dart index 09a46a0a..cf7800c2 100644 --- a/app/lib/features/geckoview/domain/entities/states/tab.g.dart +++ b/app/lib/features/geckoview/domain/entities/states/tab.g.dart @@ -106,7 +106,6 @@ class _$TabStateCWProxyImpl implements _$TabStateCWProxy { this(findResultState: findResultState); @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. /// /// Usage @@ -130,58 +129,71 @@ class _$TabStateCWProxyImpl implements _$TabStateCWProxy { }) { return TabState( id: _value.id, - contextId: contextId == const $CopyWithPlaceholder() - ? _value.contextId - // ignore: cast_nullable_to_non_nullable - : contextId as String?, - url: url == const $CopyWithPlaceholder() - ? _value.url - // ignore: cast_nullable_to_non_nullable - : url as Uri, - title: title == const $CopyWithPlaceholder() - ? _value.title - // ignore: cast_nullable_to_non_nullable - : title as String, - icon: icon == const $CopyWithPlaceholder() - ? _value.icon - // ignore: cast_nullable_to_non_nullable - : icon as EquatableImage?, - thumbnail: thumbnail == const $CopyWithPlaceholder() - ? _value.thumbnail - // ignore: cast_nullable_to_non_nullable - : thumbnail as EquatableImage?, - progress: progress == const $CopyWithPlaceholder() - ? _value.progress - // ignore: cast_nullable_to_non_nullable - : progress as int, - isPrivate: isPrivate == const $CopyWithPlaceholder() - ? _value.isPrivate - // ignore: cast_nullable_to_non_nullable - : isPrivate as bool, - isFullScreen: isFullScreen == const $CopyWithPlaceholder() - ? _value.isFullScreen - // ignore: cast_nullable_to_non_nullable - : isFullScreen as bool, - isLoading: isLoading == const $CopyWithPlaceholder() - ? _value.isLoading - // ignore: cast_nullable_to_non_nullable - : isLoading as bool, - securityInfoState: securityInfoState == const $CopyWithPlaceholder() - ? _value.securityInfoState - // ignore: cast_nullable_to_non_nullable - : securityInfoState as SecurityState, - historyState: 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, + contextId: + contextId == const $CopyWithPlaceholder() + ? _value.contextId + // ignore: cast_nullable_to_non_nullable + : contextId as String?, + url: + url == const $CopyWithPlaceholder() + ? _value.url + // ignore: cast_nullable_to_non_nullable + : url as Uri, + title: + title == const $CopyWithPlaceholder() + ? _value.title + // ignore: cast_nullable_to_non_nullable + : title as String, + icon: + icon == const $CopyWithPlaceholder() + ? _value.icon + // ignore: cast_nullable_to_non_nullable + : icon as EquatableImage?, + thumbnail: + thumbnail == const $CopyWithPlaceholder() + ? _value.thumbnail + // ignore: cast_nullable_to_non_nullable + : thumbnail as EquatableImage?, + progress: + progress == const $CopyWithPlaceholder() + ? _value.progress + // ignore: cast_nullable_to_non_nullable + : progress as int, + isPrivate: + isPrivate == const $CopyWithPlaceholder() + ? _value.isPrivate + // ignore: cast_nullable_to_non_nullable + : isPrivate as bool, + isFullScreen: + isFullScreen == const $CopyWithPlaceholder() + ? _value.isFullScreen + // ignore: cast_nullable_to_non_nullable + : isFullScreen as bool, + isLoading: + isLoading == const $CopyWithPlaceholder() + ? _value.isLoading + // ignore: cast_nullable_to_non_nullable + : isLoading as bool, + securityInfoState: + securityInfoState == const $CopyWithPlaceholder() + ? _value.securityInfoState + // ignore: cast_nullable_to_non_nullable + : securityInfoState as SecurityState, + historyState: + 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, ); } } diff --git a/app/lib/features/geckoview/domain/entities/states/web_extension.g.dart b/app/lib/features/geckoview/domain/entities/states/web_extension.g.dart index cc4d263c..62425f71 100644 --- a/app/lib/features/geckoview/domain/entities/states/web_extension.g.dart +++ b/app/lib/features/geckoview/domain/entities/states/web_extension.g.dart @@ -69,7 +69,6 @@ class _$WebExtensionStateCWProxyImpl implements _$WebExtensionStateCWProxy { WebExtensionState icon(EquatableImage? icon) => this(icon: icon); @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. /// /// Usage @@ -86,34 +85,41 @@ class _$WebExtensionStateCWProxyImpl implements _$WebExtensionStateCWProxy { Object? icon = const $CopyWithPlaceholder(), }) { return WebExtensionState( - extensionId: extensionId == const $CopyWithPlaceholder() - ? _value.extensionId - // ignore: cast_nullable_to_non_nullable - : extensionId as String, - enabled: enabled == const $CopyWithPlaceholder() - ? _value.enabled - // ignore: cast_nullable_to_non_nullable - : enabled as bool, - title: title == const $CopyWithPlaceholder() - ? _value.title - // ignore: cast_nullable_to_non_nullable - : title as String?, - badgeText: badgeText == const $CopyWithPlaceholder() - ? _value.badgeText - // ignore: cast_nullable_to_non_nullable - : badgeText as String?, - badgeTextColor: badgeTextColor == const $CopyWithPlaceholder() - ? _value.badgeTextColor - // ignore: cast_nullable_to_non_nullable - : badgeTextColor as Color?, - badgeBackgroundColor: badgeBackgroundColor == const $CopyWithPlaceholder() - ? _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?, + extensionId: + extensionId == const $CopyWithPlaceholder() + ? _value.extensionId + // ignore: cast_nullable_to_non_nullable + : extensionId as String, + enabled: + enabled == const $CopyWithPlaceholder() + ? _value.enabled + // ignore: cast_nullable_to_non_nullable + : enabled as bool, + title: + title == const $CopyWithPlaceholder() + ? _value.title + // ignore: cast_nullable_to_non_nullable + : title as String?, + badgeText: + badgeText == const $CopyWithPlaceholder() + ? _value.badgeText + // ignore: cast_nullable_to_non_nullable + : badgeText as String?, + badgeTextColor: + badgeTextColor == const $CopyWithPlaceholder() + ? _value.badgeTextColor + // ignore: cast_nullable_to_non_nullable + : badgeTextColor as Color?, + badgeBackgroundColor: + badgeBackgroundColor == const $CopyWithPlaceholder() + ? _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?, ); } } diff --git a/app/lib/features/geckoview/domain/providers.dart b/app/lib/features/geckoview/domain/providers.dart index 29adc6fd..785704ce 100644 --- a/app/lib/features/geckoview/domain/providers.dart +++ b/app/lib/features/geckoview/domain/providers.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:flutter_mozilla_components/flutter_mozilla_components.dart'; import 'package:lensai/core/logger.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:riverpod/riverpod.dart'; import 'package:riverpod_annotation/riverpod_annotation.dart'; @@ -23,26 +24,31 @@ GeckoSelectionActionService selectionActionService(Ref ref) { ); if (defaultSearchBang != null) { - await ref - .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, - ); + final currentTabId = ref.read(selectedTabProvider); - if (defaultSearchBang != null) { await ref .read(tabRepositoryProvider.notifier) - .addTab(url: defaultSearchBang.getUrl(text), private: true); + .addTab( + url: defaultSearchBang.getUrl(text), + parentId: currentTabId, + ); } else { 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 { await Share.share(text); }), diff --git a/app/lib/features/geckoview/domain/providers.g.dart b/app/lib/features/geckoview/domain/providers.g.dart index c636cfda..73610be4 100644 --- a/app/lib/features/geckoview/domain/providers.g.dart +++ b/app/lib/features/geckoview/domain/providers.g.dart @@ -7,20 +7,21 @@ part of 'providers.dart'; // ************************************************************************** String _$selectionActionServiceHash() => - r'd0c04262171976c21441297706273417e3d79b67'; + r'8d0af53213bdb924bcf5f8df6ceec6c81a345345'; /// See also [selectionActionService]. @ProviderFor(selectionActionService) final selectionActionServiceProvider = Provider.internal( - selectionActionService, - name: r'selectionActionServiceProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$selectionActionServiceHash, - dependencies: null, - allTransitiveDependencies: null, -); + selectionActionService, + name: r'selectionActionServiceProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$selectionActionServiceHash, + dependencies: null, + allTransitiveDependencies: null, + ); @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element @@ -64,9 +65,10 @@ String _$tabContentServiceHash() => r'd9a991add907ecc138c62790883e59d8e9aa9266'; final tabContentServiceProvider = Provider.internal( tabContentService, name: r'tabContentServiceProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$tabContentServiceHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$tabContentServiceHash, dependencies: null, allTransitiveDependencies: null, ); @@ -81,14 +83,15 @@ String _$engineSuggestionsServiceHash() => @ProviderFor(engineSuggestionsService) final engineSuggestionsServiceProvider = Provider.internal( - engineSuggestionsService, - name: r'engineSuggestionsServiceProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$engineSuggestionsServiceHash, - dependencies: null, - allTransitiveDependencies: null, -); + engineSuggestionsService, + name: r'engineSuggestionsServiceProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$engineSuggestionsServiceHash, + dependencies: null, + allTransitiveDependencies: null, + ); @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element @@ -99,14 +102,15 @@ String _$engineReadyStateHash() => r'c682333e2e07cf0635aa7ae793a2088ca648c950'; @ProviderFor(EngineReadyState) final engineReadyStateProvider = NotifierProvider.internal( - EngineReadyState.new, - name: r'engineReadyStateProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$engineReadyStateHash, - dependencies: null, - allTransitiveDependencies: null, -); + EngineReadyState.new, + name: r'engineReadyStateProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$engineReadyStateHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$EngineReadyState = Notifier; // ignore_for_file: type=lint diff --git a/app/lib/features/geckoview/domain/providers/selected_tab.dart b/app/lib/features/geckoview/domain/providers/selected_tab.dart index 22ad2f6c..6cd3f697 100644 --- a/app/lib/features/geckoview/domain/providers/selected_tab.dart +++ b/app/lib/features/geckoview/domain/providers/selected_tab.dart @@ -21,7 +21,7 @@ class SelectedTab extends _$SelectedTab { } }); - final selectedTabSub = eventSerivce.selectedTabEvents.listen((tabId) async { + final selectedTabSub = eventSerivce.selectedTabEvents.listen((tabId) { state = tabId; }); diff --git a/app/lib/features/geckoview/domain/providers/selected_tab.g.dart b/app/lib/features/geckoview/domain/providers/selected_tab.g.dart index fb8dc45e..11c0cc03 100644 --- a/app/lib/features/geckoview/domain/providers/selected_tab.g.dart +++ b/app/lib/features/geckoview/domain/providers/selected_tab.g.dart @@ -6,7 +6,7 @@ part of 'selected_tab.dart'; // RiverpodGenerator // ************************************************************************** -String _$selectedTabHash() => r'f550ac5b471bab8f8e5d75ef4d7669cde769db9a'; +String _$selectedTabHash() => r'250f54fe9a56d14876e0979e5370eb76879da11c'; /// See also [SelectedTab]. @ProviderFor(SelectedTab) diff --git a/app/lib/features/geckoview/domain/providers/tab_list.dart b/app/lib/features/geckoview/domain/providers/tab_list.dart index 9e09dbd9..6401118c 100644 --- a/app/lib/features/geckoview/domain/providers/tab_list.dart +++ b/app/lib/features/geckoview/domain/providers/tab_list.dart @@ -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); if (equatableTabs != state) { diff --git a/app/lib/features/geckoview/domain/providers/tab_list.g.dart b/app/lib/features/geckoview/domain/providers/tab_list.g.dart index 24c153f7..84c76578 100644 --- a/app/lib/features/geckoview/domain/providers/tab_list.g.dart +++ b/app/lib/features/geckoview/domain/providers/tab_list.g.dart @@ -6,19 +6,19 @@ part of 'tab_list.dart'; // RiverpodGenerator // ************************************************************************** -String _$tabListHash() => r'bb8b6cca42a8aace8bd9808fdeac4fe4965ac867'; +String _$tabListHash() => r'cdcbfd9c12e06f350d8284d48c81826b3aa57b6d'; /// See also [TabList]. @ProviderFor(TabList) final tabListProvider = NotifierProvider>>.internal( - TabList.new, - name: r'tabListProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$tabListHash, - dependencies: null, - allTransitiveDependencies: null, -); + TabList.new, + name: r'tabListProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') ? null : _$tabListHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$TabList = Notifier>>; // ignore_for_file: type=lint diff --git a/app/lib/features/geckoview/domain/providers/tab_session.g.dart b/app/lib/features/geckoview/domain/providers/tab_session.g.dart index f74f6582..4ec35565 100644 --- a/app/lib/features/geckoview/domain/providers/tab_session.g.dart +++ b/app/lib/features/geckoview/domain/providers/tab_session.g.dart @@ -13,14 +13,15 @@ String _$selectedTabSessionNotifierHash() => @ProviderFor(selectedTabSessionNotifier) final selectedTabSessionNotifierProvider = AutoDisposeProvider>.internal( - selectedTabSessionNotifier, - name: r'selectedTabSessionNotifierProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$selectedTabSessionNotifierHash, - dependencies: null, - allTransitiveDependencies: null, -); + selectedTabSessionNotifier, + name: r'selectedTabSessionNotifierProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$selectedTabSessionNotifierHash, + dependencies: null, + allTransitiveDependencies: null, + ); @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element @@ -51,9 +52,7 @@ class _SystemHash { abstract class _$TabSession extends BuildlessAutoDisposeNotifier { late final String? tabId; - void build({ - required String? tabId, - }); + void build({required String? tabId}); } /// See also [TabSession]. @@ -66,21 +65,15 @@ class TabSessionFamily extends Family { const TabSessionFamily(); /// See also [TabSession]. - TabSessionProvider call({ - required String? tabId, - }) { - return TabSessionProvider( - tabId: tabId, - ); + TabSessionProvider call({required String? tabId}) { + return TabSessionProvider(tabId: tabId); } @override TabSessionProvider getProviderOverride( covariant TabSessionProvider provider, ) { - return call( - tabId: provider.tabId, - ); + return call(tabId: provider.tabId); } static const Iterable? _dependencies = null; @@ -102,21 +95,19 @@ class TabSessionFamily extends Family { class TabSessionProvider extends AutoDisposeNotifierProviderImpl { /// See also [TabSession]. - TabSessionProvider({ - required String? tabId, - }) : this._internal( - () => TabSession()..tabId = tabId, - from: tabSessionProvider, - name: r'tabSessionProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$tabSessionHash, - dependencies: TabSessionFamily._dependencies, - allTransitiveDependencies: - TabSessionFamily._allTransitiveDependencies, - tabId: tabId, - ); + TabSessionProvider({required String? tabId}) + : this._internal( + () => TabSession()..tabId = tabId, + from: tabSessionProvider, + name: r'tabSessionProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$tabSessionHash, + dependencies: TabSessionFamily._dependencies, + allTransitiveDependencies: TabSessionFamily._allTransitiveDependencies, + tabId: tabId, + ); TabSessionProvider._internal( super._createNotifier, { @@ -131,12 +122,8 @@ class TabSessionProvider final String? tabId; @override - void runNotifierBuild( - covariant TabSession notifier, - ) { - return notifier.build( - tabId: tabId, - ); + void runNotifierBuild(covariant TabSession notifier) { + return notifier.build(tabId: tabId); } @override @@ -189,5 +176,6 @@ class _TabSessionProviderElement @override String? get tabId => (origin as TabSessionProvider).tabId; } + // 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 diff --git a/app/lib/features/geckoview/domain/providers/tab_state.dart b/app/lib/features/geckoview/domain/providers/tab_state.dart index e8c03446..d924239f 100644 --- a/app/lib/features/geckoview/domain/providers/tab_state.dart +++ b/app/lib/features/geckoview/domain/providers/tab_state.dart @@ -126,7 +126,7 @@ class TabStates extends _$TabStates { final eventService = ref.watch(eventServiceProvider); final subscriptions = [ - eventService.tabContentEvents.listen((event) async { + eventService.tabContentEvents.listen((event) { _onTabContentStateChange(event); }), eventService.iconChangeEvents.listen((event) async { @@ -135,16 +135,16 @@ class TabStates extends _$TabStates { eventService.thumbnailEvents.listen((event) async { await _onThumbnailChange(event); }), - eventService.securityInfoEvents.listen((event) async { + eventService.securityInfoEvents.listen((event) { _onSecurityInfoStateChange(event); }), - eventService.historyEvents.listen((event) async { + eventService.historyEvents.listen((event) { _onHistoryStateChange(event); }), - eventService.readerableEvents.listen((event) async { + eventService.readerableEvents.listen((event) { _onReaderableStateChange(event); }), - eventService.findResultsEvent.listen((event) async { + eventService.findResultsEvent.listen((event) { _onFindResultsChange(event); }), ]; diff --git a/app/lib/features/geckoview/domain/providers/tab_state.g.dart b/app/lib/features/geckoview/domain/providers/tab_state.g.dart index 15e8f3c9..261f0300 100644 --- a/app/lib/features/geckoview/domain/providers/tab_state.g.dart +++ b/app/lib/features/geckoview/domain/providers/tab_state.g.dart @@ -39,21 +39,13 @@ class TabStateFamily extends Family { const TabStateFamily(); /// See also [tabState]. - TabStateProvider call( - String? tabId, - ) { - return TabStateProvider( - tabId, - ); + TabStateProvider call(String? tabId) { + return TabStateProvider(tabId); } @override - TabStateProvider getProviderOverride( - covariant TabStateProvider provider, - ) { - return call( - provider.tabId, - ); + TabStateProvider getProviderOverride(covariant TabStateProvider provider) { + return call(provider.tabId); } static const Iterable? _dependencies = null; @@ -74,23 +66,19 @@ class TabStateFamily extends Family { /// See also [tabState]. class TabStateProvider extends AutoDisposeProvider { /// See also [tabState]. - TabStateProvider( - String? tabId, - ) : this._internal( - (ref) => tabState( - ref as TabStateRef, - tabId, - ), - from: tabStateProvider, - name: r'tabStateProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$tabStateHash, - dependencies: TabStateFamily._dependencies, - allTransitiveDependencies: TabStateFamily._allTransitiveDependencies, - tabId: tabId, - ); + TabStateProvider(String? tabId) + : this._internal( + (ref) => tabState(ref as TabStateRef, tabId), + from: tabStateProvider, + name: r'tabStateProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$tabStateHash, + dependencies: TabStateFamily._dependencies, + allTransitiveDependencies: TabStateFamily._allTransitiveDependencies, + tabId: tabId, + ); TabStateProvider._internal( super._createNotifier, { @@ -105,9 +93,7 @@ class TabStateProvider extends AutoDisposeProvider { final String? tabId; @override - Override overrideWith( - TabState? Function(TabStateRef provider) create, - ) { + Override overrideWith(TabState? Function(TabStateRef provider) create) { return ProviderOverride( origin: this, override: TabStateProvider._internal( @@ -163,9 +149,10 @@ String _$selectedTabStateHash() => r'dbd36af7af286bd9d079f30e8e11bbda23bf7728'; final selectedTabStateProvider = AutoDisposeProvider.internal( selectedTabState, name: r'selectedTabStateProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$selectedTabStateHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$selectedTabStateHash, dependencies: null, allTransitiveDependencies: null, ); @@ -173,19 +160,21 @@ final selectedTabStateProvider = AutoDisposeProvider.internal( @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element typedef SelectedTabStateRef = AutoDisposeProviderRef; -String _$tabStatesHash() => r'2f4af9df4d648f7fb940f02e14f4a6762bb21d8a'; +String _$tabStatesHash() => r'b136dbf6d68b67f0fe0db302a4147b67789db853'; /// See also [TabStates]. @ProviderFor(TabStates) final tabStatesProvider = NotifierProvider>.internal( - TabStates.new, - name: r'tabStatesProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$tabStatesHash, - dependencies: null, - allTransitiveDependencies: null, -); + TabStates.new, + name: r'tabStatesProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$tabStatesHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$TabStates = Notifier>; // ignore_for_file: type=lint diff --git a/app/lib/features/geckoview/domain/providers/web_extensions_state.dart b/app/lib/features/geckoview/domain/providers/web_extensions_state.dart index 4fb8145e..1f7b7b0c 100644 --- a/app/lib/features/geckoview/domain/providers/web_extensions_state.dart +++ b/app/lib/features/geckoview/domain/providers/web_extensions_state.dart @@ -69,7 +69,7 @@ class WebExtensionsState extends _$WebExtensionsState { final subscriptions = switch (actionType) { WebExtensionActionType.browser => [ - addonService.browserExtensionStream.listen((event) async { + addonService.browserExtensionStream.listen((event) { _onExtensionUpdate(event); }), addonService.browserIconStream.listen((event) async { @@ -77,7 +77,7 @@ class WebExtensionsState extends _$WebExtensionsState { }), ], WebExtensionActionType.page => [ - addonService.pageExtensionStream.listen((event) async { + addonService.pageExtensionStream.listen((event) { _onExtensionUpdate(event); }), addonService.pageIconStream.listen((event) async { diff --git a/app/lib/features/geckoview/domain/providers/web_extensions_state.g.dart b/app/lib/features/geckoview/domain/providers/web_extensions_state.g.dart index 8aeb5f8d..36b62dbd 100644 --- a/app/lib/features/geckoview/domain/providers/web_extensions_state.g.dart +++ b/app/lib/features/geckoview/domain/providers/web_extensions_state.g.dart @@ -7,7 +7,7 @@ part of 'web_extensions_state.dart'; // ************************************************************************** String _$webExtensionsStateHash() => - r'9382461e7e72c31946a5308642baaac307977a15'; + r'eab924e9c17e805a3c29065289be5d1c8ffe3bc9'; /// Copied from Dart SDK class _SystemHash { @@ -34,9 +34,7 @@ abstract class _$WebExtensionsState extends BuildlessNotifier> { late final WebExtensionActionType actionType; - Map build( - WebExtensionActionType actionType, - ); + Map build(WebExtensionActionType actionType); } /// See also [WebExtensionsState]. @@ -49,21 +47,15 @@ class WebExtensionsStateFamily extends Family> { const WebExtensionsStateFamily(); /// See also [WebExtensionsState]. - WebExtensionsStateProvider call( - WebExtensionActionType actionType, - ) { - return WebExtensionsStateProvider( - actionType, - ); + WebExtensionsStateProvider call(WebExtensionActionType actionType) { + return WebExtensionsStateProvider(actionType); } @override WebExtensionsStateProvider getProviderOverride( covariant WebExtensionsStateProvider provider, ) { - return call( - provider.actionType, - ); + return call(provider.actionType); } static const Iterable? _dependencies = null; @@ -82,24 +74,27 @@ class WebExtensionsStateFamily extends Family> { } /// See also [WebExtensionsState]. -class WebExtensionsStateProvider extends NotifierProviderImpl< - WebExtensionsState, Map> { +class WebExtensionsStateProvider + extends + NotifierProviderImpl< + WebExtensionsState, + Map + > { /// See also [WebExtensionsState]. - WebExtensionsStateProvider( - WebExtensionActionType actionType, - ) : this._internal( - () => WebExtensionsState()..actionType = actionType, - from: webExtensionsStateProvider, - name: r'webExtensionsStateProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$webExtensionsStateHash, - dependencies: WebExtensionsStateFamily._dependencies, - allTransitiveDependencies: - WebExtensionsStateFamily._allTransitiveDependencies, - actionType: actionType, - ); + WebExtensionsStateProvider(WebExtensionActionType actionType) + : this._internal( + () => WebExtensionsState()..actionType = actionType, + from: webExtensionsStateProvider, + name: r'webExtensionsStateProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$webExtensionsStateHash, + dependencies: WebExtensionsStateFamily._dependencies, + allTransitiveDependencies: + WebExtensionsStateFamily._allTransitiveDependencies, + actionType: actionType, + ); WebExtensionsStateProvider._internal( super._createNotifier, { @@ -117,9 +112,7 @@ class WebExtensionsStateProvider extends NotifierProviderImpl< Map runNotifierBuild( covariant WebExtensionsState notifier, ) { - return notifier.build( - actionType, - ); + return notifier.build(actionType); } @override @@ -140,7 +133,7 @@ class WebExtensionsStateProvider extends NotifierProviderImpl< @override NotifierProviderElement> - createElement() { + createElement() { return _WebExtensionsStateProviderElement(this); } @@ -167,14 +160,19 @@ mixin WebExtensionsStateRef WebExtensionActionType get actionType; } -class _WebExtensionsStateProviderElement extends NotifierProviderElement< - WebExtensionsState, - Map> with WebExtensionsStateRef { +class _WebExtensionsStateProviderElement + extends + NotifierProviderElement< + WebExtensionsState, + Map + > + with WebExtensionsStateRef { _WebExtensionsStateProviderElement(super.provider); @override WebExtensionActionType get actionType => (origin as WebExtensionsStateProvider).actionType; } + // 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 diff --git a/app/lib/features/geckoview/domain/repositories/tab.dart b/app/lib/features/geckoview/domain/repositories/tab.dart index d7d46278..cce5a178 100644 --- a/app/lib/features/geckoview/domain/repositories/tab.dart +++ b/app/lib/features/geckoview/domain/repositories/tab.dart @@ -140,7 +140,7 @@ class TabRepository extends _$TabRepository { final tabStateDebouncer = Debouncer(const Duration(seconds: 3)); Map? debounceStartValue; - ref.listen(tabStatesProvider, (previous, next) async { + ref.listen(tabStatesProvider, (previous, next) { //Since state changes occure pretty often and our map always contains //the latest state, we cache the value before starting debouncing and //later diff to that, to avoid frequent database writes diff --git a/app/lib/features/geckoview/domain/repositories/tab.g.dart b/app/lib/features/geckoview/domain/repositories/tab.g.dart index 97c4c705..d4a55e25 100644 --- a/app/lib/features/geckoview/domain/repositories/tab.g.dart +++ b/app/lib/features/geckoview/domain/repositories/tab.g.dart @@ -6,16 +6,17 @@ part of 'tab.dart'; // RiverpodGenerator // ************************************************************************** -String _$tabRepositoryHash() => r'f7d6584d9d6a320ebe4964dd5dc80bda987c40c2'; +String _$tabRepositoryHash() => r'e6f9d58982f3bbe389e3a3299bb498c6e8e101eb'; /// See also [TabRepository]. @ProviderFor(TabRepository) final tabRepositoryProvider = NotifierProvider.internal( TabRepository.new, name: r'tabRepositoryProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$tabRepositoryHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$tabRepositoryHash, dependencies: null, allTransitiveDependencies: null, ); diff --git a/app/lib/features/geckoview/features/browser/domain/entities/sheet.dart b/app/lib/features/geckoview/features/browser/domain/entities/sheet.dart index a911d0ea..7d967630 100644 --- a/app/lib/features/geckoview/features/browser/domain/entities/sheet.dart +++ b/app/lib/features/geckoview/features/browser/domain/entities/sheet.dart @@ -7,7 +7,7 @@ final class ViewTabsSheet extends Sheet { bool get cacheHash => true; @override - List get hashParameters => []; + List get hashParameters => [null]; } final class TabQaChatSheet extends Sheet { diff --git a/app/lib/features/geckoview/features/browser/domain/providers.dart b/app/lib/features/geckoview/features/browser/domain/providers.dart index 7c196b3d..920b51da 100644 --- a/app/lib/features/geckoview/features/browser/domain/providers.dart +++ b/app/lib/features/geckoview/features/browser/domain/providers.dart @@ -1,7 +1,6 @@ import 'dart:async'; 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/domain/repositories/data.dart'; import 'package:lensai/features/geckoview/domain/entities/states/tab.dart'; @@ -184,9 +183,7 @@ EquatableCollection> seamlessFilteredTabPreviews( id: tab.id, title: tab.title ?? availableTabStates.collection[tab.id]!.title, icon: null, - url: - tab.cleanUrl.mapNotNull(Uri.tryParse) ?? - availableTabStates.collection[tab.id]!.url, + url: tab.cleanUrl ?? availableTabStates.collection[tab.id]!.url, highlightedUrl: tab.url, content: tab.extractedContent ?? tab.fullContent, ); diff --git a/app/lib/features/geckoview/features/browser/domain/providers.g.dart b/app/lib/features/geckoview/features/browser/domain/providers.g.dart index cdc27928..cbd3b76f 100644 --- a/app/lib/features/geckoview/features/browser/domain/providers.g.dart +++ b/app/lib/features/geckoview/features/browser/domain/providers.g.dart @@ -39,21 +39,15 @@ class AvailableTabIdsFamily extends Family>> { const AvailableTabIdsFamily(); /// See also [availableTabIds]. - AvailableTabIdsProvider call( - ContainerFilter containerFilter, - ) { - return AvailableTabIdsProvider( - containerFilter, - ); + AvailableTabIdsProvider call(ContainerFilter containerFilter) { + return AvailableTabIdsProvider(containerFilter); } @override AvailableTabIdsProvider getProviderOverride( covariant AvailableTabIdsProvider provider, ) { - return call( - provider.containerFilter, - ); + return call(provider.containerFilter); } static const Iterable? _dependencies = null; @@ -75,24 +69,20 @@ class AvailableTabIdsFamily extends Family>> { class AvailableTabIdsProvider extends AutoDisposeProvider>> { /// See also [availableTabIds]. - AvailableTabIdsProvider( - ContainerFilter containerFilter, - ) : this._internal( - (ref) => availableTabIds( - ref as AvailableTabIdsRef, - containerFilter, - ), - from: availableTabIdsProvider, - name: r'availableTabIdsProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$availableTabIdsHash, - dependencies: AvailableTabIdsFamily._dependencies, - allTransitiveDependencies: - AvailableTabIdsFamily._allTransitiveDependencies, - containerFilter: containerFilter, - ); + AvailableTabIdsProvider(ContainerFilter containerFilter) + : this._internal( + (ref) => availableTabIds(ref as AvailableTabIdsRef, containerFilter), + from: availableTabIdsProvider, + name: r'availableTabIdsProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$availableTabIdsHash, + dependencies: AvailableTabIdsFamily._dependencies, + allTransitiveDependencies: + AvailableTabIdsFamily._allTransitiveDependencies, + containerFilter: containerFilter, + ); AvailableTabIdsProvider._internal( super._createNotifier, { @@ -109,7 +99,7 @@ class AvailableTabIdsProvider @override Override overrideWith( EquatableCollection> Function(AvailableTabIdsRef provider) - create, + create, ) { return ProviderOverride( origin: this, @@ -127,7 +117,7 @@ class AvailableTabIdsProvider @override AutoDisposeProviderElement>> - createElement() { + createElement() { return _AvailableTabIdsProviderElement(this); } @@ -178,21 +168,15 @@ class AvailableTabStatesFamily const AvailableTabStatesFamily(); /// See also [availableTabStates]. - AvailableTabStatesProvider call( - ContainerFilter containerFilter, - ) { - return AvailableTabStatesProvider( - containerFilter, - ); + AvailableTabStatesProvider call(ContainerFilter containerFilter) { + return AvailableTabStatesProvider(containerFilter); } @override AvailableTabStatesProvider getProviderOverride( covariant AvailableTabStatesProvider provider, ) { - return call( - provider.containerFilter, - ); + return call(provider.containerFilter); } static const Iterable? _dependencies = null; @@ -214,24 +198,21 @@ class AvailableTabStatesFamily class AvailableTabStatesProvider extends AutoDisposeProvider>> { /// See also [availableTabStates]. - AvailableTabStatesProvider( - ContainerFilter containerFilter, - ) : this._internal( - (ref) => availableTabStates( - ref as AvailableTabStatesRef, - containerFilter, - ), - from: availableTabStatesProvider, - name: r'availableTabStatesProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$availableTabStatesHash, - dependencies: AvailableTabStatesFamily._dependencies, - allTransitiveDependencies: - AvailableTabStatesFamily._allTransitiveDependencies, - containerFilter: containerFilter, - ); + AvailableTabStatesProvider(ContainerFilter containerFilter) + : this._internal( + (ref) => + availableTabStates(ref as AvailableTabStatesRef, containerFilter), + from: availableTabStatesProvider, + name: r'availableTabStatesProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$availableTabStatesHash, + dependencies: AvailableTabStatesFamily._dependencies, + allTransitiveDependencies: + AvailableTabStatesFamily._allTransitiveDependencies, + containerFilter: containerFilter, + ); AvailableTabStatesProvider._internal( super._createNotifier, { @@ -248,8 +229,9 @@ class AvailableTabStatesProvider @override Override overrideWith( EquatableCollection> Function( - AvailableTabStatesRef provider) - create, + AvailableTabStatesRef provider, + ) + create, ) { return ProviderOverride( origin: this, @@ -267,7 +249,7 @@ class AvailableTabStatesProvider @override AutoDisposeProviderElement>> - createElement() { + createElement() { return _AvailableTabStatesProviderElement(this); } @@ -294,8 +276,10 @@ mixin AvailableTabStatesRef ContainerFilter get containerFilter; } -class _AvailableTabStatesProviderElement extends AutoDisposeProviderElement< - EquatableCollection>> with AvailableTabStatesRef { +class _AvailableTabStatesProviderElement + extends + AutoDisposeProviderElement>> + with AvailableTabStatesRef { _AvailableTabStatesProviderElement(super.provider); @override @@ -321,20 +305,14 @@ class SeamlessFilteredTabIdsFamily TabSearchPartition searchPartition, ContainerFilter containerFilter, ) { - return SeamlessFilteredTabIdsProvider( - searchPartition, - containerFilter, - ); + return SeamlessFilteredTabIdsProvider(searchPartition, containerFilter); } @override SeamlessFilteredTabIdsProvider getProviderOverride( covariant SeamlessFilteredTabIdsProvider provider, ) { - return call( - provider.searchPartition, - provider.containerFilter, - ); + return call(provider.searchPartition, provider.containerFilter); } static const Iterable? _dependencies = null; @@ -360,23 +338,23 @@ class SeamlessFilteredTabIdsProvider TabSearchPartition searchPartition, ContainerFilter containerFilter, ) : this._internal( - (ref) => seamlessFilteredTabIds( - ref as SeamlessFilteredTabIdsRef, - searchPartition, - containerFilter, - ), - from: seamlessFilteredTabIdsProvider, - name: r'seamlessFilteredTabIdsProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$seamlessFilteredTabIdsHash, - dependencies: SeamlessFilteredTabIdsFamily._dependencies, - allTransitiveDependencies: - SeamlessFilteredTabIdsFamily._allTransitiveDependencies, - searchPartition: searchPartition, - containerFilter: containerFilter, - ); + (ref) => seamlessFilteredTabIds( + ref as SeamlessFilteredTabIdsRef, + searchPartition, + containerFilter, + ), + from: seamlessFilteredTabIdsProvider, + name: r'seamlessFilteredTabIdsProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$seamlessFilteredTabIdsHash, + dependencies: SeamlessFilteredTabIdsFamily._dependencies, + allTransitiveDependencies: + SeamlessFilteredTabIdsFamily._allTransitiveDependencies, + searchPartition: searchPartition, + containerFilter: containerFilter, + ); SeamlessFilteredTabIdsProvider._internal( super._createNotifier, { @@ -395,8 +373,9 @@ class SeamlessFilteredTabIdsProvider @override Override overrideWith( EquatableCollection> Function( - SeamlessFilteredTabIdsRef provider) - create, + SeamlessFilteredTabIdsRef provider, + ) + create, ) { return ProviderOverride( origin: this, @@ -415,7 +394,7 @@ class SeamlessFilteredTabIdsProvider @override AutoDisposeProviderElement>> - createElement() { + createElement() { return _SeamlessFilteredTabIdsProviderElement(this); } @@ -461,7 +440,7 @@ class _SeamlessFilteredTabIdsProviderElement } String _$seamlessFilteredTabPreviewsHash() => - r'7a70eb2f3f59de5188d94a73790e39c339a6293b'; + r'6beefa943d298b81482276f12484e27346ff9907'; /// See also [seamlessFilteredTabPreviews]. @ProviderFor(seamlessFilteredTabPreviews) @@ -488,10 +467,7 @@ class SeamlessFilteredTabPreviewsFamily SeamlessFilteredTabPreviewsProvider getProviderOverride( covariant SeamlessFilteredTabPreviewsProvider provider, ) { - return call( - provider.searchPartition, - provider.containerFilter, - ); + return call(provider.searchPartition, provider.containerFilter); } static const Iterable? _dependencies = null; @@ -517,23 +493,23 @@ class SeamlessFilteredTabPreviewsProvider TabSearchPartition searchPartition, ContainerFilter containerFilter, ) : this._internal( - (ref) => seamlessFilteredTabPreviews( - ref as SeamlessFilteredTabPreviewsRef, - searchPartition, - containerFilter, - ), - from: seamlessFilteredTabPreviewsProvider, - name: r'seamlessFilteredTabPreviewsProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$seamlessFilteredTabPreviewsHash, - dependencies: SeamlessFilteredTabPreviewsFamily._dependencies, - allTransitiveDependencies: - SeamlessFilteredTabPreviewsFamily._allTransitiveDependencies, - searchPartition: searchPartition, - containerFilter: containerFilter, - ); + (ref) => seamlessFilteredTabPreviews( + ref as SeamlessFilteredTabPreviewsRef, + searchPartition, + containerFilter, + ), + from: seamlessFilteredTabPreviewsProvider, + name: r'seamlessFilteredTabPreviewsProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$seamlessFilteredTabPreviewsHash, + dependencies: SeamlessFilteredTabPreviewsFamily._dependencies, + allTransitiveDependencies: + SeamlessFilteredTabPreviewsFamily._allTransitiveDependencies, + searchPartition: searchPartition, + containerFilter: containerFilter, + ); SeamlessFilteredTabPreviewsProvider._internal( super._createNotifier, { @@ -552,8 +528,9 @@ class SeamlessFilteredTabPreviewsProvider @override Override overrideWith( EquatableCollection> Function( - SeamlessFilteredTabPreviewsRef provider) - create, + SeamlessFilteredTabPreviewsRef provider, + ) + create, ) { return ProviderOverride( origin: this, @@ -572,7 +549,7 @@ class SeamlessFilteredTabPreviewsProvider @override AutoDisposeProviderElement>> - createElement() { + createElement() { return _SeamlessFilteredTabPreviewsProviderElement(this); } @@ -623,9 +600,7 @@ String _$selectedBangTriggerHash() => abstract class _$SelectedBangTrigger extends BuildlessNotifier { late final String? domain; - String? build({ - String? domain, - }); + String? build({String? domain}); } /// See also [SelectedBangTrigger]. @@ -638,21 +613,15 @@ class SelectedBangTriggerFamily extends Family { const SelectedBangTriggerFamily(); /// See also [SelectedBangTrigger]. - SelectedBangTriggerProvider call({ - String? domain, - }) { - return SelectedBangTriggerProvider( - domain: domain, - ); + SelectedBangTriggerProvider call({String? domain}) { + return SelectedBangTriggerProvider(domain: domain); } @override SelectedBangTriggerProvider getProviderOverride( covariant SelectedBangTriggerProvider provider, ) { - return call( - domain: provider.domain, - ); + return call(domain: provider.domain); } static const Iterable? _dependencies = null; @@ -674,21 +643,20 @@ class SelectedBangTriggerFamily extends Family { class SelectedBangTriggerProvider extends NotifierProviderImpl { /// See also [SelectedBangTrigger]. - SelectedBangTriggerProvider({ - String? domain, - }) : this._internal( - () => SelectedBangTrigger()..domain = domain, - from: selectedBangTriggerProvider, - name: r'selectedBangTriggerProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$selectedBangTriggerHash, - dependencies: SelectedBangTriggerFamily._dependencies, - allTransitiveDependencies: - SelectedBangTriggerFamily._allTransitiveDependencies, - domain: domain, - ); + SelectedBangTriggerProvider({String? domain}) + : this._internal( + () => SelectedBangTrigger()..domain = domain, + from: selectedBangTriggerProvider, + name: r'selectedBangTriggerProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$selectedBangTriggerHash, + dependencies: SelectedBangTriggerFamily._dependencies, + allTransitiveDependencies: + SelectedBangTriggerFamily._allTransitiveDependencies, + domain: domain, + ); SelectedBangTriggerProvider._internal( super._createNotifier, { @@ -703,12 +671,8 @@ class SelectedBangTriggerProvider final String? domain; @override - String? runNotifierBuild( - covariant SelectedBangTrigger notifier, - ) { - return notifier.build( - domain: domain, - ); + String? runNotifierBuild(covariant SelectedBangTrigger notifier) { + return notifier.build(domain: domain); } @override @@ -768,9 +732,7 @@ abstract class _$SelectedBangData extends BuildlessAutoDisposeNotifier { late final String? domain; - BangData? build({ - String? domain, - }); + BangData? build({String? domain}); } /// See also [SelectedBangData]. @@ -783,21 +745,15 @@ class SelectedBangDataFamily extends Family { const SelectedBangDataFamily(); /// See also [SelectedBangData]. - SelectedBangDataProvider call({ - String? domain, - }) { - return SelectedBangDataProvider( - domain: domain, - ); + SelectedBangDataProvider call({String? domain}) { + return SelectedBangDataProvider(domain: domain); } @override SelectedBangDataProvider getProviderOverride( covariant SelectedBangDataProvider provider, ) { - return call( - domain: provider.domain, - ); + return call(domain: provider.domain); } static const Iterable? _dependencies = null; @@ -819,21 +775,20 @@ class SelectedBangDataFamily extends Family { class SelectedBangDataProvider extends AutoDisposeNotifierProviderImpl { /// See also [SelectedBangData]. - SelectedBangDataProvider({ - String? domain, - }) : this._internal( - () => SelectedBangData()..domain = domain, - from: selectedBangDataProvider, - name: r'selectedBangDataProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$selectedBangDataHash, - dependencies: SelectedBangDataFamily._dependencies, - allTransitiveDependencies: - SelectedBangDataFamily._allTransitiveDependencies, - domain: domain, - ); + SelectedBangDataProvider({String? domain}) + : this._internal( + () => SelectedBangData()..domain = domain, + from: selectedBangDataProvider, + name: r'selectedBangDataProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$selectedBangDataHash, + dependencies: SelectedBangDataFamily._dependencies, + allTransitiveDependencies: + SelectedBangDataFamily._allTransitiveDependencies, + domain: domain, + ); SelectedBangDataProvider._internal( super._createNotifier, { @@ -848,12 +803,8 @@ class SelectedBangDataProvider final String? domain; @override - BangData? runNotifierBuild( - covariant SelectedBangData notifier, - ) { - return notifier.build( - domain: domain, - ); + BangData? runNotifierBuild(covariant SelectedBangData notifier) { + return notifier.build(domain: domain); } @override @@ -874,7 +825,7 @@ class SelectedBangDataProvider @override AutoDisposeNotifierProviderElement - createElement() { + createElement() { return _SelectedBangDataProviderElement(this); } @@ -915,9 +866,10 @@ String _$showFindInPageHash() => r'7ee5703f7d0c7e8a8dd6b0849d7b1e0a41fe24d9'; final showFindInPageProvider = NotifierProvider.internal( ShowFindInPage.new, name: r'showFindInPageProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$showFindInPageHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$showFindInPageHash, dependencies: null, allTransitiveDependencies: null, ); diff --git a/app/lib/features/geckoview/features/browser/domain/providers/intent.g.dart b/app/lib/features/geckoview/features/browser/domain/providers/intent.g.dart index c6f1657f..789d5ed6 100644 --- a/app/lib/features/geckoview/features/browser/domain/providers/intent.g.dart +++ b/app/lib/features/geckoview/features/browser/domain/providers/intent.g.dart @@ -12,13 +12,15 @@ String _$intentStreamHash() => r'e78268ec703cd0d1f08d41b9e10a487e6000b7da'; @ProviderFor(IntentStream) final intentStreamProvider = AutoDisposeStreamNotifierProvider.internal( - IntentStream.new, - name: r'intentStreamProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') ? null : _$intentStreamHash, - dependencies: null, - allTransitiveDependencies: null, -); + IntentStream.new, + name: r'intentStreamProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$intentStreamHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$IntentStream = AutoDisposeStreamNotifier; // ignore_for_file: type=lint diff --git a/app/lib/features/geckoview/features/browser/domain/services/browser_data.g.dart b/app/lib/features/geckoview/features/browser/domain/services/browser_data.g.dart index 78c86052..1a8e7bb2 100644 --- a/app/lib/features/geckoview/features/browser/domain/services/browser_data.g.dart +++ b/app/lib/features/geckoview/features/browser/domain/services/browser_data.g.dart @@ -13,14 +13,15 @@ String _$browserDataServiceHash() => @ProviderFor(BrowserDataService) final browserDataServiceProvider = AutoDisposeNotifierProvider.internal( - BrowserDataService.new, - name: r'browserDataServiceProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$browserDataServiceHash, - dependencies: null, - allTransitiveDependencies: null, -); + BrowserDataService.new, + name: r'browserDataServiceProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$browserDataServiceHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$BrowserDataService = AutoDisposeNotifier; // ignore_for_file: type=lint diff --git a/app/lib/features/geckoview/features/browser/domain/services/engine_settings_replication.g.dart b/app/lib/features/geckoview/features/browser/domain/services/engine_settings_replication.g.dart index 63850815..44ff7d95 100644 --- a/app/lib/features/geckoview/features/browser/domain/services/engine_settings_replication.g.dart +++ b/app/lib/features/geckoview/features/browser/domain/services/engine_settings_replication.g.dart @@ -13,14 +13,15 @@ String _$engineSettingsReplicationServiceHash() => @ProviderFor(EngineSettingsReplicationService) final engineSettingsReplicationServiceProvider = NotifierProvider.internal( - EngineSettingsReplicationService.new, - name: r'engineSettingsReplicationServiceProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$engineSettingsReplicationServiceHash, - dependencies: null, - allTransitiveDependencies: null, -); + EngineSettingsReplicationService.new, + name: r'engineSettingsReplicationServiceProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$engineSettingsReplicationServiceHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$EngineSettingsReplicationService = Notifier; // ignore_for_file: type=lint diff --git a/app/lib/features/geckoview/features/browser/domain/services/proxy_settings_replucation.g.dart b/app/lib/features/geckoview/features/browser/domain/services/proxy_settings_replucation.g.dart index fe46d2cd..9d2fbc3c 100644 --- a/app/lib/features/geckoview/features/browser/domain/services/proxy_settings_replucation.g.dart +++ b/app/lib/features/geckoview/features/browser/domain/services/proxy_settings_replucation.g.dart @@ -13,14 +13,15 @@ String _$proxySettingsReplucationHash() => @ProviderFor(ProxySettingsReplucation) final proxySettingsReplucationProvider = NotifierProvider.internal( - ProxySettingsReplucation.new, - name: r'proxySettingsReplucationProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$proxySettingsReplucationHash, - dependencies: null, - allTransitiveDependencies: null, -); + ProxySettingsReplucation.new, + name: r'proxySettingsReplucationProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$proxySettingsReplucationHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$ProxySettingsReplucation = Notifier; // ignore_for_file: type=lint diff --git a/app/lib/features/geckoview/features/browser/presentation/dialogs/web_page_dialog.dart b/app/lib/features/geckoview/features/browser/presentation/dialogs/web_page_dialog.dart index 62ddfa56..bd1f2331 100644 --- a/app/lib/features/geckoview/features/browser/presentation/dialogs/web_page_dialog.dart +++ b/app/lib/features/geckoview/features/browser/presentation/dialogs/web_page_dialog.dart @@ -7,7 +7,6 @@ import 'package:flutter_material_design_icons/flutter_material_design_icons.dart import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.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/presentation/widgets/site_search.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/user/domain/providers.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/utils/ui_helper.dart' as ui_helper; @@ -100,13 +100,13 @@ class WebPageDialog extends HookConsumerWidget { loading: () => SiteSearch( domain: url.host, - availableBangs: [ - BangData( - websiteName: 'websiteName', - domain: 'domain', - trigger: 'trigger', - urlTemplate: 'urlTemplate', - ), + availableBangs: const [ + // BangData( + // websiteName: 'websiteName', + // domain: 'domain', + // trigger: 'trigger', + // urlTemplate: 'urlTemplate', + // ), ], ), ), @@ -115,6 +115,7 @@ class WebPageDialog extends HookConsumerWidget { availableBangCount == null || availableBangCount > 0) const Divider(), + WebsiteFeedTile(url, precachedInfo: precachedInfo), ListTile( leading: const Icon(MdiIcons.contentCopy), title: const Text('Copy address'), @@ -138,11 +139,23 @@ class WebPageDialog extends HookConsumerWidget { leading: const Icon(MdiIcons.tabPlus), title: const Text('Clone tab'), onTap: () async { - await ref + final tabId = await ref .read(tabRepositoryProvider.notifier) .addTab(url: url); 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(); } }, diff --git a/app/lib/features/geckoview/features/browser/presentation/screens/browser.dart b/app/lib/features/geckoview/features/browser/presentation/screens/browser.dart index 0d13fa5e..9b275895 100644 --- a/app/lib/features/geckoview/features/browser/presentation/screens/browser.dart +++ b/app/lib/features/geckoview/features/browser/presentation/screens/browser.dart @@ -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/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/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; class BrowserScreen extends HookConsumerWidget { @@ -98,7 +96,7 @@ class BrowserScreen extends HookConsumerWidget { .read(tabRepositoryProvider.notifier) .closeTab(details.data.tabId); }, - builder: (context, _, __) { + builder: (context, _, _) { return OverlayPortal( controller: overlayController, overlayChildBuilder: (context) { @@ -160,6 +158,11 @@ class BrowserScreen extends HookConsumerWidget { return true; } + //Go router has routes to go back to + if (context.canPop()) { + return true; + } + if (lastBackButtonPress.value != null && DateTime.now().difference(lastBackButtonPress.value!) < const Duration(seconds: 2)) { diff --git a/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/bottom_app_bar.dart b/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/bottom_app_bar.dart index 1663ad02..14a93d08 100644 --- a/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/bottom_app_bar.dart +++ b/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/bottom_app_bar.dart @@ -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/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/web_feed/domain/services/feed_reader.dart'; import 'package:lensai/presentation/hooks/menu_controller.dart'; import 'package:lensai/presentation/icons/tor_icons.dart'; import 'package:lensai/utils/ui_helper.dart' as ui_helper; @@ -359,10 +360,28 @@ class BrowserBottomAppBar extends HookConsumerWidget { ), MenuItemButton( 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), - 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'), ), ], ), diff --git a/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/browser_view.dart b/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/browser_view.dart index 91acc7c7..630fd269 100644 --- a/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/browser_view.dart +++ b/app/lib/features/geckoview/features/browser/presentation/widgets/browser_modules/browser_view.dart @@ -20,7 +20,7 @@ import 'package:lensai/features/user/domain/services/local_authentication.dart'; class BrowserView extends StatefulHookConsumerWidget { final Duration screenshotPeriod; - final FutureOr Function()? postInitializationStep; + final Future Function()? postInitializationStep; const BrowserView({ this.screenshotPeriod = const Duration(seconds: 10), diff --git a/app/lib/features/geckoview/features/browser/presentation/widgets/extension_badge_icon.dart b/app/lib/features/geckoview/features/browser/presentation/widgets/extension_badge_icon.dart index 4559f3d5..935174bc 100644 --- a/app/lib/features/geckoview/features/browser/presentation/widgets/extension_badge_icon.dart +++ b/app/lib/features/geckoview/features/browser/presentation/widgets/extension_badge_icon.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:lensai/extensions/nullable.dart'; import 'package:lensai/features/geckoview/domain/entities/states/web_extension.dart'; class ExtensionBadgeIcon extends StatelessWidget { @@ -8,7 +9,7 @@ class ExtensionBadgeIcon extends StatelessWidget { @override Widget build(BuildContext context) { - final hasBadge = state.badgeText?.isNotEmpty ?? false; + final hasBadge = state.badgeText.isNotEmpty; return Badge( isLabelVisible: hasBadge, diff --git a/app/lib/features/geckoview/features/browser/presentation/widgets/sheets/view_tabs.dart b/app/lib/features/geckoview/features/browser/presentation/widgets/sheets/view_tabs.dart index 5a9fb6b0..2a3bd62e 100644 --- a/app/lib/features/geckoview/features/browser/presentation/widgets/sheets/view_tabs.dart +++ b/app/lib/features/geckoview/features/browser/presentation/widgets/sheets/view_tabs.dart @@ -137,7 +137,7 @@ class _TabSheetHeader extends HookConsumerWidget { .maybeStartProxy(context); } }, - onDeleted: (container) async { + onDeleted: (container) { ref .read(selectedContainerProvider.notifier) .clearContainer(); diff --git a/app/lib/features/geckoview/features/contextmenu/extensions/hit_result.dart b/app/lib/features/geckoview/features/contextmenu/extensions/hit_result.dart index 77c056cd..2e14aa55 100644 --- a/app/lib/features/geckoview/features/contextmenu/extensions/hit_result.dart +++ b/app/lib/features/geckoview/features/contextmenu/extensions/hit_result.dart @@ -1,6 +1,7 @@ import 'dart:convert'; 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'; extension HitResultJson on HitResult { @@ -38,13 +39,11 @@ extension HitResultX on HitResult { UnknownHitResult(src: final src) => src, ImageSrcHitResult(uri: final uri) => uri, ImageHitResult(src: final src, title: final title) => - title?.isEmpty ?? true - ? (src.length > maxTitleLength ? 'image' : src) - : title!, + title.isEmpty ? (src.length > maxTitleLength ? 'image' : src) : title!, VideoHitResult(src: final src, title: final title) => - (title?.isEmpty ?? true) ? src : title!, + (title.isEmpty) ? src : title!, AudioHitResult(src: final src, title: final title) => - (title?.isEmpty ?? true) ? src : title!, + (title.isEmpty) ? src : title!, _ => 'about:blank', }; } diff --git a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/copy_email.dart b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/copy_email.dart index 29e29a23..f0af8f97 100644 --- a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/copy_email.dart +++ b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/copy_email.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.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:lensai/extensions/nullable.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); if (email != null) { await Clipboard.setData(ClipboardData(text: email)); + + if (context.mounted) { + context.pop(); + } } }, ); diff --git a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/copy_image.dart b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/copy_image.dart index 738d841e..cead7f50 100644 --- a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/copy_image.dart +++ b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/copy_image.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.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:lensai/features/geckoview/domain/providers/tab_state.dart'; import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart'; @@ -30,6 +31,10 @@ class CopyImage extends HookConsumerWidget { isPrivate: currentTab.isPrivate, referrerUrl: currentTab.url, ); + + if (context.mounted) { + context.pop(); + } } }, ); diff --git a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/copy_image_location.dart b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/copy_image_location.dart index 561e5f26..38da55a8 100644 --- a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/copy_image_location.dart +++ b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/copy_image_location.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.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:lensai/extensions/nullable.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), title: const Text('Copy image location'), onTap: () async { - await hitResult.tryGetLink().mapNotNull( - (link) => Clipboard.setData(ClipboardData(text: link.toString())), - ); + await hitResult.tryGetLink().mapNotNull((link) async { + await Clipboard.setData(ClipboardData(text: link.toString())); + + if (context.mounted) { + context.pop(); + } + }); }, ); } diff --git a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/copy_link.dart b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/copy_link.dart index 206a8669..45dae781 100644 --- a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/copy_link.dart +++ b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/copy_link.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.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:lensai/extensions/nullable.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), title: const Text('Copy link'), onTap: () async { - await hitResult.tryGetLink().mapNotNull( - (link) => Clipboard.setData(ClipboardData(text: link.toString())), - ); + await hitResult.tryGetLink().mapNotNull((link) async { + await Clipboard.setData(ClipboardData(text: link.toString())); + + if (context.mounted) { + context.pop(); + } + }); }, ); } diff --git a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/launch_external.dart b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/launch_external.dart index 845e3640..46d08ad9 100644 --- a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/launch_external.dart +++ b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/launch_external.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.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:lensai/extensions/nullable.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), title: const Text('Launch External'), onTap: () async { - await hitResult.tryGetLink().mapNotNull( - (url) => launchUrlFeedback(context, url), - ); + await hitResult.tryGetLink().mapNotNull((url) async { + await launchUrlFeedback(context, url); + + if (context.mounted) { + context.pop(); + } + }); }, ); } diff --git a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/open_image_new_tab.dart b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/open_image_new_tab.dart index ba660c25..3016f0d8 100644 --- a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/open_image_new_tab.dart +++ b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/open_image_new_tab.dart @@ -1,10 +1,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.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:lensai/features/geckoview/domain/providers/selected_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/utils/ui_helper.dart'; class OpenImageInNewTab extends HookConsumerWidget { final HitResult hitResult; @@ -22,9 +24,28 @@ class OpenImageInNewTab extends HookConsumerWidget { title: const Text('Open image in new tab'), onTap: () async { final currentTabId = ref.read(selectedTabProvider); - await ref + + final tabId = await ref .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(); + } }, ); } diff --git a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/open_new_tab.dart b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/open_new_tab.dart index d8da35aa..9fa39425 100644 --- a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/open_new_tab.dart +++ b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/open_new_tab.dart @@ -1,9 +1,12 @@ import 'package:flutter/material.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.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:lensai/features/geckoview/domain/providers/selected_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/utils/ui_helper.dart'; class OpenInNewTab extends HookConsumerWidget { final HitResult hitResult; @@ -20,9 +23,29 @@ class OpenInNewTab extends HookConsumerWidget { leading: const Icon(MdiIcons.tabPlus), title: const Text('Open in new tab'), onTap: () async { - await ref + final currentTabId = ref.read(selectedTabProvider); + + final tabId = await ref .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(); + } }, ); } diff --git a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/save_file.dart b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/save_file.dart index 7deba5dd..9a1ec0e1 100644 --- a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/save_file.dart +++ b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/save_file.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.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:lensai/features/geckoview/domain/providers/tab_state.dart'; import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart'; @@ -31,6 +32,10 @@ class SaveFile extends HookConsumerWidget { isPrivate: currentTab.isPrivate, referrerUrl: currentTab.url, ); + + if (context.mounted) { + context.pop(); + } } }, ); diff --git a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/save_image.dart b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/save_image.dart index 255ba1ca..f638f288 100644 --- a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/save_image.dart +++ b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/save_image.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.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:lensai/features/geckoview/domain/providers/tab_state.dart'; import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart'; @@ -31,6 +32,10 @@ class SaveImage extends HookConsumerWidget { isPrivate: currentTab.isPrivate, referrerUrl: currentTab.url, ); + + if (context.mounted) { + context.pop(); + } } }, ); diff --git a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/share_email.dart b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/share_email.dart index 9a64ce6a..f328d075 100644 --- a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/share_email.dart +++ b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/share_email.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.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:lensai/extensions/nullable.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); if (email != null) { await Share.share(email); + + if (context.mounted) { + context.pop(); + } } }, ); diff --git a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/share_image.dart b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/share_image.dart index fe0691e5..e085fe30 100644 --- a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/share_image.dart +++ b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/share_image.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_material_design_icons/flutter_material_design_icons.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:lensai/features/geckoview/domain/providers/tab_state.dart'; import 'package:lensai/features/geckoview/features/contextmenu/extensions/hit_result.dart'; @@ -30,6 +31,10 @@ class ShareImage extends HookConsumerWidget { isPrivate: currentTab.isPrivate, referrerUrl: currentTab.url, ); + + if (context.mounted) { + context.pop(); + } } }, ); diff --git a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/share_link.dart b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/share_link.dart index 7c519753..6ddc828c 100644 --- a/app/lib/features/geckoview/features/contextmenu/presentation/candidates/share_link.dart +++ b/app/lib/features/geckoview/features/contextmenu/presentation/candidates/share_link.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.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:lensai/extensions/nullable.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'), onTap: () async { await hitResult.tryGetLink().mapNotNull((url) => Share.shareUri(url)); + + if (context.mounted) { + context.pop(); + } }, ); } diff --git a/app/lib/features/geckoview/features/find_in_page/domain/repositories/find_in_page.g.dart b/app/lib/features/geckoview/features/find_in_page/domain/repositories/find_in_page.g.dart index abfff6b4..95b38ebc 100644 --- a/app/lib/features/geckoview/features/find_in_page/domain/repositories/find_in_page.g.dart +++ b/app/lib/features/geckoview/features/find_in_page/domain/repositories/find_in_page.g.dart @@ -34,9 +34,7 @@ abstract class _$FindInPageRepository extends BuildlessAutoDisposeNotifier { late final String? tabId; - void build( - String? tabId, - ); + void build(String? tabId); } /// See also [FindInPageRepository]. @@ -49,21 +47,15 @@ class FindInPageRepositoryFamily extends Family { const FindInPageRepositoryFamily(); /// See also [FindInPageRepository]. - FindInPageRepositoryProvider call( - String? tabId, - ) { - return FindInPageRepositoryProvider( - tabId, - ); + FindInPageRepositoryProvider call(String? tabId) { + return FindInPageRepositoryProvider(tabId); } @override FindInPageRepositoryProvider getProviderOverride( covariant FindInPageRepositoryProvider provider, ) { - return call( - provider.tabId, - ); + return call(provider.tabId); } static const Iterable? _dependencies = null; @@ -85,21 +77,20 @@ class FindInPageRepositoryFamily extends Family { class FindInPageRepositoryProvider extends AutoDisposeNotifierProviderImpl { /// See also [FindInPageRepository]. - FindInPageRepositoryProvider( - String? tabId, - ) : this._internal( - () => FindInPageRepository()..tabId = tabId, - from: findInPageRepositoryProvider, - name: r'findInPageRepositoryProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$findInPageRepositoryHash, - dependencies: FindInPageRepositoryFamily._dependencies, - allTransitiveDependencies: - FindInPageRepositoryFamily._allTransitiveDependencies, - tabId: tabId, - ); + FindInPageRepositoryProvider(String? tabId) + : this._internal( + () => FindInPageRepository()..tabId = tabId, + from: findInPageRepositoryProvider, + name: r'findInPageRepositoryProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$findInPageRepositoryHash, + dependencies: FindInPageRepositoryFamily._dependencies, + allTransitiveDependencies: + FindInPageRepositoryFamily._allTransitiveDependencies, + tabId: tabId, + ); FindInPageRepositoryProvider._internal( super._createNotifier, { @@ -114,12 +105,8 @@ class FindInPageRepositoryProvider final String? tabId; @override - void runNotifierBuild( - covariant FindInPageRepository notifier, - ) { - return notifier.build( - tabId, - ); + void runNotifierBuild(covariant FindInPageRepository notifier) { + return notifier.build(tabId); } @override @@ -140,7 +127,7 @@ class FindInPageRepositoryProvider @override AutoDisposeNotifierProviderElement - createElement() { + createElement() { return _FindInPageRepositoryProviderElement(this); } @@ -173,5 +160,6 @@ class _FindInPageRepositoryProviderElement @override String? get tabId => (origin as FindInPageRepositoryProvider).tabId; } + // 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 diff --git a/app/lib/features/geckoview/features/find_in_page/presentation/controllers/find_in_page_visibility.g.dart b/app/lib/features/geckoview/features/find_in_page/presentation/controllers/find_in_page_visibility.g.dart index 0965297b..0a58ce9e 100644 --- a/app/lib/features/geckoview/features/find_in_page/presentation/controllers/find_in_page_visibility.g.dart +++ b/app/lib/features/geckoview/features/find_in_page/presentation/controllers/find_in_page_visibility.g.dart @@ -13,14 +13,15 @@ String _$findInPageVisibilityControllerHash() => @ProviderFor(FindInPageVisibilityController) final findInPageVisibilityControllerProvider = AutoDisposeNotifierProvider.internal( - FindInPageVisibilityController.new, - name: r'findInPageVisibilityControllerProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$findInPageVisibilityControllerHash, - dependencies: null, - allTransitiveDependencies: null, -); + FindInPageVisibilityController.new, + name: r'findInPageVisibilityControllerProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$findInPageVisibilityControllerHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$FindInPageVisibilityController = AutoDisposeNotifier; // ignore_for_file: type=lint diff --git a/app/lib/features/geckoview/features/preferences/data/models/preference_setting.g.dart b/app/lib/features/geckoview/features/preferences/data/models/preference_setting.g.dart index 1dee4e96..4b55c34f 100644 --- a/app/lib/features/geckoview/features/preferences/data/models/preference_setting.g.dart +++ b/app/lib/features/geckoview/features/preferences/data/models/preference_setting.g.dart @@ -39,7 +39,6 @@ class _$PreferenceSettingGroupCWProxyImpl this(settings: settings); @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. /// /// Usage @@ -51,14 +50,16 @@ class _$PreferenceSettingGroupCWProxyImpl Object? settings = const $CopyWithPlaceholder(), }) { return PreferenceSettingGroup( - description: description == const $CopyWithPlaceholder() - ? _value.description - // ignore: cast_nullable_to_non_nullable - : description as String?, - settings: settings == const $CopyWithPlaceholder() - ? _value.settings - // ignore: cast_nullable_to_non_nullable - : settings as Map, + description: + description == const $CopyWithPlaceholder() + ? _value.description + // ignore: cast_nullable_to_non_nullable + : description as String?, + settings: + settings == const $CopyWithPlaceholder() + ? _value.settings + // ignore: cast_nullable_to_non_nullable + : settings as Map, ); } } @@ -128,7 +129,6 @@ class _$PreferenceSettingCWProxyImpl implements _$PreferenceSettingCWProxy { this(shouldBeDefault: shouldBeDefault); @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. /// /// Usage @@ -144,30 +144,36 @@ class _$PreferenceSettingCWProxyImpl implements _$PreferenceSettingCWProxy { Object? shouldBeDefault = const $CopyWithPlaceholder(), }) { return PreferenceSetting( - value: value == const $CopyWithPlaceholder() - ? _value.value - // ignore: cast_nullable_to_non_nullable - : value as Object, - title: title == const $CopyWithPlaceholder() - ? _value.title - // ignore: cast_nullable_to_non_nullable - : title as String?, - description: description == const $CopyWithPlaceholder() - ? _value.description - // ignore: cast_nullable_to_non_nullable - : description as String?, - actualValue: actualValue == const $CopyWithPlaceholder() - ? _value.actualValue - // ignore: cast_nullable_to_non_nullable - : actualValue as Object?, - requireUserOptIn: requireUserOptIn == const $CopyWithPlaceholder() - ? _value.requireUserOptIn - // ignore: cast_nullable_to_non_nullable - : requireUserOptIn as bool, - shouldBeDefault: shouldBeDefault == const $CopyWithPlaceholder() - ? _value.shouldBeDefault - // ignore: cast_nullable_to_non_nullable - : shouldBeDefault as bool, + value: + value == const $CopyWithPlaceholder() + ? _value.value + // ignore: cast_nullable_to_non_nullable + : value as Object, + title: + title == const $CopyWithPlaceholder() + ? _value.title + // ignore: cast_nullable_to_non_nullable + : title as String?, + description: + description == const $CopyWithPlaceholder() + ? _value.description + // ignore: cast_nullable_to_non_nullable + : description as String?, + actualValue: + actualValue == const $CopyWithPlaceholder() + ? _value.actualValue + // ignore: cast_nullable_to_non_nullable + : actualValue as Object?, + requireUserOptIn: + requireUserOptIn == const $CopyWithPlaceholder() + ? _value.requireUserOptIn + // ignore: cast_nullable_to_non_nullable + : requireUserOptIn as bool, + shouldBeDefault: + shouldBeDefault == const $CopyWithPlaceholder() + ? _value.shouldBeDefault + // ignore: cast_nullable_to_non_nullable + : shouldBeDefault as bool, ); } } diff --git a/app/lib/features/geckoview/features/preferences/data/repositories/preference_settings.g.dart b/app/lib/features/geckoview/features/preferences/data/repositories/preference_settings.g.dart index 18798b30..203199da 100644 --- a/app/lib/features/geckoview/features/preferences/data/repositories/preference_settings.g.dart +++ b/app/lib/features/geckoview/features/preferences/data/repositories/preference_settings.g.dart @@ -13,14 +13,15 @@ String _$preferenceSettingContentHash() => @ProviderFor(_preferenceSettingContent) final _preferenceSettingContentProvider = FutureProvider>.internal( - _preferenceSettingContent, - name: r'_preferenceSettingContentProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$preferenceSettingContentHash, - dependencies: null, - allTransitiveDependencies: null, -); + _preferenceSettingContent, + name: r'_preferenceSettingContentProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$preferenceSettingContentHash, + dependencies: null, + allTransitiveDependencies: null, + ); @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element @@ -60,21 +61,15 @@ class _PreferenceSettingGroupsFamily const _PreferenceSettingGroupsFamily(); /// See also [_preferenceSettingGroups]. - _PreferenceSettingGroupsProvider call( - PreferencePartition partition, - ) { - return _PreferenceSettingGroupsProvider( - partition, - ); + _PreferenceSettingGroupsProvider call(PreferencePartition partition) { + return _PreferenceSettingGroupsProvider(partition); } @override _PreferenceSettingGroupsProvider getProviderOverride( covariant _PreferenceSettingGroupsProvider provider, ) { - return call( - provider.partition, - ); + return call(provider.partition); } static const Iterable? _dependencies = null; @@ -96,24 +91,23 @@ class _PreferenceSettingGroupsFamily class _PreferenceSettingGroupsProvider extends FutureProvider> { /// See also [_preferenceSettingGroups]. - _PreferenceSettingGroupsProvider( - PreferencePartition partition, - ) : this._internal( - (ref) => _preferenceSettingGroups( - ref as _PreferenceSettingGroupsRef, - partition, - ), - from: _preferenceSettingGroupsProvider, - name: r'_preferenceSettingGroupsProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$preferenceSettingGroupsHash, - dependencies: _PreferenceSettingGroupsFamily._dependencies, - allTransitiveDependencies: - _PreferenceSettingGroupsFamily._allTransitiveDependencies, - partition: partition, - ); + _PreferenceSettingGroupsProvider(PreferencePartition partition) + : this._internal( + (ref) => _preferenceSettingGroups( + ref as _PreferenceSettingGroupsRef, + partition, + ), + from: _preferenceSettingGroupsProvider, + name: r'_preferenceSettingGroupsProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$preferenceSettingGroupsHash, + dependencies: _PreferenceSettingGroupsFamily._dependencies, + allTransitiveDependencies: + _PreferenceSettingGroupsFamily._allTransitiveDependencies, + partition: partition, + ); _PreferenceSettingGroupsProvider._internal( super._createNotifier, { @@ -130,8 +124,9 @@ class _PreferenceSettingGroupsProvider @override Override overrideWith( FutureOr> Function( - _PreferenceSettingGroupsRef provider) - create, + _PreferenceSettingGroupsRef provider, + ) + create, ) { return ProviderOverride( origin: this, @@ -203,20 +198,14 @@ class _PreferenceSettingGroupFamily PreferencePartition partition, String groupName, ) { - return _PreferenceSettingGroupProvider( - partition, - groupName, - ); + return _PreferenceSettingGroupProvider(partition, groupName); } @override _PreferenceSettingGroupProvider getProviderOverride( covariant _PreferenceSettingGroupProvider provider, ) { - return call( - provider.partition, - provider.groupName, - ); + return call(provider.partition, provider.groupName); } static const Iterable? _dependencies = null; @@ -242,23 +231,23 @@ class _PreferenceSettingGroupProvider PreferencePartition partition, String groupName, ) : this._internal( - (ref) => _preferenceSettingGroup( - ref as _PreferenceSettingGroupRef, - partition, - groupName, - ), - from: _preferenceSettingGroupProvider, - name: r'_preferenceSettingGroupProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$preferenceSettingGroupHash, - dependencies: _PreferenceSettingGroupFamily._dependencies, - allTransitiveDependencies: - _PreferenceSettingGroupFamily._allTransitiveDependencies, - partition: partition, - groupName: groupName, - ); + (ref) => _preferenceSettingGroup( + ref as _PreferenceSettingGroupRef, + partition, + groupName, + ), + from: _preferenceSettingGroupProvider, + name: r'_preferenceSettingGroupProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$preferenceSettingGroupHash, + dependencies: _PreferenceSettingGroupFamily._dependencies, + allTransitiveDependencies: + _PreferenceSettingGroupFamily._allTransitiveDependencies, + partition: partition, + groupName: groupName, + ); _PreferenceSettingGroupProvider._internal( super._createNotifier, { @@ -277,8 +266,9 @@ class _PreferenceSettingGroupProvider @override Override overrideWith( FutureOr Function( - _PreferenceSettingGroupRef provider) - create, + _PreferenceSettingGroupRef provider, + ) + create, ) { return ProviderOverride( origin: this, @@ -345,24 +335,29 @@ String _$preferenceRepositoryHash() => /// See also [_PreferenceRepository]. @ProviderFor(_PreferenceRepository) final _preferenceRepositoryProvider = AutoDisposeNotifierProvider< - _PreferenceRepository, Raw>>>.internal( + _PreferenceRepository, + Raw>> +>.internal( _PreferenceRepository.new, name: r'_preferenceRepositoryProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$preferenceRepositoryHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$preferenceRepositoryHash, dependencies: null, allTransitiveDependencies: null, ); -typedef _$PreferenceRepository - = AutoDisposeNotifier>>>; +typedef _$PreferenceRepository = + AutoDisposeNotifier>>>; String _$unifiedPreferenceSettingsRepositoryHash() => r'35aa16ffa7aa1453c8331ed7470ef85a68d27178'; abstract class _$UnifiedPreferenceSettingsRepository - extends BuildlessAutoDisposeStreamNotifier< - Map> { + extends + BuildlessAutoDisposeStreamNotifier< + Map + > { late final PreferencePartition partition; Stream> build( @@ -385,18 +380,14 @@ class UnifiedPreferenceSettingsRepositoryFamily UnifiedPreferenceSettingsRepositoryProvider call( PreferencePartition partition, ) { - return UnifiedPreferenceSettingsRepositoryProvider( - partition, - ); + return UnifiedPreferenceSettingsRepositoryProvider(partition); } @override UnifiedPreferenceSettingsRepositoryProvider getProviderOverride( covariant UnifiedPreferenceSettingsRepositoryProvider provider, ) { - return call( - provider.partition, - ); + return call(provider.partition); } static const Iterable? _dependencies = null; @@ -416,25 +407,27 @@ class UnifiedPreferenceSettingsRepositoryFamily /// See also [UnifiedPreferenceSettingsRepository]. class UnifiedPreferenceSettingsRepositoryProvider - extends AutoDisposeStreamNotifierProviderImpl< - UnifiedPreferenceSettingsRepository, - Map> { + extends + AutoDisposeStreamNotifierProviderImpl< + UnifiedPreferenceSettingsRepository, + Map + > { /// See also [UnifiedPreferenceSettingsRepository]. - UnifiedPreferenceSettingsRepositoryProvider( - PreferencePartition partition, - ) : this._internal( - () => UnifiedPreferenceSettingsRepository()..partition = partition, - from: unifiedPreferenceSettingsRepositoryProvider, - name: r'unifiedPreferenceSettingsRepositoryProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$unifiedPreferenceSettingsRepositoryHash, - dependencies: UnifiedPreferenceSettingsRepositoryFamily._dependencies, - allTransitiveDependencies: UnifiedPreferenceSettingsRepositoryFamily - ._allTransitiveDependencies, - partition: partition, - ); + UnifiedPreferenceSettingsRepositoryProvider(PreferencePartition partition) + : this._internal( + () => UnifiedPreferenceSettingsRepository()..partition = partition, + from: unifiedPreferenceSettingsRepositoryProvider, + name: r'unifiedPreferenceSettingsRepositoryProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$unifiedPreferenceSettingsRepositoryHash, + dependencies: UnifiedPreferenceSettingsRepositoryFamily._dependencies, + allTransitiveDependencies: + UnifiedPreferenceSettingsRepositoryFamily + ._allTransitiveDependencies, + partition: partition, + ); UnifiedPreferenceSettingsRepositoryProvider._internal( super._createNotifier, { @@ -452,9 +445,7 @@ class UnifiedPreferenceSettingsRepositoryProvider Stream> runNotifierBuild( covariant UnifiedPreferenceSettingsRepository notifier, ) { - return notifier.build( - partition, - ); + return notifier.build(partition); } @override @@ -474,8 +465,11 @@ class UnifiedPreferenceSettingsRepositoryProvider } @override - AutoDisposeStreamNotifierProviderElement> createElement() { + AutoDisposeStreamNotifierProviderElement< + UnifiedPreferenceSettingsRepository, + Map + > + createElement() { return _UnifiedPreferenceSettingsRepositoryProviderElement(this); } @@ -497,16 +491,20 @@ class UnifiedPreferenceSettingsRepositoryProvider @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element mixin UnifiedPreferenceSettingsRepositoryRef - on AutoDisposeStreamNotifierProviderRef< - Map> { + on + AutoDisposeStreamNotifierProviderRef< + Map + > { /// The parameter `partition` of this provider. PreferencePartition get partition; } class _UnifiedPreferenceSettingsRepositoryProviderElement - extends AutoDisposeStreamNotifierProviderElement< - UnifiedPreferenceSettingsRepository, - Map> + extends + AutoDisposeStreamNotifierProviderElement< + UnifiedPreferenceSettingsRepository, + Map + > with UnifiedPreferenceSettingsRepositoryRef { _UnifiedPreferenceSettingsRepositoryProviderElement(super.provider); @@ -545,20 +543,14 @@ class PreferenceSettingsGroupRepositoryFamily PreferencePartition partition, String groupName, ) { - return PreferenceSettingsGroupRepositoryProvider( - partition, - groupName, - ); + return PreferenceSettingsGroupRepositoryProvider(partition, groupName); } @override PreferenceSettingsGroupRepositoryProvider getProviderOverride( covariant PreferenceSettingsGroupRepositoryProvider provider, ) { - return call( - provider.partition, - provider.groupName, - ); + return call(provider.partition, provider.groupName); } static const Iterable? _dependencies = null; @@ -578,28 +570,32 @@ class PreferenceSettingsGroupRepositoryFamily /// See also [PreferenceSettingsGroupRepository]. class PreferenceSettingsGroupRepositoryProvider - extends AutoDisposeStreamNotifierProviderImpl< - PreferenceSettingsGroupRepository, PreferenceSettingGroup> { + extends + AutoDisposeStreamNotifierProviderImpl< + PreferenceSettingsGroupRepository, + PreferenceSettingGroup + > { /// See also [PreferenceSettingsGroupRepository]. PreferenceSettingsGroupRepositoryProvider( PreferencePartition partition, String groupName, ) : this._internal( - () => PreferenceSettingsGroupRepository() - ..partition = partition - ..groupName = groupName, - from: preferenceSettingsGroupRepositoryProvider, - name: r'preferenceSettingsGroupRepositoryProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$preferenceSettingsGroupRepositoryHash, - dependencies: PreferenceSettingsGroupRepositoryFamily._dependencies, - allTransitiveDependencies: PreferenceSettingsGroupRepositoryFamily - ._allTransitiveDependencies, - partition: partition, - groupName: groupName, - ); + () => + PreferenceSettingsGroupRepository() + ..partition = partition + ..groupName = groupName, + from: preferenceSettingsGroupRepositoryProvider, + name: r'preferenceSettingsGroupRepositoryProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$preferenceSettingsGroupRepositoryHash, + dependencies: PreferenceSettingsGroupRepositoryFamily._dependencies, + allTransitiveDependencies: + PreferenceSettingsGroupRepositoryFamily._allTransitiveDependencies, + partition: partition, + groupName: groupName, + ); PreferenceSettingsGroupRepositoryProvider._internal( super._createNotifier, { @@ -619,10 +615,7 @@ class PreferenceSettingsGroupRepositoryProvider Stream runNotifierBuild( covariant PreferenceSettingsGroupRepository notifier, ) { - return notifier.build( - partition, - groupName, - ); + return notifier.build(partition, groupName); } @override @@ -630,9 +623,10 @@ class PreferenceSettingsGroupRepositoryProvider return ProviderOverride( origin: this, override: PreferenceSettingsGroupRepositoryProvider._internal( - () => create() - ..partition = partition - ..groupName = groupName, + () => + create() + ..partition = partition + ..groupName = groupName, from: from, name: null, dependencies: null, @@ -645,8 +639,11 @@ class PreferenceSettingsGroupRepositoryProvider } @override - AutoDisposeStreamNotifierProviderElement createElement() { + AutoDisposeStreamNotifierProviderElement< + PreferenceSettingsGroupRepository, + PreferenceSettingGroup + > + createElement() { return _PreferenceSettingsGroupRepositoryProviderElement(this); } @@ -679,9 +676,12 @@ mixin PreferenceSettingsGroupRepositoryRef } class _PreferenceSettingsGroupRepositoryProviderElement - extends AutoDisposeStreamNotifierProviderElement< - PreferenceSettingsGroupRepository, - PreferenceSettingGroup> with PreferenceSettingsGroupRepositoryRef { + extends + AutoDisposeStreamNotifierProviderElement< + PreferenceSettingsGroupRepository, + PreferenceSettingGroup + > + with PreferenceSettingsGroupRepositoryRef { _PreferenceSettingsGroupRepositoryProviderElement(super.provider); @override @@ -691,5 +691,6 @@ class _PreferenceSettingsGroupRepositoryProviderElement String get groupName => (origin as PreferenceSettingsGroupRepositoryProvider).groupName; } + // 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 diff --git a/app/lib/features/geckoview/features/readerview/domain/providers/readerable.g.dart b/app/lib/features/geckoview/features/readerview/domain/providers/readerable.g.dart index f8e083bc..d499b42d 100644 --- a/app/lib/features/geckoview/features/readerview/domain/providers/readerable.g.dart +++ b/app/lib/features/geckoview/features/readerview/domain/providers/readerable.g.dart @@ -13,9 +13,10 @@ String _$readerableServiceHash() => r'03182c8afc41f5184322a3206473cbfa96df5819'; final readerableServiceProvider = Provider.internal( readerableService, name: r'readerableServiceProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$readerableServiceHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$readerableServiceHash, dependencies: null, allTransitiveDependencies: null, ); @@ -30,14 +31,15 @@ String _$appearanceButtonVisibilityHash() => @ProviderFor(appearanceButtonVisibility) final appearanceButtonVisibilityProvider = AutoDisposeStreamProvider.internal( - appearanceButtonVisibility, - name: r'appearanceButtonVisibilityProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$appearanceButtonVisibilityHash, - dependencies: null, - allTransitiveDependencies: null, -); + appearanceButtonVisibility, + name: r'appearanceButtonVisibilityProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$appearanceButtonVisibilityHash, + dependencies: null, + allTransitiveDependencies: null, + ); @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element diff --git a/app/lib/features/geckoview/features/readerview/presentation/controllers/readerable.dart b/app/lib/features/geckoview/features/readerview/presentation/controllers/readerable.dart index 4e13d83d..746d92d3 100644 --- a/app/lib/features/geckoview/features/readerview/presentation/controllers/readerable.dart +++ b/app/lib/features/geckoview/features/readerview/presentation/controllers/readerable.dart @@ -19,9 +19,9 @@ class ReaderableScreenController extends _$ReaderableScreenController { } @override - FutureOr build() { + Future build() { _service = ref.watch(readerableServiceProvider); - return null; + return Future.value(); } } diff --git a/app/lib/features/geckoview/features/readerview/presentation/controllers/readerable.g.dart b/app/lib/features/geckoview/features/readerview/presentation/controllers/readerable.g.dart index a2981dd3..4929d9a3 100644 --- a/app/lib/features/geckoview/features/readerview/presentation/controllers/readerable.g.dart +++ b/app/lib/features/geckoview/features/readerview/presentation/controllers/readerable.g.dart @@ -7,20 +7,21 @@ part of 'readerable.dart'; // ************************************************************************** String _$readerableScreenControllerHash() => - r'463c032a6d07936954fead58589101ccb31c2765'; + r'62b2167ff8f9fe21c3cf3339e135a50aa684160c'; /// See also [ReaderableScreenController]. @ProviderFor(ReaderableScreenController) final readerableScreenControllerProvider = AsyncNotifierProvider.internal( - ReaderableScreenController.new, - name: r'readerableScreenControllerProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$readerableScreenControllerHash, - dependencies: null, - allTransitiveDependencies: null, -); + ReaderableScreenController.new, + name: r'readerableScreenControllerProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$readerableScreenControllerHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$ReaderableScreenController = AsyncNotifier; // ignore_for_file: type=lint diff --git a/app/lib/features/geckoview/features/search/domain/providers/engine_suggestions.dart b/app/lib/features/geckoview/features/search/domain/providers/engine_suggestions.dart index 195ae7e1..8a38547c 100644 --- a/app/lib/features/geckoview/features/search/domain/providers/engine_suggestions.dart +++ b/app/lib/features/geckoview/features/search/domain/providers/engine_suggestions.dart @@ -42,7 +42,7 @@ AsyncValue> engineHistorySuggestions(Ref ref) { .where( (suggestion) => suggestion.type == GeckoSuggestionType.history && - (suggestion.title?.isNotEmpty ?? false) && + (suggestion.title.isNotEmpty) && (suggestion.description.mapNotNull( (url) => Uri.tryParse(url), ) != diff --git a/app/lib/features/geckoview/features/search/domain/providers/engine_suggestions.g.dart b/app/lib/features/geckoview/features/search/domain/providers/engine_suggestions.g.dart index 6ff9bc3e..76c83e60 100644 --- a/app/lib/features/geckoview/features/search/domain/providers/engine_suggestions.g.dart +++ b/app/lib/features/geckoview/features/search/domain/providers/engine_suggestions.g.dart @@ -7,36 +7,40 @@ part of 'engine_suggestions.dart'; // ************************************************************************** String _$engineHistorySuggestionsHash() => - r'218f1da2140a76c3b02634619955b1382c6ef182'; + r'7e6c17e6a2df98098ca1a683a438d1c261ccabdf'; /// See also [engineHistorySuggestions]. @ProviderFor(engineHistorySuggestions) final engineHistorySuggestionsProvider = AutoDisposeProvider>>.internal( - engineHistorySuggestions, - name: r'engineHistorySuggestionsProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$engineHistorySuggestionsHash, - dependencies: null, - allTransitiveDependencies: null, -); + engineHistorySuggestions, + name: r'engineHistorySuggestionsProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$engineHistorySuggestionsHash, + dependencies: null, + allTransitiveDependencies: null, + ); @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element -typedef EngineHistorySuggestionsRef - = AutoDisposeProviderRef>>; +typedef EngineHistorySuggestionsRef = + AutoDisposeProviderRef>>; String _$engineSuggestionsHash() => r'ba2c2d7f0a5e99fd9e639acd020b8cf3016c6126'; /// See also [EngineSuggestions]. @ProviderFor(EngineSuggestions) final engineSuggestionsProvider = AutoDisposeStreamNotifierProvider< - EngineSuggestions, List>.internal( + EngineSuggestions, + List +>.internal( EngineSuggestions.new, name: r'engineSuggestionsProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$engineSuggestionsHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$engineSuggestionsHash, dependencies: null, allTransitiveDependencies: null, ); diff --git a/app/lib/features/geckoview/features/search/domain/providers/search_suggestions.g.dart b/app/lib/features/geckoview/features/search/domain/providers/search_suggestions.g.dart index 000570e5..cf3ee47b 100644 --- a/app/lib/features/geckoview/features/search/domain/providers/search_suggestions.g.dart +++ b/app/lib/features/geckoview/features/search/domain/providers/search_suggestions.g.dart @@ -13,14 +13,15 @@ String _$defaultSearchSuggestionsHash() => @ProviderFor(defaultSearchSuggestions) final defaultSearchSuggestionsProvider = Provider.internal( - defaultSearchSuggestions, - name: r'defaultSearchSuggestionsProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$defaultSearchSuggestionsHash, - dependencies: null, - allTransitiveDependencies: null, -); + defaultSearchSuggestions, + name: r'defaultSearchSuggestionsProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$defaultSearchSuggestionsHash, + dependencies: null, + allTransitiveDependencies: null, + ); @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element @@ -52,9 +53,7 @@ abstract class _$SearchSuggestions extends BuildlessAutoDisposeStreamNotifier> { late final ISearchSuggestionProvider? suggestionsProvider; - Stream> build({ - ISearchSuggestionProvider? suggestionsProvider, - }); + Stream> build({ISearchSuggestionProvider? suggestionsProvider}); } /// See also [SearchSuggestions]. @@ -70,18 +69,14 @@ class SearchSuggestionsFamily extends Family>> { SearchSuggestionsProvider call({ ISearchSuggestionProvider? suggestionsProvider, }) { - return SearchSuggestionsProvider( - suggestionsProvider: suggestionsProvider, - ); + return SearchSuggestionsProvider(suggestionsProvider: suggestionsProvider); } @override SearchSuggestionsProvider getProviderOverride( covariant SearchSuggestionsProvider provider, ) { - return call( - suggestionsProvider: provider.suggestionsProvider, - ); + return call(suggestionsProvider: provider.suggestionsProvider); } static const Iterable? _dependencies = null; @@ -100,24 +95,24 @@ class SearchSuggestionsFamily extends Family>> { } /// See also [SearchSuggestions]. -class SearchSuggestionsProvider extends AutoDisposeStreamNotifierProviderImpl< - SearchSuggestions, List> { +class SearchSuggestionsProvider + extends + AutoDisposeStreamNotifierProviderImpl> { /// See also [SearchSuggestions]. - SearchSuggestionsProvider({ - ISearchSuggestionProvider? suggestionsProvider, - }) : this._internal( - () => SearchSuggestions()..suggestionsProvider = suggestionsProvider, - from: searchSuggestionsProvider, - name: r'searchSuggestionsProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$searchSuggestionsHash, - dependencies: SearchSuggestionsFamily._dependencies, - allTransitiveDependencies: - SearchSuggestionsFamily._allTransitiveDependencies, - suggestionsProvider: suggestionsProvider, - ); + SearchSuggestionsProvider({ISearchSuggestionProvider? suggestionsProvider}) + : this._internal( + () => SearchSuggestions()..suggestionsProvider = suggestionsProvider, + from: searchSuggestionsProvider, + name: r'searchSuggestionsProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$searchSuggestionsHash, + dependencies: SearchSuggestionsFamily._dependencies, + allTransitiveDependencies: + SearchSuggestionsFamily._allTransitiveDependencies, + suggestionsProvider: suggestionsProvider, + ); SearchSuggestionsProvider._internal( super._createNotifier, { @@ -132,12 +127,8 @@ class SearchSuggestionsProvider extends AutoDisposeStreamNotifierProviderImpl< final ISearchSuggestionProvider? suggestionsProvider; @override - Stream> runNotifierBuild( - covariant SearchSuggestions notifier, - ) { - return notifier.build( - suggestionsProvider: suggestionsProvider, - ); + Stream> runNotifierBuild(covariant SearchSuggestions notifier) { + return notifier.build(suggestionsProvider: suggestionsProvider); } @override @@ -158,7 +149,7 @@ class SearchSuggestionsProvider extends AutoDisposeStreamNotifierProviderImpl< @override AutoDisposeStreamNotifierProviderElement> - createElement() { + createElement() { return _SearchSuggestionsProviderElement(this); } @@ -186,13 +177,18 @@ mixin SearchSuggestionsRef } class _SearchSuggestionsProviderElement - extends AutoDisposeStreamNotifierProviderElement> with SearchSuggestionsRef { + extends + AutoDisposeStreamNotifierProviderElement< + SearchSuggestions, + List + > + with SearchSuggestionsRef { _SearchSuggestionsProviderElement(super.provider); @override ISearchSuggestionProvider? get suggestionsProvider => (origin as SearchSuggestionsProvider).suggestionsProvider; } + // 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 diff --git a/app/lib/features/geckoview/features/search/domain/repositories/search_suggestions.g.dart b/app/lib/features/geckoview/features/search/domain/repositories/search_suggestions.g.dart index 43f6535a..67c8d9d7 100644 --- a/app/lib/features/geckoview/features/search/domain/repositories/search_suggestions.g.dart +++ b/app/lib/features/geckoview/features/search/domain/repositories/search_suggestions.g.dart @@ -53,18 +53,14 @@ class SearchSuggestionsRepositoryFamily SearchSuggestionsRepositoryProvider call( ISearchSuggestionProvider suggestionsProvider, ) { - return SearchSuggestionsRepositoryProvider( - suggestionsProvider, - ); + return SearchSuggestionsRepositoryProvider(suggestionsProvider); } @override SearchSuggestionsRepositoryProvider getProviderOverride( covariant SearchSuggestionsRepositoryProvider provider, ) { - return call( - provider.suggestionsProvider, - ); + return call(provider.suggestionsProvider); } static const Iterable? _dependencies = null; @@ -83,25 +79,30 @@ class SearchSuggestionsRepositoryFamily } /// See also [SearchSuggestionsRepository]. -class SearchSuggestionsRepositoryProvider extends NotifierProviderImpl< - SearchSuggestionsRepository, Raw>>> { +class SearchSuggestionsRepositoryProvider + extends + NotifierProviderImpl< + SearchSuggestionsRepository, + Raw>> + > { /// See also [SearchSuggestionsRepository]. SearchSuggestionsRepositoryProvider( ISearchSuggestionProvider suggestionsProvider, ) : this._internal( - () => SearchSuggestionsRepository() - ..suggestionsProvider = suggestionsProvider, - from: searchSuggestionsRepositoryProvider, - name: r'searchSuggestionsRepositoryProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$searchSuggestionsRepositoryHash, - dependencies: SearchSuggestionsRepositoryFamily._dependencies, - allTransitiveDependencies: - SearchSuggestionsRepositoryFamily._allTransitiveDependencies, - suggestionsProvider: suggestionsProvider, - ); + () => + SearchSuggestionsRepository() + ..suggestionsProvider = suggestionsProvider, + from: searchSuggestionsRepositoryProvider, + name: r'searchSuggestionsRepositoryProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$searchSuggestionsRepositoryHash, + dependencies: SearchSuggestionsRepositoryFamily._dependencies, + allTransitiveDependencies: + SearchSuggestionsRepositoryFamily._allTransitiveDependencies, + suggestionsProvider: suggestionsProvider, + ); SearchSuggestionsRepositoryProvider._internal( super._createNotifier, { @@ -119,9 +120,7 @@ class SearchSuggestionsRepositoryProvider extends NotifierProviderImpl< Raw>> runNotifierBuild( covariant SearchSuggestionsRepository notifier, ) { - return notifier.build( - suggestionsProvider, - ); + return notifier.build(suggestionsProvider); } @override @@ -141,8 +140,11 @@ class SearchSuggestionsRepositoryProvider extends NotifierProviderImpl< } @override - NotifierProviderElement>>> createElement() { + NotifierProviderElement< + SearchSuggestionsRepository, + Raw>> + > + createElement() { return _SearchSuggestionsRepositoryProviderElement(this); } @@ -170,13 +172,18 @@ mixin SearchSuggestionsRepositoryRef } class _SearchSuggestionsRepositoryProviderElement - extends NotifierProviderElement>>> with SearchSuggestionsRepositoryRef { + extends + NotifierProviderElement< + SearchSuggestionsRepository, + Raw>> + > + with SearchSuggestionsRepositoryRef { _SearchSuggestionsRepositoryProviderElement(super.provider); @override ISearchSuggestionProvider get suggestionsProvider => (origin as SearchSuggestionsRepositoryProvider).suggestionsProvider; } + // 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 diff --git a/app/lib/features/geckoview/features/search/presentation/widgets/bang_chips.dart b/app/lib/features/geckoview/features/search/presentation/widgets/bang_chips.dart index bac54cb1..57de17c2 100644 --- a/app/lib/features/geckoview/features/search/presentation/widgets/bang_chips.dart +++ b/app/lib/features/geckoview/features/search/presentation/widgets/bang_chips.dart @@ -2,11 +2,12 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:lensai/core/routing/routes.dart'; +import 'package:lensai/extensions/nullable.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/widgets/bang_icon.dart'; import 'package:lensai/presentation/widgets/selectable_chips.dart'; +import 'package:lensai/presentation/widgets/url_icon.dart'; class BangChips extends HookConsumerWidget { final bool displayMenu; @@ -99,7 +100,7 @@ class BangChips extends HookConsumerWidget { await context.push( BangSearchRoute( searchText: - (searchText?.isEmpty ?? true) + (searchText.isEmpty) ? BangSearchRoute.emptySearchText : searchText!, ).location, diff --git a/app/lib/features/geckoview/features/search/presentation/widgets/search_field.dart b/app/lib/features/geckoview/features/search/presentation/widgets/search_field.dart index 2b8ede3b..1638b270 100644 --- a/app/lib/features/geckoview/features/search/presentation/widgets/search_field.dart +++ b/app/lib/features/geckoview/features/search/presentation/widgets/search_field.dart @@ -6,8 +6,8 @@ import 'package:lensai/features/geckoview/features/search/domain/providers/engin import 'package:lensai/features/user/domain/providers.dart'; import 'package:lensai/presentation/hooks/listenable_callback.dart'; import 'package:lensai/presentation/widgets/auto_suggest_text_field.dart'; -import 'package:lensai/presentation/widgets/bang_icon.dart'; import 'package:lensai/presentation/widgets/speech_to_text_button.dart'; +import 'package:lensai/presentation/widgets/url_icon.dart'; class SearchField extends HookConsumerWidget { final TextEditingController textEditingController; diff --git a/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/history_suggestions.dart b/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/history_suggestions.dart index 482da42c..4c9f7be2 100644 --- a/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/history_suggestions.dart +++ b/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/history_suggestions.dart @@ -29,7 +29,7 @@ class HistorySuggestions extends HookConsumerWidget { }); if (historySuggestions.hasValue && - (historySuggestions.valueOrNull?.isEmpty ?? true)) { + (historySuggestions.valueOrNull.isEmpty)) { return const SliverToBoxAdapter(child: SizedBox.shrink()); } diff --git a/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/search_suggestions.dart b/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/search_suggestions.dart index 1e6983f8..e7774ae6 100644 --- a/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/search_suggestions.dart +++ b/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/search_suggestions.dart @@ -3,6 +3,7 @@ import 'package:fading_scroll/fading_scroll.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:lensai/extensions/nullable.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/repositories/data.dart'; @@ -40,7 +41,7 @@ class SearchTermSuggestions extends HookConsumerWidget { final searchHistory = ref.watch(searchHistoryProvider); - useListenableCallback(searchTextController, () async { + useListenableCallback(searchTextController, () { ref .read(searchSuggestionsProvider().notifier) .addQuery(searchTextController.text); @@ -50,7 +51,7 @@ class SearchTermSuggestions extends HookConsumerWidget { if (showHistory && !searchTextIsNotEmpty && - (searchHistory.value?.isNotEmpty ?? false)) { + (searchHistory.value.isNotEmpty)) { final entries = searchHistory.value!; listSliver = SliverList.builder( diff --git a/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/tab_search.dart b/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/tab_search.dart index 4de1c4b4..27de9975 100644 --- a/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/tab_search.dart +++ b/app/lib/features/geckoview/features/search/presentation/widgets/search_modules/tab_search.dart @@ -13,7 +13,7 @@ import 'package:lensai/features/geckoview/features/tabs/domain/providers/selecte import 'package:lensai/features/geckoview/features/tabs/domain/repositories/tab_search.dart'; import 'package:lensai/features/geckoview/features/tabs/presentation/widgets/container_chips.dart'; import 'package:lensai/presentation/hooks/listenable_callback.dart'; -import 'package:lensai/presentation/widgets/bang_icon.dart'; +import 'package:lensai/presentation/widgets/url_icon.dart'; import 'package:sliver_tools/sliver_tools.dart'; class TabSearch extends HookConsumerWidget { diff --git a/app/lib/features/geckoview/features/tabs/data/database/daos/container.dart b/app/lib/features/geckoview/features/tabs/data/database/daos/container.dart index a235bf62..ecc564c3 100644 --- a/app/lib/features/geckoview/features/tabs/data/database/daos/container.dart +++ b/app/lib/features/geckoview/features/tabs/data/database/daos/container.dart @@ -34,7 +34,7 @@ class ContainerDao extends DatabaseAccessor } Future deleteContainer(String id) { - return db.container.deleteOne(ContainerCompanion.custom(id: Variable(id))); + return db.container.deleteOne(ContainerCompanion(id: Value(id))); } SingleOrNullSelectable getContainerData(String id) { diff --git a/app/lib/features/geckoview/features/tabs/data/database/daos/tab.dart b/app/lib/features/geckoview/features/tabs/data/database/daos/tab.dart index 8b12751a..cbfc7d15 100644 --- a/app/lib/features/geckoview/features/tabs/data/database/daos/tab.dart +++ b/app/lib/features/geckoview/features/tabs/data/database/daos/tab.dart @@ -74,10 +74,9 @@ class TabDao extends DatabaseAccessor with _$TabDaoMixin { orderKey: currentOrderKey, ), onConflict: DoUpdate( - (old) => TabCompanion.custom( - containerId: - (containerId.present) ? Variable(containerId.value) : null, - orderKey: (orderKey.present) ? Variable(orderKey.value) : null, + (old) => TabCompanion( + containerId: containerId, + orderKey: Value.absentIfNull(orderKey.value), ), ), ); @@ -107,10 +106,9 @@ class TabDao extends DatabaseAccessor with _$TabDaoMixin { orderKey: currentOrderKey, ), onConflict: DoUpdate( - (old) => TabCompanion.custom( - containerId: - (containerId.present) ? Variable(containerId.value) : null, - orderKey: (orderKey.present) ? Variable(orderKey.value) : null, + (old) => TabCompanion( + containerId: containerId, + orderKey: Value.absentIfNull(orderKey.value), ), where: (old) => old.containerId.isNull(), ), @@ -160,7 +158,7 @@ class TabDao extends DatabaseAccessor with _$TabDaoMixin { Map? previous, Map next, ) async { - await batch((batch) async { + await batch((batch) { for (final state in next.values) { final previousState = previous?[state.id]; @@ -172,7 +170,7 @@ class TabDao extends DatabaseAccessor with _$TabDaoMixin { TabCompanion( url: (previousState?.url != state.url) - ? Value(state.url.toString()) + ? Value(state.url) : const Value.absent(), title: (previousState?.title != state.title) @@ -186,7 +184,7 @@ class TabDao extends DatabaseAccessor with _$TabDaoMixin { }); } - Future syncTabs({required List retainTabIds}) async { + Future syncTabs({required List retainTabIds}) { return db.transaction(() async { await (db.tab.delete()..where((t) => t.id.isNotIn(retainTabIds))).go(); diff --git a/app/lib/features/geckoview/features/tabs/data/database/database.dart b/app/lib/features/geckoview/features/tabs/data/database/database.dart index 92fcafcc..d76021fa 100644 --- a/app/lib/features/geckoview/features/tabs/data/database/database.dart +++ b/app/lib/features/geckoview/features/tabs/data/database/database.dart @@ -1,6 +1,7 @@ import 'package:drift/drift.dart'; import 'package:flutter/widgets.dart' show Color; import 'package:lensai/data/database/converters/color.dart'; +import 'package:lensai/data/database/converters/uri.dart'; import 'package:lensai/features/geckoview/features/tabs/data/database/converters/container_metadata_converter.dart'; import 'package:lensai/features/geckoview/features/tabs/data/database/daos/container.dart'; import 'package:lensai/features/geckoview/features/tabs/data/database/daos/tab.dart'; diff --git a/app/lib/features/geckoview/features/tabs/data/database/database.drift b/app/lib/features/geckoview/features/tabs/data/database/database.drift index b03c5d1e..a0bf1d70 100644 --- a/app/lib/features/geckoview/features/tabs/data/database/database.drift +++ b/app/lib/features/geckoview/features/tabs/data/database/database.drift @@ -1,4 +1,5 @@ import 'package:lensai/data/database/converters/color.dart'; +import 'package:lensai/data/database/converters/uri.dart'; import 'package:lensai/features/geckoview/features/tabs/data/models/container_data.dart'; import 'package:lensai/features/geckoview/features/tabs/data/models/tab_query_result.dart'; import 'package:lensai/features/geckoview/features/tabs/data/database/converters/container_metadata_converter.dart'; @@ -14,7 +15,7 @@ CREATE TABLE tab ( id TEXT PRIMARY KEY NOT NULL, container_id TEXT REFERENCES container (id) ON DELETE CASCADE, order_key TEXT NOT NULL, - url TEXT, + url TEXT MAPPED BY `const UriConverter()`, title TEXT, is_probably_readerable BOOL, extracted_content_markdown TEXT, diff --git a/app/lib/features/geckoview/features/tabs/data/database/database.g.dart b/app/lib/features/geckoview/features/tabs/data/database/database.g.dart index 04cfdc9d..d66ea586 100644 --- a/app/lib/features/geckoview/features/tabs/data/database/database.g.dart +++ b/app/lib/features/geckoview/features/tabs/data/database/database.g.dart @@ -9,27 +9,39 @@ class Container extends Table with TableInfo { final String? _alias; Container(this.attachedDatabase, [this._alias]); late final GeneratedColumn id = GeneratedColumn( - 'id', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'PRIMARY KEY NOT NULL'); + 'id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'PRIMARY KEY NOT NULL', + ); late final GeneratedColumn name = GeneratedColumn( - 'name', aliasedName, true, - type: DriftSqlType.string, - requiredDuringInsert: false, - $customConstraints: ''); + 'name', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: '', + ); late final GeneratedColumnWithTypeConverter color = - GeneratedColumn('color', aliasedName, false, - type: DriftSqlType.int, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL') - .withConverter(Container.$convertercolor); + GeneratedColumn( + 'color', + aliasedName, + false, + type: DriftSqlType.int, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ).withConverter(Container.$convertercolor); late final GeneratedColumnWithTypeConverter - metadata = GeneratedColumn('metadata', aliasedName, true, - type: DriftSqlType.string, - requiredDuringInsert: false, - $customConstraints: '') - .withConverter(Container.$convertermetadatan); + metadata = GeneratedColumn( + 'metadata', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: '', + ).withConverter(Container.$convertermetadatan); @override List get $columns => [id, name, color, metadata]; @override @@ -43,15 +55,27 @@ class Container extends Table with TableInfo { ContainerData map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return ContainerData( - id: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}id'])!, - name: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}name']), - color: Container.$convertercolor.fromSql(attachedDatabase.typeMapping - .read(DriftSqlType.int, data['${effectivePrefix}color'])!), - metadata: Container.$convertermetadatan.fromSql(attachedDatabase - .typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}metadata'])), + id: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}id'], + )!, + name: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}name'], + ), + color: Container.$convertercolor.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}color'], + )!, + ), + metadata: Container.$convertermetadatan.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}metadata'], + ), + ), ); } @@ -88,8 +112,8 @@ class ContainerCompanion extends UpdateCompanion { required Color color, this.metadata = const Value.absent(), this.rowid = const Value.absent(), - }) : id = Value(id), - color = Value(color); + }) : id = Value(id), + color = Value(color); static Insertable custom({ Expression? id, Expression? name, @@ -106,12 +130,13 @@ class ContainerCompanion extends UpdateCompanion { }); } - ContainerCompanion copyWith( - {Value? id, - Value? name, - Value? color, - Value? metadata, - Value? rowid}) { + ContainerCompanion copyWith({ + Value? id, + Value? name, + Value? color, + Value? metadata, + Value? rowid, + }) { return ContainerCompanion( id: id ?? this.id, name: name ?? this.name, @@ -131,12 +156,14 @@ class ContainerCompanion extends UpdateCompanion { map['name'] = Variable(name.value); } if (color.present) { - map['color'] = - Variable(Container.$convertercolor.toSql(color.value)); + map['color'] = Variable( + Container.$convertercolor.toSql(color.value), + ); } if (metadata.present) { - map['metadata'] = - Variable(Container.$convertermetadatan.toSql(metadata.value)); + map['metadata'] = Variable( + Container.$convertermetadatan.toSql(metadata.value), + ); } if (rowid.present) { map['rowid'] = Variable(rowid.value); @@ -163,74 +190,111 @@ class Tab extends Table with TableInfo { final String? _alias; Tab(this.attachedDatabase, [this._alias]); late final GeneratedColumn id = GeneratedColumn( - 'id', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'PRIMARY KEY NOT NULL'); + 'id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'PRIMARY KEY NOT NULL', + ); late final GeneratedColumn containerId = GeneratedColumn( - 'container_id', aliasedName, true, - type: DriftSqlType.string, - requiredDuringInsert: false, - $customConstraints: 'REFERENCES container(id)ON DELETE CASCADE'); + 'container_id', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: 'REFERENCES container(id)ON DELETE CASCADE', + ); late final GeneratedColumn orderKey = GeneratedColumn( - 'order_key', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL'); - late final GeneratedColumn url = GeneratedColumn( - 'url', aliasedName, true, - type: DriftSqlType.string, - requiredDuringInsert: false, - $customConstraints: ''); + 'order_key', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ); + late final GeneratedColumnWithTypeConverter url = + GeneratedColumn( + 'url', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: '', + ).withConverter(Tab.$converterurln); late final GeneratedColumn title = GeneratedColumn( - 'title', aliasedName, true, - type: DriftSqlType.string, - requiredDuringInsert: false, - $customConstraints: ''); + 'title', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: '', + ); late final GeneratedColumn isProbablyReaderable = GeneratedColumn( - 'is_probably_readerable', aliasedName, true, - type: DriftSqlType.bool, - requiredDuringInsert: false, - $customConstraints: ''); + 'is_probably_readerable', + aliasedName, + true, + type: DriftSqlType.bool, + requiredDuringInsert: false, + $customConstraints: '', + ); late final GeneratedColumn extractedContentMarkdown = - GeneratedColumn('extracted_content_markdown', aliasedName, true, - type: DriftSqlType.string, - requiredDuringInsert: false, - $customConstraints: ''); + GeneratedColumn( + 'extracted_content_markdown', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: '', + ); late final GeneratedColumn extractedContentPlain = - GeneratedColumn('extracted_content_plain', aliasedName, true, - type: DriftSqlType.string, - requiredDuringInsert: false, - $customConstraints: ''); + GeneratedColumn( + 'extracted_content_plain', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: '', + ); late final GeneratedColumn fullContentMarkdown = - GeneratedColumn('full_content_markdown', aliasedName, true, - type: DriftSqlType.string, - requiredDuringInsert: false, - $customConstraints: ''); + GeneratedColumn( + 'full_content_markdown', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: '', + ); late final GeneratedColumn fullContentPlain = GeneratedColumn( - 'full_content_plain', aliasedName, true, - type: DriftSqlType.string, - requiredDuringInsert: false, - $customConstraints: ''); + 'full_content_plain', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: '', + ); late final GeneratedColumn timestamp = GeneratedColumn( - 'timestamp', aliasedName, false, - type: DriftSqlType.dateTime, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL'); + 'timestamp', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ); @override List get $columns => [ - id, - containerId, - orderKey, - url, - title, - isProbablyReaderable, - extractedContentMarkdown, - extractedContentPlain, - fullContentMarkdown, - fullContentPlain, - timestamp - ]; + id, + containerId, + orderKey, + url, + title, + isProbablyReaderable, + extractedContentMarkdown, + extractedContentPlain, + fullContentMarkdown, + fullContentPlain, + timestamp, + ]; @override String get aliasedName => _alias ?? actualTableName; @override @@ -242,30 +306,55 @@ class Tab extends Table with TableInfo { TabData map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return TabData( - id: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}id'])!, - containerId: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}container_id']), - orderKey: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}order_key'])!, - url: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}url']), - title: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}title']), + id: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}id'], + )!, + containerId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}container_id'], + ), + orderKey: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}order_key'], + )!, + url: Tab.$converterurln.fromSql( + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}url'], + ), + ), + title: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}title'], + ), isProbablyReaderable: attachedDatabase.typeMapping.read( - DriftSqlType.bool, data['${effectivePrefix}is_probably_readerable']), + DriftSqlType.bool, + data['${effectivePrefix}is_probably_readerable'], + ), extractedContentMarkdown: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}extracted_content_markdown']), + DriftSqlType.string, + data['${effectivePrefix}extracted_content_markdown'], + ), extractedContentPlain: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}extracted_content_plain']), + DriftSqlType.string, + data['${effectivePrefix}extracted_content_plain'], + ), fullContentMarkdown: attachedDatabase.typeMapping.read( - DriftSqlType.string, data['${effectivePrefix}full_content_markdown']), + DriftSqlType.string, + data['${effectivePrefix}full_content_markdown'], + ), fullContentPlain: attachedDatabase.typeMapping.read( - DriftSqlType.string, data['${effectivePrefix}full_content_plain']), - timestamp: attachedDatabase.typeMapping - .read(DriftSqlType.dateTime, data['${effectivePrefix}timestamp'])!, + DriftSqlType.string, + data['${effectivePrefix}full_content_plain'], + ), + timestamp: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}timestamp'], + )!, ); } @@ -274,6 +363,9 @@ class Tab extends Table with TableInfo { return Tab(attachedDatabase, alias); } + static TypeConverter $converterurl = const UriConverter(); + static TypeConverter $converterurln = + NullAwareTypeConverter.wrap($converterurl); @override bool get dontWriteConstraints => true; } @@ -282,7 +374,7 @@ class TabData extends DataClass implements Insertable { final String id; final String? containerId; final String orderKey; - final String? url; + final Uri? url; final String? title; final bool? isProbablyReaderable; final String? extractedContentMarkdown; @@ -290,18 +382,19 @@ class TabData extends DataClass implements Insertable { final String? fullContentMarkdown; final String? fullContentPlain; final DateTime timestamp; - const TabData( - {required this.id, - this.containerId, - required this.orderKey, - this.url, - this.title, - this.isProbablyReaderable, - this.extractedContentMarkdown, - this.extractedContentPlain, - this.fullContentMarkdown, - this.fullContentPlain, - required this.timestamp}); + const TabData({ + required this.id, + this.containerId, + required this.orderKey, + this.url, + this.title, + this.isProbablyReaderable, + this.extractedContentMarkdown, + this.extractedContentPlain, + this.fullContentMarkdown, + this.fullContentPlain, + required this.timestamp, + }); @override Map toColumns(bool nullToAbsent) { final map = {}; @@ -311,7 +404,7 @@ class TabData extends DataClass implements Insertable { } map['order_key'] = Variable(orderKey); if (!nullToAbsent || url != null) { - map['url'] = Variable(url); + map['url'] = Variable(Tab.$converterurln.toSql(url)); } if (!nullToAbsent || title != null) { map['title'] = Variable(title); @@ -320,8 +413,9 @@ class TabData extends DataClass implements Insertable { map['is_probably_readerable'] = Variable(isProbablyReaderable); } if (!nullToAbsent || extractedContentMarkdown != null) { - map['extracted_content_markdown'] = - Variable(extractedContentMarkdown); + map['extracted_content_markdown'] = Variable( + extractedContentMarkdown, + ); } if (!nullToAbsent || extractedContentPlain != null) { map['extracted_content_plain'] = Variable(extractedContentPlain); @@ -336,25 +430,32 @@ class TabData extends DataClass implements Insertable { return map; } - factory TabData.fromJson(Map json, - {ValueSerializer? serializer}) { + factory TabData.fromJson( + Map json, { + ValueSerializer? serializer, + }) { serializer ??= driftRuntimeOptions.defaultSerializer; return TabData( id: serializer.fromJson(json['id']), containerId: serializer.fromJson(json['container_id']), orderKey: serializer.fromJson(json['order_key']), - url: serializer.fromJson(json['url']), + url: serializer.fromJson(json['url']), title: serializer.fromJson(json['title']), - isProbablyReaderable: - serializer.fromJson(json['is_probably_readerable']), - extractedContentMarkdown: - serializer.fromJson(json['extracted_content_markdown']), - extractedContentPlain: - serializer.fromJson(json['extracted_content_plain']), - fullContentMarkdown: - serializer.fromJson(json['full_content_markdown']), - fullContentPlain: - serializer.fromJson(json['full_content_plain']), + isProbablyReaderable: serializer.fromJson( + json['is_probably_readerable'], + ), + extractedContentMarkdown: serializer.fromJson( + json['extracted_content_markdown'], + ), + extractedContentPlain: serializer.fromJson( + json['extracted_content_plain'], + ), + fullContentMarkdown: serializer.fromJson( + json['full_content_markdown'], + ), + fullContentPlain: serializer.fromJson( + json['full_content_plain'], + ), timestamp: serializer.fromJson(json['timestamp']), ); } @@ -365,54 +466,61 @@ class TabData extends DataClass implements Insertable { 'id': serializer.toJson(id), 'container_id': serializer.toJson(containerId), 'order_key': serializer.toJson(orderKey), - 'url': serializer.toJson(url), + 'url': serializer.toJson(url), 'title': serializer.toJson(title), 'is_probably_readerable': serializer.toJson(isProbablyReaderable), - 'extracted_content_markdown': - serializer.toJson(extractedContentMarkdown), - 'extracted_content_plain': - serializer.toJson(extractedContentPlain), + 'extracted_content_markdown': serializer.toJson( + extractedContentMarkdown, + ), + 'extracted_content_plain': serializer.toJson( + extractedContentPlain, + ), 'full_content_markdown': serializer.toJson(fullContentMarkdown), 'full_content_plain': serializer.toJson(fullContentPlain), 'timestamp': serializer.toJson(timestamp), }; } - TabData copyWith( - {String? id, - Value containerId = const Value.absent(), - String? orderKey, - Value url = const Value.absent(), - Value title = const Value.absent(), - Value isProbablyReaderable = const Value.absent(), - Value extractedContentMarkdown = const Value.absent(), - Value extractedContentPlain = const Value.absent(), - Value fullContentMarkdown = const Value.absent(), - Value fullContentPlain = const Value.absent(), - DateTime? timestamp}) => - TabData( - id: id ?? this.id, - containerId: containerId.present ? containerId.value : this.containerId, - orderKey: orderKey ?? this.orderKey, - url: url.present ? url.value : this.url, - title: title.present ? title.value : this.title, - isProbablyReaderable: isProbablyReaderable.present + TabData copyWith({ + String? id, + Value containerId = const Value.absent(), + String? orderKey, + Value url = const Value.absent(), + Value title = const Value.absent(), + Value isProbablyReaderable = const Value.absent(), + Value extractedContentMarkdown = const Value.absent(), + Value extractedContentPlain = const Value.absent(), + Value fullContentMarkdown = const Value.absent(), + Value fullContentPlain = const Value.absent(), + DateTime? timestamp, + }) => TabData( + id: id ?? this.id, + containerId: containerId.present ? containerId.value : this.containerId, + orderKey: orderKey ?? this.orderKey, + url: url.present ? url.value : this.url, + title: title.present ? title.value : this.title, + isProbablyReaderable: + isProbablyReaderable.present ? isProbablyReaderable.value : this.isProbablyReaderable, - extractedContentMarkdown: extractedContentMarkdown.present + extractedContentMarkdown: + extractedContentMarkdown.present ? extractedContentMarkdown.value : this.extractedContentMarkdown, - extractedContentPlain: extractedContentPlain.present + extractedContentPlain: + extractedContentPlain.present ? extractedContentPlain.value : this.extractedContentPlain, - fullContentMarkdown: fullContentMarkdown.present + fullContentMarkdown: + fullContentMarkdown.present ? fullContentMarkdown.value : this.fullContentMarkdown, - fullContentPlain: fullContentPlain.present + fullContentPlain: + fullContentPlain.present ? fullContentPlain.value : this.fullContentPlain, - timestamp: timestamp ?? this.timestamp, - ); + timestamp: timestamp ?? this.timestamp, + ); TabData copyWithCompanion(TabCompanion data) { return TabData( id: data.id.present ? data.id.value : this.id, @@ -421,21 +529,26 @@ class TabData extends DataClass implements Insertable { orderKey: data.orderKey.present ? data.orderKey.value : this.orderKey, url: data.url.present ? data.url.value : this.url, title: data.title.present ? data.title.value : this.title, - isProbablyReaderable: data.isProbablyReaderable.present - ? data.isProbablyReaderable.value - : this.isProbablyReaderable, - extractedContentMarkdown: data.extractedContentMarkdown.present - ? data.extractedContentMarkdown.value - : this.extractedContentMarkdown, - extractedContentPlain: data.extractedContentPlain.present - ? data.extractedContentPlain.value - : this.extractedContentPlain, - fullContentMarkdown: data.fullContentMarkdown.present - ? data.fullContentMarkdown.value - : this.fullContentMarkdown, - fullContentPlain: data.fullContentPlain.present - ? data.fullContentPlain.value - : this.fullContentPlain, + isProbablyReaderable: + data.isProbablyReaderable.present + ? data.isProbablyReaderable.value + : this.isProbablyReaderable, + extractedContentMarkdown: + data.extractedContentMarkdown.present + ? data.extractedContentMarkdown.value + : this.extractedContentMarkdown, + extractedContentPlain: + data.extractedContentPlain.present + ? data.extractedContentPlain.value + : this.extractedContentPlain, + fullContentMarkdown: + data.fullContentMarkdown.present + ? data.fullContentMarkdown.value + : this.fullContentMarkdown, + fullContentPlain: + data.fullContentPlain.present + ? data.fullContentPlain.value + : this.fullContentPlain, timestamp: data.timestamp.present ? data.timestamp.value : this.timestamp, ); } @@ -460,17 +573,18 @@ class TabData extends DataClass implements Insertable { @override int get hashCode => Object.hash( - id, - containerId, - orderKey, - url, - title, - isProbablyReaderable, - extractedContentMarkdown, - extractedContentPlain, - fullContentMarkdown, - fullContentPlain, - timestamp); + id, + containerId, + orderKey, + url, + title, + isProbablyReaderable, + extractedContentMarkdown, + extractedContentPlain, + fullContentMarkdown, + fullContentPlain, + timestamp, + ); @override bool operator ==(Object other) => identical(this, other) || @@ -492,7 +606,7 @@ class TabCompanion extends UpdateCompanion { final Value id; final Value containerId; final Value orderKey; - final Value url; + final Value url; final Value title; final Value isProbablyReaderable; final Value extractedContentMarkdown; @@ -528,9 +642,9 @@ class TabCompanion extends UpdateCompanion { this.fullContentPlain = const Value.absent(), required DateTime timestamp, this.rowid = const Value.absent(), - }) : id = Value(id), - orderKey = Value(orderKey), - timestamp = Value(timestamp); + }) : id = Value(id), + orderKey = Value(orderKey), + timestamp = Value(timestamp); static Insertable custom({ Expression? id, Expression? containerId, @@ -565,19 +679,20 @@ class TabCompanion extends UpdateCompanion { }); } - TabCompanion copyWith( - {Value? id, - Value? containerId, - Value? orderKey, - Value? url, - Value? title, - Value? isProbablyReaderable, - Value? extractedContentMarkdown, - Value? extractedContentPlain, - Value? fullContentMarkdown, - Value? fullContentPlain, - Value? timestamp, - Value? rowid}) { + TabCompanion copyWith({ + Value? id, + Value? containerId, + Value? orderKey, + Value? url, + Value? title, + Value? isProbablyReaderable, + Value? extractedContentMarkdown, + Value? extractedContentPlain, + Value? fullContentMarkdown, + Value? fullContentPlain, + Value? timestamp, + Value? rowid, + }) { return TabCompanion( id: id ?? this.id, containerId: containerId ?? this.containerId, @@ -609,26 +724,30 @@ class TabCompanion extends UpdateCompanion { map['order_key'] = Variable(orderKey.value); } if (url.present) { - map['url'] = Variable(url.value); + map['url'] = Variable(Tab.$converterurln.toSql(url.value)); } if (title.present) { map['title'] = Variable(title.value); } if (isProbablyReaderable.present) { - map['is_probably_readerable'] = - Variable(isProbablyReaderable.value); + map['is_probably_readerable'] = Variable( + isProbablyReaderable.value, + ); } if (extractedContentMarkdown.present) { - map['extracted_content_markdown'] = - Variable(extractedContentMarkdown.value); + map['extracted_content_markdown'] = Variable( + extractedContentMarkdown.value, + ); } if (extractedContentPlain.present) { - map['extracted_content_plain'] = - Variable(extractedContentPlain.value); + map['extracted_content_plain'] = Variable( + extractedContentPlain.value, + ); } if (fullContentMarkdown.present) { - map['full_content_markdown'] = - Variable(fullContentMarkdown.value); + map['full_content_markdown'] = Variable( + fullContentMarkdown.value, + ); } if (fullContentPlain.present) { map['full_content_plain'] = Variable(fullContentPlain.value); @@ -668,38 +787,62 @@ class Document extends Table with TableInfo { final String? _alias; Document(this.attachedDatabase, [this._alias]); late final GeneratedColumn documentId = GeneratedColumn( - 'document_id', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL PRIMARY KEY'); + 'document_id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL PRIMARY KEY', + ); late final GeneratedColumn mainDocumentId = GeneratedColumn( - 'main_document_id', aliasedName, true, - type: DriftSqlType.string, - requiredDuringInsert: false, - $customConstraints: ''); + 'main_document_id', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: '', + ); late final GeneratedColumn contextId = GeneratedColumn( - 'context_id', aliasedName, true, - type: DriftSqlType.string, - requiredDuringInsert: false, - $customConstraints: ''); + 'context_id', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: '', + ); late final GeneratedColumn content = GeneratedColumn( - 'content', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL'); + 'content', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ); late final GeneratedColumn contentHash = GeneratedColumn( - 'content_hash', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL'); + 'content_hash', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ); late final GeneratedColumn metadata = GeneratedColumn( - 'metadata', aliasedName, true, - type: DriftSqlType.string, - requiredDuringInsert: false, - $customConstraints: ''); + 'metadata', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: '', + ); @override - List get $columns => - [documentId, mainDocumentId, contextId, content, contentHash, metadata]; + List get $columns => [ + documentId, + mainDocumentId, + contextId, + content, + contentHash, + metadata, + ]; @override String get aliasedName => _alias ?? actualTableName; @override @@ -711,18 +854,33 @@ class Document extends Table with TableInfo { DocumentData map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return DocumentData( - documentId: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}document_id'])!, + documentId: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}document_id'], + )!, mainDocumentId: attachedDatabase.typeMapping.read( - DriftSqlType.string, data['${effectivePrefix}main_document_id']), - contextId: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}context_id']), - content: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}content'])!, - contentHash: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}content_hash'])!, - metadata: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}metadata']), + DriftSqlType.string, + data['${effectivePrefix}main_document_id'], + ), + contextId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}context_id'], + ), + content: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}content'], + )!, + contentHash: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}content_hash'], + )!, + metadata: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}metadata'], + ), ); } @@ -742,13 +900,14 @@ class DocumentData extends DataClass implements Insertable { final String content; final String contentHash; final String? metadata; - const DocumentData( - {required this.documentId, - this.mainDocumentId, - this.contextId, - required this.content, - required this.contentHash, - this.metadata}); + const DocumentData({ + required this.documentId, + this.mainDocumentId, + this.contextId, + required this.content, + required this.contentHash, + this.metadata, + }); @override Map toColumns(bool nullToAbsent) { final map = {}; @@ -767,8 +926,10 @@ class DocumentData extends DataClass implements Insertable { return map; } - factory DocumentData.fromJson(Map json, - {ValueSerializer? serializer}) { + factory DocumentData.fromJson( + Map json, { + ValueSerializer? serializer, + }) { serializer ??= driftRuntimeOptions.defaultSerializer; return DocumentData( documentId: serializer.fromJson(json['document_id']), @@ -792,29 +953,30 @@ class DocumentData extends DataClass implements Insertable { }; } - DocumentData copyWith( - {String? documentId, - Value mainDocumentId = const Value.absent(), - Value contextId = const Value.absent(), - String? content, - String? contentHash, - Value metadata = const Value.absent()}) => - DocumentData( - documentId: documentId ?? this.documentId, - mainDocumentId: - mainDocumentId.present ? mainDocumentId.value : this.mainDocumentId, - contextId: contextId.present ? contextId.value : this.contextId, - content: content ?? this.content, - contentHash: contentHash ?? this.contentHash, - metadata: metadata.present ? metadata.value : this.metadata, - ); + DocumentData copyWith({ + String? documentId, + Value mainDocumentId = const Value.absent(), + Value contextId = const Value.absent(), + String? content, + String? contentHash, + Value metadata = const Value.absent(), + }) => DocumentData( + documentId: documentId ?? this.documentId, + mainDocumentId: + mainDocumentId.present ? mainDocumentId.value : this.mainDocumentId, + contextId: contextId.present ? contextId.value : this.contextId, + content: content ?? this.content, + contentHash: contentHash ?? this.contentHash, + metadata: metadata.present ? metadata.value : this.metadata, + ); DocumentData copyWithCompanion(DocumentCompanion data) { return DocumentData( documentId: data.documentId.present ? data.documentId.value : this.documentId, - mainDocumentId: data.mainDocumentId.present - ? data.mainDocumentId.value - : this.mainDocumentId, + mainDocumentId: + data.mainDocumentId.present + ? data.mainDocumentId.value + : this.mainDocumentId, contextId: data.contextId.present ? data.contextId.value : this.contextId, content: data.content.present ? data.content.value : this.content, contentHash: @@ -838,7 +1000,13 @@ class DocumentData extends DataClass implements Insertable { @override int get hashCode => Object.hash( - documentId, mainDocumentId, contextId, content, contentHash, metadata); + documentId, + mainDocumentId, + contextId, + content, + contentHash, + metadata, + ); @override bool operator ==(Object other) => identical(this, other) || @@ -876,9 +1044,9 @@ class DocumentCompanion extends UpdateCompanion { required String contentHash, this.metadata = const Value.absent(), this.rowid = const Value.absent(), - }) : documentId = Value(documentId), - content = Value(content), - contentHash = Value(contentHash); + }) : documentId = Value(documentId), + content = Value(content), + contentHash = Value(contentHash); static Insertable custom({ Expression? documentId, Expression? mainDocumentId, @@ -899,14 +1067,15 @@ class DocumentCompanion extends UpdateCompanion { }); } - DocumentCompanion copyWith( - {Value? documentId, - Value? mainDocumentId, - Value? contextId, - Value? content, - Value? contentHash, - Value? metadata, - Value? rowid}) { + DocumentCompanion copyWith({ + Value? documentId, + Value? mainDocumentId, + Value? contextId, + Value? content, + Value? contentHash, + Value? metadata, + Value? rowid, + }) { return DocumentCompanion( documentId: documentId ?? this.documentId, mainDocumentId: mainDocumentId ?? this.mainDocumentId, @@ -967,28 +1136,45 @@ class TabFts extends Table final String? _alias; TabFts(this.attachedDatabase, [this._alias]); late final GeneratedColumn title = GeneratedColumn( - 'title', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: ''); + 'title', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: '', + ); late final GeneratedColumn url = GeneratedColumn( - 'url', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: ''); + 'url', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: '', + ); late final GeneratedColumn extractedContentPlain = - GeneratedColumn('extracted_content_plain', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: ''); + GeneratedColumn( + 'extracted_content_plain', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: '', + ); late final GeneratedColumn fullContentPlain = GeneratedColumn( - 'full_content_plain', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: ''); + 'full_content_plain', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: '', + ); @override - List get $columns => - [title, url, extractedContentPlain, fullContentPlain]; + List get $columns => [ + title, + url, + extractedContentPlain, + fullContentPlain, + ]; @override String get aliasedName => _alias ?? actualTableName; @override @@ -1000,15 +1186,26 @@ class TabFts extends Table TabFt map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return TabFt( - title: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}title'])!, - url: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}url'])!, - extractedContentPlain: attachedDatabase.typeMapping.read( - DriftSqlType.string, - data['${effectivePrefix}extracted_content_plain'])!, - fullContentPlain: attachedDatabase.typeMapping.read( - DriftSqlType.string, data['${effectivePrefix}full_content_plain'])!, + title: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}title'], + )!, + url: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}url'], + )!, + extractedContentPlain: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}extracted_content_plain'], + )!, + fullContentPlain: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}full_content_plain'], + )!, ); } @@ -1029,11 +1226,12 @@ class TabFt extends DataClass implements Insertable { final String url; final String extractedContentPlain; final String fullContentPlain; - const TabFt( - {required this.title, - required this.url, - required this.extractedContentPlain, - required this.fullContentPlain}); + const TabFt({ + required this.title, + required this.url, + required this.extractedContentPlain, + required this.fullContentPlain, + }); @override Map toColumns(bool nullToAbsent) { final map = {}; @@ -1044,14 +1242,17 @@ class TabFt extends DataClass implements Insertable { return map; } - factory TabFt.fromJson(Map json, - {ValueSerializer? serializer}) { + factory TabFt.fromJson( + Map json, { + ValueSerializer? serializer, + }) { serializer ??= driftRuntimeOptions.defaultSerializer; return TabFt( title: serializer.fromJson(json['title']), url: serializer.fromJson(json['url']), - extractedContentPlain: - serializer.fromJson(json['extracted_content_plain']), + extractedContentPlain: serializer.fromJson( + json['extracted_content_plain'], + ), fullContentPlain: serializer.fromJson(json['full_content_plain']), ); } @@ -1061,34 +1262,36 @@ class TabFt extends DataClass implements Insertable { return { 'title': serializer.toJson(title), 'url': serializer.toJson(url), - 'extracted_content_plain': - serializer.toJson(extractedContentPlain), + 'extracted_content_plain': serializer.toJson( + extractedContentPlain, + ), 'full_content_plain': serializer.toJson(fullContentPlain), }; } - TabFt copyWith( - {String? title, - String? url, - String? extractedContentPlain, - String? fullContentPlain}) => - TabFt( - title: title ?? this.title, - url: url ?? this.url, - extractedContentPlain: - extractedContentPlain ?? this.extractedContentPlain, - fullContentPlain: fullContentPlain ?? this.fullContentPlain, - ); + TabFt copyWith({ + String? title, + String? url, + String? extractedContentPlain, + String? fullContentPlain, + }) => TabFt( + title: title ?? this.title, + url: url ?? this.url, + extractedContentPlain: extractedContentPlain ?? this.extractedContentPlain, + fullContentPlain: fullContentPlain ?? this.fullContentPlain, + ); TabFt copyWithCompanion(TabFtsCompanion data) { return TabFt( title: data.title.present ? data.title.value : this.title, url: data.url.present ? data.url.value : this.url, - extractedContentPlain: data.extractedContentPlain.present - ? data.extractedContentPlain.value - : this.extractedContentPlain, - fullContentPlain: data.fullContentPlain.present - ? data.fullContentPlain.value - : this.fullContentPlain, + extractedContentPlain: + data.extractedContentPlain.present + ? data.extractedContentPlain.value + : this.extractedContentPlain, + fullContentPlain: + data.fullContentPlain.present + ? data.fullContentPlain.value + : this.fullContentPlain, ); } @@ -1135,10 +1338,10 @@ class TabFtsCompanion extends UpdateCompanion { required String extractedContentPlain, required String fullContentPlain, this.rowid = const Value.absent(), - }) : title = Value(title), - url = Value(url), - extractedContentPlain = Value(extractedContentPlain), - fullContentPlain = Value(fullContentPlain); + }) : title = Value(title), + url = Value(url), + extractedContentPlain = Value(extractedContentPlain), + fullContentPlain = Value(fullContentPlain); static Insertable custom({ Expression? title, Expression? url, @@ -1156,12 +1359,13 @@ class TabFtsCompanion extends UpdateCompanion { }); } - TabFtsCompanion copyWith( - {Value? title, - Value? url, - Value? extractedContentPlain, - Value? fullContentPlain, - Value? rowid}) { + TabFtsCompanion copyWith({ + Value? title, + Value? url, + Value? extractedContentPlain, + Value? fullContentPlain, + Value? rowid, + }) { return TabFtsCompanion( title: title ?? this.title, url: url ?? this.url, @@ -1182,8 +1386,9 @@ class TabFtsCompanion extends UpdateCompanion { map['url'] = Variable(url.value); } if (extractedContentPlain.present) { - map['extracted_content_plain'] = - Variable(extractedContentPlain.value); + map['extracted_content_plain'] = Variable( + extractedContentPlain.value, + ); } if (fullContentPlain.present) { map['full_content_plain'] = Variable(fullContentPlain.value); @@ -1213,43 +1418,71 @@ class DocumentVec extends Table with TableInfo { final String? _alias; DocumentVec(this.attachedDatabase, [this._alias]); late final GeneratedColumn id = GeneratedColumn( - 'id', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL PRIMARY KEY'); + 'id', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL PRIMARY KEY', + ); late final GeneratedColumn mainDocumentId = GeneratedColumn( - 'main_document_id', aliasedName, true, - type: DriftSqlType.string, - requiredDuringInsert: false, - $customConstraints: ''); + 'main_document_id', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: '', + ); late final GeneratedColumn contextId = GeneratedColumn( - 'context_id', aliasedName, true, - type: DriftSqlType.string, - requiredDuringInsert: false, - $customConstraints: ''); + 'context_id', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: '', + ); late final GeneratedColumn embedding = GeneratedColumn( - 'embedding', aliasedName, false, - type: DriftSqlType.blob, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL'); + 'embedding', + aliasedName, + false, + type: DriftSqlType.blob, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ); late final GeneratedColumn contentHash = GeneratedColumn( - 'content_hash', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL'); + 'content_hash', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ); late final GeneratedColumn distance = GeneratedColumn( - 'distance', aliasedName, true, - type: DriftSqlType.double, - requiredDuringInsert: false, - $customConstraints: ''); + 'distance', + aliasedName, + true, + type: DriftSqlType.double, + requiredDuringInsert: false, + $customConstraints: '', + ); late final GeneratedColumn k = GeneratedColumn( - 'k', aliasedName, true, - type: DriftSqlType.int, - requiredDuringInsert: false, - $customConstraints: ''); + 'k', + aliasedName, + true, + type: DriftSqlType.int, + requiredDuringInsert: false, + $customConstraints: '', + ); @override - List get $columns => - [id, mainDocumentId, contextId, embedding, contentHash, distance, k]; + List get $columns => [ + id, + mainDocumentId, + contextId, + embedding, + contentHash, + distance, + k, + ]; @override String get aliasedName => _alias ?? actualTableName; @override @@ -1261,20 +1494,37 @@ class DocumentVec extends Table with TableInfo { DocumentVecData map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return DocumentVecData( - id: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}id'])!, + id: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}id'], + )!, mainDocumentId: attachedDatabase.typeMapping.read( - DriftSqlType.string, data['${effectivePrefix}main_document_id']), - contextId: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}context_id']), - embedding: attachedDatabase.typeMapping - .read(DriftSqlType.blob, data['${effectivePrefix}embedding'])!, - contentHash: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}content_hash'])!, - distance: attachedDatabase.typeMapping - .read(DriftSqlType.double, data['${effectivePrefix}distance']), - k: attachedDatabase.typeMapping - .read(DriftSqlType.int, data['${effectivePrefix}k']), + DriftSqlType.string, + data['${effectivePrefix}main_document_id'], + ), + contextId: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}context_id'], + ), + embedding: + attachedDatabase.typeMapping.read( + DriftSqlType.blob, + data['${effectivePrefix}embedding'], + )!, + contentHash: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}content_hash'], + )!, + distance: attachedDatabase.typeMapping.read( + DriftSqlType.double, + data['${effectivePrefix}distance'], + ), + k: attachedDatabase.typeMapping.read( + DriftSqlType.int, + data['${effectivePrefix}k'], + ), ); } @@ -1297,14 +1547,15 @@ class DocumentVecData extends DataClass implements Insertable { final String contentHash; final double? distance; final int? k; - const DocumentVecData( - {required this.id, - this.mainDocumentId, - this.contextId, - required this.embedding, - required this.contentHash, - this.distance, - this.k}); + const DocumentVecData({ + required this.id, + this.mainDocumentId, + this.contextId, + required this.embedding, + required this.contentHash, + this.distance, + this.k, + }); @override Map toColumns(bool nullToAbsent) { final map = {}; @@ -1326,8 +1577,10 @@ class DocumentVecData extends DataClass implements Insertable { return map; } - factory DocumentVecData.fromJson(Map json, - {ValueSerializer? serializer}) { + factory DocumentVecData.fromJson( + Map json, { + ValueSerializer? serializer, + }) { serializer ??= driftRuntimeOptions.defaultSerializer; return DocumentVecData( id: serializer.fromJson(json['id']), @@ -1353,30 +1606,31 @@ class DocumentVecData extends DataClass implements Insertable { }; } - DocumentVecData copyWith( - {String? id, - Value mainDocumentId = const Value.absent(), - Value contextId = const Value.absent(), - Uint8List? embedding, - String? contentHash, - Value distance = const Value.absent(), - Value k = const Value.absent()}) => - DocumentVecData( - id: id ?? this.id, - mainDocumentId: - mainDocumentId.present ? mainDocumentId.value : this.mainDocumentId, - contextId: contextId.present ? contextId.value : this.contextId, - embedding: embedding ?? this.embedding, - contentHash: contentHash ?? this.contentHash, - distance: distance.present ? distance.value : this.distance, - k: k.present ? k.value : this.k, - ); + DocumentVecData copyWith({ + String? id, + Value mainDocumentId = const Value.absent(), + Value contextId = const Value.absent(), + Uint8List? embedding, + String? contentHash, + Value distance = const Value.absent(), + Value k = const Value.absent(), + }) => DocumentVecData( + id: id ?? this.id, + mainDocumentId: + mainDocumentId.present ? mainDocumentId.value : this.mainDocumentId, + contextId: contextId.present ? contextId.value : this.contextId, + embedding: embedding ?? this.embedding, + contentHash: contentHash ?? this.contentHash, + distance: distance.present ? distance.value : this.distance, + k: k.present ? k.value : this.k, + ); DocumentVecData copyWithCompanion(DocumentVecCompanion data) { return DocumentVecData( id: data.id.present ? data.id.value : this.id, - mainDocumentId: data.mainDocumentId.present - ? data.mainDocumentId.value - : this.mainDocumentId, + mainDocumentId: + data.mainDocumentId.present + ? data.mainDocumentId.value + : this.mainDocumentId, contextId: data.contextId.present ? data.contextId.value : this.contextId, embedding: data.embedding.present ? data.embedding.value : this.embedding, contentHash: @@ -1401,8 +1655,15 @@ class DocumentVecData extends DataClass implements Insertable { } @override - int get hashCode => Object.hash(id, mainDocumentId, contextId, - $driftBlobEquality.hash(embedding), contentHash, distance, k); + int get hashCode => Object.hash( + id, + mainDocumentId, + contextId, + $driftBlobEquality.hash(embedding), + contentHash, + distance, + k, + ); @override bool operator ==(Object other) => identical(this, other) || @@ -1444,9 +1705,9 @@ class DocumentVecCompanion extends UpdateCompanion { this.distance = const Value.absent(), this.k = const Value.absent(), this.rowid = const Value.absent(), - }) : id = Value(id), - embedding = Value(embedding), - contentHash = Value(contentHash); + }) : id = Value(id), + embedding = Value(embedding), + contentHash = Value(contentHash); static Insertable custom({ Expression? id, Expression? mainDocumentId, @@ -1469,15 +1730,16 @@ class DocumentVecCompanion extends UpdateCompanion { }); } - DocumentVecCompanion copyWith( - {Value? id, - Value? mainDocumentId, - Value? contextId, - Value? embedding, - Value? contentHash, - Value? distance, - Value? k, - Value? rowid}) { + DocumentVecCompanion copyWith({ + Value? id, + Value? mainDocumentId, + Value? contextId, + Value? embedding, + Value? contentHash, + Value? distance, + Value? k, + Value? rowid, + }) { return DocumentVecCompanion( id: id ?? this.id, mainDocumentId: mainDocumentId ?? this.mainDocumentId, @@ -1543,29 +1805,39 @@ abstract class _$TabDatabase extends GeneratedDatabase { late final Tab tab = Tab(this); late final Document document = Document(this); late final Trigger tabDocumentDelete = Trigger( - 'CREATE TRIGGER tab_document_delete AFTER DELETE ON tab BEGIN DELETE FROM document WHERE main_document_id = old.id;END', - 'tab_document_delete'); + 'CREATE TRIGGER tab_document_delete AFTER DELETE ON tab BEGIN DELETE FROM document WHERE main_document_id = old.id;END', + 'tab_document_delete', + ); late final TabFts tabFts = TabFts(this); late final Trigger tabAfterInsert = Trigger( - 'CREATE TRIGGER tab_after_insert AFTER INSERT ON tab BEGIN INSERT INTO tab_fts ("rowid", title, url, extracted_content_plain, full_content_plain) VALUES (new."rowid", new.title, new.url, new.extracted_content_plain, new.full_content_plain);END', - 'tab_after_insert'); + 'CREATE TRIGGER tab_after_insert AFTER INSERT ON tab BEGIN INSERT INTO tab_fts ("rowid", title, url, extracted_content_plain, full_content_plain) VALUES (new."rowid", new.title, new.url, new.extracted_content_plain, new.full_content_plain);END', + 'tab_after_insert', + ); late final Trigger tabAfterDelete = Trigger( - 'CREATE TRIGGER tab_after_delete AFTER DELETE ON tab BEGIN INSERT INTO tab_fts (tab_fts, "rowid", title, url, extracted_content_plain, full_content_plain) VALUES (\'delete\', old."rowid", old.title, old.url, old.extracted_content_plain, old.full_content_plain);END', - 'tab_after_delete'); + 'CREATE TRIGGER tab_after_delete AFTER DELETE ON tab BEGIN INSERT INTO tab_fts (tab_fts, "rowid", title, url, extracted_content_plain, full_content_plain) VALUES (\'delete\', old."rowid", old.title, old.url, old.extracted_content_plain, old.full_content_plain);END', + 'tab_after_delete', + ); late final Trigger tabAfterUpdate = Trigger( - 'CREATE TRIGGER tab_after_update AFTER UPDATE ON tab BEGIN INSERT INTO tab_fts (tab_fts, "rowid", title, url, extracted_content_plain, full_content_plain) VALUES (\'delete\', old."rowid", old.title, old.url, old.extracted_content_plain, old.full_content_plain);INSERT INTO tab_fts ("rowid", title, url, extracted_content_plain, full_content_plain) VALUES (new."rowid", new.title, new.url, new.extracted_content_plain, new.full_content_plain);END', - 'tab_after_update'); - late final Index documentMainDocumentId = Index('document_main_document_id', - 'CREATE INDEX document_main_document_id ON document (main_document_id)'); - late final Index documentContextId = Index('document_context_id', - 'CREATE INDEX document_context_id ON document (context_id)'); + 'CREATE TRIGGER tab_after_update AFTER UPDATE ON tab BEGIN INSERT INTO tab_fts (tab_fts, "rowid", title, url, extracted_content_plain, full_content_plain) VALUES (\'delete\', old."rowid", old.title, old.url, old.extracted_content_plain, old.full_content_plain);INSERT INTO tab_fts ("rowid", title, url, extracted_content_plain, full_content_plain) VALUES (new."rowid", new.title, new.url, new.extracted_content_plain, new.full_content_plain);END', + 'tab_after_update', + ); + late final Index documentMainDocumentId = Index( + 'document_main_document_id', + 'CREATE INDEX document_main_document_id ON document (main_document_id)', + ); + late final Index documentContextId = Index( + 'document_context_id', + 'CREATE INDEX document_context_id ON document (context_id)', + ); late final DocumentVec documentVec = DocumentVec(this); late final Trigger documentDelete = Trigger( - 'CREATE TRIGGER document_delete AFTER DELETE ON document BEGIN DELETE FROM document_vec WHERE id = old.document_id;END', - 'document_delete'); + 'CREATE TRIGGER document_delete AFTER DELETE ON document BEGIN DELETE FROM document_vec WHERE id = old.document_id;END', + 'document_delete', + ); late final Trigger documentUpdateDelete = Trigger( - 'CREATE TRIGGER document_update_delete AFTER UPDATE ON document BEGIN DELETE FROM document_vec WHERE id = new.document_id AND content_hash != new.content_hash;END', - 'document_update_delete'); + 'CREATE TRIGGER document_update_delete AFTER UPDATE ON document BEGIN DELETE FROM document_vec WHERE id = new.document_id AND content_hash != new.content_hash;END', + 'document_update_delete', + ); late final ContainerDao containerDao = ContainerDao(this as TabDatabase); late final TabDao tabDao = TabDao(this as TabDatabase); late final VectorDao vectorDao = VectorDao(this as TabDatabase); @@ -1579,151 +1851,155 @@ abstract class _$TabDatabase extends GeneratedDatabase { Selectable containersWithCount() { return customSelect( - 'SELECT container.*, tab_agg.tab_count FROM container LEFT JOIN (SELECT container_id, COUNT(*) AS tab_count, MAX(timestamp) AS last_updated FROM tab GROUP BY container_id) AS tab_agg ON container.id = tab_agg.container_id ORDER BY tab_agg.last_updated DESC NULLS LAST', - variables: [], - readsFrom: { - container, - tab, - }).map((QueryRow row) => ContainerDataWithCount( - id: row.read('id'), - name: row.readNullable('name'), - color: Container.$convertercolor.fromSql(row.read('color')), - metadata: NullAwareTypeConverter.wrapFromSql( - Container.$convertermetadata, - row.readNullable('metadata')), - tabCount: row.readNullable('tab_count'), - )); + 'SELECT container.*, tab_agg.tab_count FROM container LEFT JOIN (SELECT container_id, COUNT(*) AS tab_count, MAX(timestamp) AS last_updated FROM tab GROUP BY container_id) AS tab_agg ON container.id = tab_agg.container_id ORDER BY tab_agg.last_updated DESC NULLS LAST', + variables: [], + readsFrom: {container, tab}, + ).map( + (QueryRow row) => ContainerDataWithCount( + id: row.read('id'), + name: row.readNullable('name'), + color: Container.$convertercolor.fromSql(row.read('color')), + metadata: NullAwareTypeConverter.wrapFromSql( + Container.$convertermetadata, + row.readNullable('metadata'), + ), + tabCount: row.readNullable('tab_count'), + ), + ); } - Selectable leadingOrderKey( - {required int bucket, String? containerId}) { + Selectable leadingOrderKey({ + required int bucket, + String? containerId, + }) { return customSelect( - 'SELECT lexo_rank_previous(?1, (SELECT order_key FROM tab WHERE container_id IS ?2 ORDER BY order_key LIMIT 1)) AS _c0', - variables: [ - Variable(bucket), - Variable(containerId) - ], - readsFrom: { - tab, - }).map((QueryRow row) => row.read('_c0')); + 'SELECT lexo_rank_previous(?1, (SELECT order_key FROM tab WHERE container_id IS ?2 ORDER BY order_key LIMIT 1)) AS _c0', + variables: [Variable(bucket), Variable(containerId)], + readsFrom: {tab}, + ).map((QueryRow row) => row.read('_c0')); } - Selectable trailingOrderKey( - {required int bucket, String? containerId}) { + Selectable trailingOrderKey({ + required int bucket, + String? containerId, + }) { return customSelect( - 'SELECT lexo_rank_next(?1, (SELECT order_key FROM tab WHERE container_id IS ?2 ORDER BY order_key DESC LIMIT 1)) AS _c0', - variables: [ - Variable(bucket), - Variable(containerId) - ], - readsFrom: { - tab, - }).map((QueryRow row) => row.read('_c0')); + 'SELECT lexo_rank_next(?1, (SELECT order_key FROM tab WHERE container_id IS ?2 ORDER BY order_key DESC LIMIT 1)) AS _c0', + variables: [Variable(bucket), Variable(containerId)], + readsFrom: {tab}, + ).map((QueryRow row) => row.read('_c0')); } - Selectable orderKeyAfterTab( - {String? containerId, required String tabId}) { + Selectable orderKeyAfterTab({ + String? containerId, + required String tabId, + }) { return customSelect( - 'WITH ordered_table AS (SELECT 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 FROM tab WHERE container_id IS ?1) SELECT lexo_rank_reorder_after(order_key, next_order_key) AS _c0 FROM ordered_table WHERE id = ?2', - variables: [ - Variable(containerId), - Variable(tabId) - ], - readsFrom: { - tab, - }).map((QueryRow row) => row.read('_c0')); + 'WITH ordered_table AS (SELECT 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 FROM tab WHERE container_id IS ?1) SELECT lexo_rank_reorder_after(order_key, next_order_key) AS _c0 FROM ordered_table WHERE id = ?2', + variables: [Variable(containerId), Variable(tabId)], + readsFrom: {tab}, + ).map((QueryRow row) => row.read('_c0')); } - Selectable queryTabsBasic( - {required String beforeMatch, - required String afterMatch, - required String query}) { + Selectable queryTabsBasic({ + required String beforeMatch, + required String afterMatch, + required String query, + }) { return customSelect( - 'WITH weights AS (SELECT 10.0 AS title_weight, 5.0 AS url_weight) SELECT t.id, highlight(tab_fts, 0, ?1, ?2) AS title, highlight(tab_fts, 1, ?1, ?2) AS url, bm25(tab_fts, weights.title_weight, weights.url_weight) AS weighted_rank, t.url AS clean_url FROM tab_fts AS fts INNER JOIN tab AS t ON t."rowid" = fts."rowid" CROSS JOIN weights WHERE fts.title LIKE ?3 OR fts.url LIKE ?3 ORDER BY weighted_rank ASC, t.timestamp DESC', - variables: [ - Variable(beforeMatch), - Variable(afterMatch), - Variable(query) - ], - readsFrom: { - tab, - tabFts, - }).map((QueryRow row) => TabQueryResult( - id: row.read('id'), - title: row.readNullable('title'), - url: row.readNullable('url'), - cleanUrl: row.readNullable('clean_url'), - weightedRank: row.read('weighted_rank'), - )); + 'WITH weights AS (SELECT 10.0 AS title_weight, 5.0 AS url_weight) SELECT t.id, highlight(tab_fts, 0, ?1, ?2) AS title, highlight(tab_fts, 1, ?1, ?2) AS url, bm25(tab_fts, weights.title_weight, weights.url_weight) AS weighted_rank, t.url AS clean_url FROM tab_fts AS fts INNER JOIN tab AS t ON t."rowid" = fts."rowid" CROSS JOIN weights WHERE fts.title LIKE ?3 OR fts.url LIKE ?3 ORDER BY weighted_rank ASC, t.timestamp DESC', + variables: [ + Variable(beforeMatch), + Variable(afterMatch), + Variable(query), + ], + readsFrom: {tab, tabFts}, + ).map( + (QueryRow row) => TabQueryResult( + id: row.read('id'), + title: row.readNullable('title'), + url: row.readNullable('url'), + cleanUrl: NullAwareTypeConverter.wrapFromSql( + Tab.$converterurl, + row.readNullable('clean_url'), + ), + weightedRank: row.read('weighted_rank'), + ), + ); } - Selectable queryTabsFullContent( - {required String beforeMatch, - required String afterMatch, - required String ellipsis, - required int snippetLength, - required String query}) { + Selectable queryTabsFullContent({ + required String beforeMatch, + required String afterMatch, + required String ellipsis, + required int snippetLength, + required String query, + }) { return customSelect( - 'WITH weights AS (SELECT 10.0 AS title_weight, 5.0 AS url_weight, 3.0 AS extracted_weight, 1.0 AS full_weight) SELECT t.id, highlight(tab_fts, 0, ?1, ?2) AS title, highlight(tab_fts, 1, ?1, ?2) AS url, snippet(tab_fts, 2, ?1, ?2, ?3, ?4) AS extracted_content, snippet(tab_fts, 3, ?1, ?2, ?3, ?4) AS full_content,(bm25(tab_fts, weights.title_weight, weights.url_weight, weights.extracted_weight, weights.full_weight))AS weighted_rank, t.url AS clean_url FROM tab_fts(?5)AS fts INNER JOIN tab AS t ON t."rowid" = fts."rowid" CROSS JOIN weights ORDER BY weighted_rank ASC, t.timestamp DESC', - variables: [ - Variable(beforeMatch), - Variable(afterMatch), - Variable(ellipsis), - Variable(snippetLength), - Variable(query) - ], - readsFrom: { - tab, - tabFts, - }).map((QueryRow row) => TabQueryResult( - id: row.read('id'), - title: row.readNullable('title'), - url: row.readNullable('url'), - cleanUrl: row.readNullable('clean_url'), - extractedContent: row.readNullable('extracted_content'), - fullContent: row.readNullable('full_content'), - weightedRank: row.read('weighted_rank'), - )); + 'WITH weights AS (SELECT 10.0 AS title_weight, 5.0 AS url_weight, 3.0 AS extracted_weight, 1.0 AS full_weight) SELECT t.id, highlight(tab_fts, 0, ?1, ?2) AS title, highlight(tab_fts, 1, ?1, ?2) AS url, snippet(tab_fts, 2, ?1, ?2, ?3, ?4) AS extracted_content, snippet(tab_fts, 3, ?1, ?2, ?3, ?4) AS full_content,(bm25(tab_fts, weights.title_weight, weights.url_weight, weights.extracted_weight, weights.full_weight))AS weighted_rank, t.url AS clean_url FROM tab_fts(?5)AS fts INNER JOIN tab AS t ON t."rowid" = fts."rowid" CROSS JOIN weights ORDER BY weighted_rank ASC, t.timestamp DESC', + variables: [ + Variable(beforeMatch), + Variable(afterMatch), + Variable(ellipsis), + Variable(snippetLength), + Variable(query), + ], + readsFrom: {tab, tabFts}, + ).map( + (QueryRow row) => TabQueryResult( + id: row.read('id'), + title: row.readNullable('title'), + url: row.readNullable('url'), + cleanUrl: NullAwareTypeConverter.wrapFromSql( + Tab.$converterurl, + row.readNullable('clean_url'), + ), + extractedContent: row.readNullable('extracted_content'), + fullContent: row.readNullable('full_content'), + weightedRank: row.read('weighted_rank'), + ), + ); } - Selectable missingDocumentEmbeddings( - {String? mainDocumentId, String? contextId}) { + Selectable missingDocumentEmbeddings({ + String? mainDocumentId, + String? contextId, + }) { return customSelect( - 'SELECT doc.* FROM document AS doc WHERE doc.main_document_id IS COALESCE(?1, doc.main_document_id) AND doc.context_id IS COALESCE(?2, doc.context_id) AND NOT EXISTS (SELECT 1 AS _c0 FROM document_vec AS vec WHERE vec.id = doc.document_id)', - variables: [ - Variable(mainDocumentId), - Variable(contextId) - ], - readsFrom: { - document, - documentVec, - }).asyncMap(document.mapFromRow); + 'SELECT doc.* FROM document AS doc WHERE doc.main_document_id IS COALESCE(?1, doc.main_document_id) AND doc.context_id IS COALESCE(?2, doc.context_id) AND NOT EXISTS (SELECT 1 AS _c0 FROM document_vec AS vec WHERE vec.id = doc.document_id)', + variables: [ + Variable(mainDocumentId), + Variable(contextId), + ], + readsFrom: {document, documentVec}, + ).asyncMap(document.mapFromRow); } - Selectable queryVectors( - {required Uint8List searchVectors, - int? k, - String? mainDocumentId, - String? contextId}) { + Selectable queryVectors({ + required Uint8List searchVectors, + int? k, + String? mainDocumentId, + String? contextId, + }) { return customSelect( - 'SELECT vec.id, doc.main_document_id, doc.context_id, doc.content, doc.metadata, vec.distance FROM document_vec AS vec INNER JOIN document AS doc ON doc.document_id = vec.id WHERE vec.embedding MATCH ?1 AND vec.k = ?2 AND vec.main_document_id IS COALESCE(?3, vec.main_document_id) AND vec.context_id IS COALESCE(?4, vec.context_id) ORDER BY vec.distance', - variables: [ - Variable(searchVectors), - Variable(k), - Variable(mainDocumentId), - Variable(contextId) - ], - readsFrom: { - documentVec, - document, - }).map((QueryRow row) => VectorResult( - id: row.read('id'), - mainDocumentId: row.readNullable('main_document_id'), - contextId: row.readNullable('context_id'), - content: row.read('content'), - metadata: row.readNullable('metadata'), - distance: row.readNullable('distance'), - )); + 'SELECT vec.id, doc.main_document_id, doc.context_id, doc.content, doc.metadata, vec.distance FROM document_vec AS vec INNER JOIN document AS doc ON doc.document_id = vec.id WHERE vec.embedding MATCH ?1 AND vec.k = ?2 AND vec.main_document_id IS COALESCE(?3, vec.main_document_id) AND vec.context_id IS COALESCE(?4, vec.context_id) ORDER BY vec.distance', + variables: [ + Variable(searchVectors), + Variable(k), + Variable(mainDocumentId), + Variable(contextId), + ], + readsFrom: {documentVec, document}, + ).map( + (QueryRow row) => VectorResult( + id: row.read('id'), + mainDocumentId: row.readNullable('main_document_id'), + contextId: row.readNullable('context_id'), + content: row.read('content'), + metadata: row.readNullable('metadata'), + distance: row.readNullable('distance'), + ), + ); } @override @@ -1731,107 +2007,112 @@ abstract class _$TabDatabase extends GeneratedDatabase { allSchemaEntities.whereType>(); @override List get allSchemaEntities => [ - container, - tab, - document, - tabDocumentDelete, - tabFts, - tabAfterInsert, - tabAfterDelete, - tabAfterUpdate, - documentMainDocumentId, - documentContextId, - documentVec, - documentDelete, - documentUpdateDelete - ]; + container, + tab, + document, + tabDocumentDelete, + tabFts, + tabAfterInsert, + tabAfterDelete, + tabAfterUpdate, + documentMainDocumentId, + documentContextId, + documentVec, + documentDelete, + documentUpdateDelete, + ]; @override - StreamQueryUpdateRules get streamUpdateRules => const StreamQueryUpdateRules( - [ - WritePropagation( - on: TableUpdateQuery.onTableName('container', - limitUpdateKind: UpdateKind.delete), - result: [ - TableUpdate('tab', kind: UpdateKind.delete), - ], - ), - WritePropagation( - on: TableUpdateQuery.onTableName('tab', - limitUpdateKind: UpdateKind.delete), - result: [ - TableUpdate('document', kind: UpdateKind.delete), - ], - ), - WritePropagation( - on: TableUpdateQuery.onTableName('tab', - limitUpdateKind: UpdateKind.insert), - result: [ - TableUpdate('tab_fts', kind: UpdateKind.insert), - ], - ), - WritePropagation( - on: TableUpdateQuery.onTableName('tab', - limitUpdateKind: UpdateKind.delete), - result: [ - TableUpdate('tab_fts', kind: UpdateKind.insert), - ], - ), - WritePropagation( - on: TableUpdateQuery.onTableName('tab', - limitUpdateKind: UpdateKind.update), - result: [ - TableUpdate('tab_fts', kind: UpdateKind.insert), - ], - ), - WritePropagation( - on: TableUpdateQuery.onTableName('document', - limitUpdateKind: UpdateKind.delete), - result: [ - TableUpdate('document_vec', kind: UpdateKind.delete), - ], - ), - WritePropagation( - on: TableUpdateQuery.onTableName('document', - limitUpdateKind: UpdateKind.update), - result: [ - TableUpdate('document_vec', kind: UpdateKind.delete), - ], - ), - ], - ); + StreamQueryUpdateRules get streamUpdateRules => const StreamQueryUpdateRules([ + WritePropagation( + on: TableUpdateQuery.onTableName( + 'container', + limitUpdateKind: UpdateKind.delete, + ), + result: [TableUpdate('tab', kind: UpdateKind.delete)], + ), + WritePropagation( + on: TableUpdateQuery.onTableName( + 'tab', + limitUpdateKind: UpdateKind.delete, + ), + result: [TableUpdate('document', kind: UpdateKind.delete)], + ), + WritePropagation( + on: TableUpdateQuery.onTableName( + 'tab', + limitUpdateKind: UpdateKind.insert, + ), + result: [TableUpdate('tab_fts', kind: UpdateKind.insert)], + ), + WritePropagation( + on: TableUpdateQuery.onTableName( + 'tab', + limitUpdateKind: UpdateKind.delete, + ), + result: [TableUpdate('tab_fts', kind: UpdateKind.insert)], + ), + WritePropagation( + on: TableUpdateQuery.onTableName( + 'tab', + limitUpdateKind: UpdateKind.update, + ), + result: [TableUpdate('tab_fts', kind: UpdateKind.insert)], + ), + WritePropagation( + on: TableUpdateQuery.onTableName( + 'document', + limitUpdateKind: UpdateKind.delete, + ), + result: [TableUpdate('document_vec', kind: UpdateKind.delete)], + ), + WritePropagation( + on: TableUpdateQuery.onTableName( + 'document', + limitUpdateKind: UpdateKind.update, + ), + result: [TableUpdate('document_vec', kind: UpdateKind.delete)], + ), + ]); } -typedef $ContainerCreateCompanionBuilder = ContainerCompanion Function({ - required String id, - Value name, - required Color color, - Value metadata, - Value rowid, -}); -typedef $ContainerUpdateCompanionBuilder = ContainerCompanion Function({ - Value id, - Value name, - Value color, - Value metadata, - Value rowid, -}); +typedef $ContainerCreateCompanionBuilder = + ContainerCompanion Function({ + required String id, + Value name, + required Color color, + Value metadata, + Value rowid, + }); +typedef $ContainerUpdateCompanionBuilder = + ContainerCompanion Function({ + Value id, + Value name, + Value color, + Value metadata, + Value rowid, + }); final class $ContainerReferences extends BaseReferences<_$TabDatabase, Container, ContainerData> { $ContainerReferences(super.$_db, super.$_table, super.$_typedResult); static MultiTypedResultKey> _tabRefsTable( - _$TabDatabase db) => - MultiTypedResultKey.fromTable(db.tab, - aliasName: $_aliasNameGenerator(db.container.id, db.tab.containerId)); + _$TabDatabase db, + ) => MultiTypedResultKey.fromTable( + db.tab, + aliasName: $_aliasNameGenerator(db.container.id, db.tab.containerId), + ); $TabProcessedTableManager get tabRefs { - final manager = $TabTableManager($_db, $_db.tab) - .filter((f) => f.containerId.id.sqlEquals($_itemColumn('id')!)); + final manager = $TabTableManager( + $_db, + $_db.tab, + ).filter((f) => f.containerId.id.sqlEquals($_itemColumn('id')!)); final cache = $_typedResult.readTableOrNull(_tabRefsTable($_db)); return ProcessedTableManager( - manager.$state.copyWith(prefetchedData: cache)); + manager.$state.copyWith(prefetchedData: cache), + ); } } @@ -1844,38 +2125,47 @@ class $ContainerFilterComposer extends Composer<_$TabDatabase, Container> { super.$removeJoinBuilderFromRootComposer, }); ColumnFilters get id => $composableBuilder( - column: $table.id, builder: (column) => ColumnFilters(column)); + column: $table.id, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get name => $composableBuilder( - column: $table.name, builder: (column) => ColumnFilters(column)); + column: $table.name, + builder: (column) => ColumnFilters(column), + ); ColumnWithTypeConverterFilters get color => $composableBuilder( - column: $table.color, - builder: (column) => ColumnWithTypeConverterFilters(column)); + column: $table.color, + builder: (column) => ColumnWithTypeConverterFilters(column), + ); ColumnWithTypeConverterFilters - get metadata => $composableBuilder( - column: $table.metadata, - builder: (column) => ColumnWithTypeConverterFilters(column)); + get metadata => $composableBuilder( + column: $table.metadata, + builder: (column) => ColumnWithTypeConverterFilters(column), + ); Expression tabRefs(Expression Function($TabFilterComposer f) f) { final $TabFilterComposer composer = $composerBuilder( - composer: this, - getCurrentColumn: (t) => t.id, - referencedTable: $db.tab, - getReferencedColumn: (t) => t.containerId, - builder: (joinBuilder, - {$addJoinBuilderToRootComposer, - $removeJoinBuilderFromRootComposer}) => - $TabFilterComposer( - $db: $db, - $table: $db.tab, - $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, - joinBuilder: joinBuilder, - $removeJoinBuilderFromRootComposer: - $removeJoinBuilderFromRootComposer, - )); + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.tab, + getReferencedColumn: (t) => t.containerId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $TabFilterComposer( + $db: $db, + $table: $db.tab, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); return f(composer); } } @@ -1889,16 +2179,24 @@ class $ContainerOrderingComposer extends Composer<_$TabDatabase, Container> { super.$removeJoinBuilderFromRootComposer, }); ColumnOrderings get id => $composableBuilder( - column: $table.id, builder: (column) => ColumnOrderings(column)); + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get name => $composableBuilder( - column: $table.name, builder: (column) => ColumnOrderings(column)); + column: $table.name, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get color => $composableBuilder( - column: $table.color, builder: (column) => ColumnOrderings(column)); + column: $table.color, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get metadata => $composableBuilder( - column: $table.metadata, builder: (column) => ColumnOrderings(column)); + column: $table.metadata, + builder: (column) => ColumnOrderings(column), + ); } class $ContainerAnnotationComposer extends Composer<_$TabDatabase, Container> { @@ -1922,81 +2220,95 @@ class $ContainerAnnotationComposer extends Composer<_$TabDatabase, Container> { $composableBuilder(column: $table.metadata, builder: (column) => column); Expression tabRefs( - Expression Function($TabAnnotationComposer a) f) { + Expression Function($TabAnnotationComposer a) f, + ) { final $TabAnnotationComposer composer = $composerBuilder( - composer: this, - getCurrentColumn: (t) => t.id, - referencedTable: $db.tab, - getReferencedColumn: (t) => t.containerId, - builder: (joinBuilder, - {$addJoinBuilderToRootComposer, - $removeJoinBuilderFromRootComposer}) => - $TabAnnotationComposer( - $db: $db, - $table: $db.tab, - $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, - joinBuilder: joinBuilder, - $removeJoinBuilderFromRootComposer: - $removeJoinBuilderFromRootComposer, - )); + composer: this, + getCurrentColumn: (t) => t.id, + referencedTable: $db.tab, + getReferencedColumn: (t) => t.containerId, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $TabAnnotationComposer( + $db: $db, + $table: $db.tab, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); return f(composer); } } -class $ContainerTableManager extends RootTableManager< - _$TabDatabase, - Container, - ContainerData, - $ContainerFilterComposer, - $ContainerOrderingComposer, - $ContainerAnnotationComposer, - $ContainerCreateCompanionBuilder, - $ContainerUpdateCompanionBuilder, - (ContainerData, $ContainerReferences), - ContainerData, - PrefetchHooks Function({bool tabRefs})> { +class $ContainerTableManager + extends + RootTableManager< + _$TabDatabase, + Container, + ContainerData, + $ContainerFilterComposer, + $ContainerOrderingComposer, + $ContainerAnnotationComposer, + $ContainerCreateCompanionBuilder, + $ContainerUpdateCompanionBuilder, + (ContainerData, $ContainerReferences), + ContainerData, + PrefetchHooks Function({bool tabRefs}) + > { $ContainerTableManager(_$TabDatabase db, Container table) - : super(TableManagerState( + : super( + TableManagerState( db: db, table: table, - createFilteringComposer: () => - $ContainerFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $ContainerOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $ContainerAnnotationComposer($db: db, $table: table), - updateCompanionCallback: ({ - Value id = const Value.absent(), - Value name = const Value.absent(), - Value color = const Value.absent(), - Value metadata = const Value.absent(), - Value rowid = const Value.absent(), - }) => - ContainerCompanion( - id: id, - name: name, - color: color, - metadata: metadata, - rowid: rowid, - ), - createCompanionCallback: ({ - required String id, - Value name = const Value.absent(), - required Color color, - Value metadata = const Value.absent(), - Value rowid = const Value.absent(), - }) => - ContainerCompanion.insert( - id: id, - name: name, - color: color, - metadata: metadata, - rowid: rowid, - ), - withReferenceMapper: (p0) => p0 - .map((e) => - (e.readTable(table), $ContainerReferences(db, table, e))) - .toList(), + createFilteringComposer: + () => $ContainerFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $ContainerOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $ContainerAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value name = const Value.absent(), + Value color = const Value.absent(), + Value metadata = const Value.absent(), + Value rowid = const Value.absent(), + }) => ContainerCompanion( + id: id, + name: name, + color: color, + metadata: metadata, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String id, + Value name = const Value.absent(), + required Color color, + Value metadata = const Value.absent(), + Value rowid = const Value.absent(), + }) => ContainerCompanion.insert( + id: id, + name: name, + color: color, + metadata: metadata, + rowid: rowid, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + $ContainerReferences(db, table, e), + ), + ) + .toList(), prefetchHooksCallback: ({tabRefs = false}) { return PrefetchHooks( db: db, @@ -2005,63 +2317,73 @@ class $ContainerTableManager extends RootTableManager< getPrefetchedDataCallback: (items) async { return [ if (tabRefs) - await $_getPrefetchedData( - currentTable: table, - referencedTable: $ContainerReferences._tabRefsTable(db), - managerFromTypedResult: (p0) => - $ContainerReferences(db, table, p0).tabRefs, - referencedItemsForCurrentItem: - (item, referencedItems) => referencedItems - .where((e) => e.containerId == item.id), - typedResults: items) + await $_getPrefetchedData< + ContainerData, + Container, + TabData + >( + currentTable: table, + referencedTable: $ContainerReferences._tabRefsTable(db), + managerFromTypedResult: + (p0) => $ContainerReferences(db, table, p0).tabRefs, + referencedItemsForCurrentItem: + (item, referencedItems) => referencedItems.where( + (e) => e.containerId == item.id, + ), + typedResults: items, + ), ]; }, ); }, - )); + ), + ); } -typedef $ContainerProcessedTableManager = ProcessedTableManager< - _$TabDatabase, - Container, - ContainerData, - $ContainerFilterComposer, - $ContainerOrderingComposer, - $ContainerAnnotationComposer, - $ContainerCreateCompanionBuilder, - $ContainerUpdateCompanionBuilder, - (ContainerData, $ContainerReferences), - ContainerData, - PrefetchHooks Function({bool tabRefs})>; -typedef $TabCreateCompanionBuilder = TabCompanion Function({ - required String id, - Value containerId, - required String orderKey, - Value url, - Value title, - Value isProbablyReaderable, - Value extractedContentMarkdown, - Value extractedContentPlain, - Value fullContentMarkdown, - Value fullContentPlain, - required DateTime timestamp, - Value rowid, -}); -typedef $TabUpdateCompanionBuilder = TabCompanion Function({ - Value id, - Value containerId, - Value orderKey, - Value url, - Value title, - Value isProbablyReaderable, - Value extractedContentMarkdown, - Value extractedContentPlain, - Value fullContentMarkdown, - Value fullContentPlain, - Value timestamp, - Value rowid, -}); +typedef $ContainerProcessedTableManager = + ProcessedTableManager< + _$TabDatabase, + Container, + ContainerData, + $ContainerFilterComposer, + $ContainerOrderingComposer, + $ContainerAnnotationComposer, + $ContainerCreateCompanionBuilder, + $ContainerUpdateCompanionBuilder, + (ContainerData, $ContainerReferences), + ContainerData, + PrefetchHooks Function({bool tabRefs}) + >; +typedef $TabCreateCompanionBuilder = + TabCompanion Function({ + required String id, + Value containerId, + required String orderKey, + Value url, + Value title, + Value isProbablyReaderable, + Value extractedContentMarkdown, + Value extractedContentPlain, + Value fullContentMarkdown, + Value fullContentPlain, + required DateTime timestamp, + Value rowid, + }); +typedef $TabUpdateCompanionBuilder = + TabCompanion Function({ + Value id, + Value containerId, + Value orderKey, + Value url, + Value title, + Value isProbablyReaderable, + Value extractedContentMarkdown, + Value extractedContentPlain, + Value fullContentMarkdown, + Value fullContentPlain, + Value timestamp, + Value rowid, + }); final class $TabReferences extends BaseReferences<_$TabDatabase, Tab, TabData> { $TabReferences(super.$_db, super.$_table, super.$_typedResult); @@ -2072,12 +2394,15 @@ final class $TabReferences extends BaseReferences<_$TabDatabase, Tab, TabData> { $ContainerProcessedTableManager? get containerId { final $_column = $_itemColumn('container_id'); if ($_column == null) return null; - final manager = $ContainerTableManager($_db, $_db.container) - .filter((f) => f.id.sqlEquals($_column)); + final manager = $ContainerTableManager( + $_db, + $_db.container, + ).filter((f) => f.id.sqlEquals($_column)); final item = $_typedResult.readTableOrNull(_containerIdTable($_db)); if (item == null) return manager; return ProcessedTableManager( - manager.$state.copyWith(prefetchedData: [item])); + manager.$state.copyWith(prefetchedData: [item]), + ); } } @@ -2090,57 +2415,76 @@ class $TabFilterComposer extends Composer<_$TabDatabase, Tab> { super.$removeJoinBuilderFromRootComposer, }); ColumnFilters get id => $composableBuilder( - column: $table.id, builder: (column) => ColumnFilters(column)); + column: $table.id, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get orderKey => $composableBuilder( - column: $table.orderKey, builder: (column) => ColumnFilters(column)); + column: $table.orderKey, + builder: (column) => ColumnFilters(column), + ); - ColumnFilters get url => $composableBuilder( - column: $table.url, builder: (column) => ColumnFilters(column)); + ColumnWithTypeConverterFilters get url => + $composableBuilder( + column: $table.url, + builder: (column) => ColumnWithTypeConverterFilters(column), + ); ColumnFilters get title => $composableBuilder( - column: $table.title, builder: (column) => ColumnFilters(column)); + column: $table.title, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get isProbablyReaderable => $composableBuilder( - column: $table.isProbablyReaderable, - builder: (column) => ColumnFilters(column)); + column: $table.isProbablyReaderable, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get extractedContentMarkdown => $composableBuilder( - column: $table.extractedContentMarkdown, - builder: (column) => ColumnFilters(column)); + column: $table.extractedContentMarkdown, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get extractedContentPlain => $composableBuilder( - column: $table.extractedContentPlain, - builder: (column) => ColumnFilters(column)); + column: $table.extractedContentPlain, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get fullContentMarkdown => $composableBuilder( - column: $table.fullContentMarkdown, - builder: (column) => ColumnFilters(column)); + column: $table.fullContentMarkdown, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get fullContentPlain => $composableBuilder( - column: $table.fullContentPlain, - builder: (column) => ColumnFilters(column)); + column: $table.fullContentPlain, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get timestamp => $composableBuilder( - column: $table.timestamp, builder: (column) => ColumnFilters(column)); + column: $table.timestamp, + builder: (column) => ColumnFilters(column), + ); $ContainerFilterComposer get containerId { final $ContainerFilterComposer composer = $composerBuilder( - composer: this, - getCurrentColumn: (t) => t.containerId, - referencedTable: $db.container, - getReferencedColumn: (t) => t.id, - builder: (joinBuilder, - {$addJoinBuilderToRootComposer, - $removeJoinBuilderFromRootComposer}) => - $ContainerFilterComposer( - $db: $db, - $table: $db.container, - $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, - joinBuilder: joinBuilder, - $removeJoinBuilderFromRootComposer: - $removeJoinBuilderFromRootComposer, - )); + composer: this, + getCurrentColumn: (t) => t.containerId, + referencedTable: $db.container, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $ContainerFilterComposer( + $db: $db, + $table: $db.container, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); return composer; } } @@ -2154,57 +2498,75 @@ class $TabOrderingComposer extends Composer<_$TabDatabase, Tab> { super.$removeJoinBuilderFromRootComposer, }); ColumnOrderings get id => $composableBuilder( - column: $table.id, builder: (column) => ColumnOrderings(column)); + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get orderKey => $composableBuilder( - column: $table.orderKey, builder: (column) => ColumnOrderings(column)); + column: $table.orderKey, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get url => $composableBuilder( - column: $table.url, builder: (column) => ColumnOrderings(column)); + column: $table.url, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get title => $composableBuilder( - column: $table.title, builder: (column) => ColumnOrderings(column)); + column: $table.title, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get isProbablyReaderable => $composableBuilder( - column: $table.isProbablyReaderable, - builder: (column) => ColumnOrderings(column)); + column: $table.isProbablyReaderable, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get extractedContentMarkdown => $composableBuilder( - column: $table.extractedContentMarkdown, - builder: (column) => ColumnOrderings(column)); + column: $table.extractedContentMarkdown, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get extractedContentPlain => $composableBuilder( - column: $table.extractedContentPlain, - builder: (column) => ColumnOrderings(column)); + column: $table.extractedContentPlain, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get fullContentMarkdown => $composableBuilder( - column: $table.fullContentMarkdown, - builder: (column) => ColumnOrderings(column)); + column: $table.fullContentMarkdown, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get fullContentPlain => $composableBuilder( - column: $table.fullContentPlain, - builder: (column) => ColumnOrderings(column)); + column: $table.fullContentPlain, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get timestamp => $composableBuilder( - column: $table.timestamp, builder: (column) => ColumnOrderings(column)); + column: $table.timestamp, + builder: (column) => ColumnOrderings(column), + ); $ContainerOrderingComposer get containerId { final $ContainerOrderingComposer composer = $composerBuilder( - composer: this, - getCurrentColumn: (t) => t.containerId, - referencedTable: $db.container, - getReferencedColumn: (t) => t.id, - builder: (joinBuilder, - {$addJoinBuilderToRootComposer, - $removeJoinBuilderFromRootComposer}) => - $ContainerOrderingComposer( - $db: $db, - $table: $db.container, - $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, - joinBuilder: joinBuilder, - $removeJoinBuilderFromRootComposer: - $removeJoinBuilderFromRootComposer, - )); + composer: this, + getCurrentColumn: (t) => t.containerId, + referencedTable: $db.container, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $ContainerOrderingComposer( + $db: $db, + $table: $db.container, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); return composer; } } @@ -2223,156 +2585,187 @@ class $TabAnnotationComposer extends Composer<_$TabDatabase, Tab> { GeneratedColumn get orderKey => $composableBuilder(column: $table.orderKey, builder: (column) => column); - GeneratedColumn get url => + GeneratedColumnWithTypeConverter get url => $composableBuilder(column: $table.url, builder: (column) => column); GeneratedColumn get title => $composableBuilder(column: $table.title, builder: (column) => column); GeneratedColumn get isProbablyReaderable => $composableBuilder( - column: $table.isProbablyReaderable, builder: (column) => column); + column: $table.isProbablyReaderable, + builder: (column) => column, + ); GeneratedColumn get extractedContentMarkdown => $composableBuilder( - column: $table.extractedContentMarkdown, builder: (column) => column); + column: $table.extractedContentMarkdown, + builder: (column) => column, + ); GeneratedColumn get extractedContentPlain => $composableBuilder( - column: $table.extractedContentPlain, builder: (column) => column); + column: $table.extractedContentPlain, + builder: (column) => column, + ); GeneratedColumn get fullContentMarkdown => $composableBuilder( - column: $table.fullContentMarkdown, builder: (column) => column); + column: $table.fullContentMarkdown, + builder: (column) => column, + ); GeneratedColumn get fullContentPlain => $composableBuilder( - column: $table.fullContentPlain, builder: (column) => column); + column: $table.fullContentPlain, + builder: (column) => column, + ); GeneratedColumn get timestamp => $composableBuilder(column: $table.timestamp, builder: (column) => column); $ContainerAnnotationComposer get containerId { final $ContainerAnnotationComposer composer = $composerBuilder( - composer: this, - getCurrentColumn: (t) => t.containerId, - referencedTable: $db.container, - getReferencedColumn: (t) => t.id, - builder: (joinBuilder, - {$addJoinBuilderToRootComposer, - $removeJoinBuilderFromRootComposer}) => - $ContainerAnnotationComposer( - $db: $db, - $table: $db.container, - $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, - joinBuilder: joinBuilder, - $removeJoinBuilderFromRootComposer: - $removeJoinBuilderFromRootComposer, - )); + composer: this, + getCurrentColumn: (t) => t.containerId, + referencedTable: $db.container, + getReferencedColumn: (t) => t.id, + builder: + ( + joinBuilder, { + $addJoinBuilderToRootComposer, + $removeJoinBuilderFromRootComposer, + }) => $ContainerAnnotationComposer( + $db: $db, + $table: $db.container, + $addJoinBuilderToRootComposer: $addJoinBuilderToRootComposer, + joinBuilder: joinBuilder, + $removeJoinBuilderFromRootComposer: + $removeJoinBuilderFromRootComposer, + ), + ); return composer; } } -class $TabTableManager extends RootTableManager< - _$TabDatabase, - Tab, - TabData, - $TabFilterComposer, - $TabOrderingComposer, - $TabAnnotationComposer, - $TabCreateCompanionBuilder, - $TabUpdateCompanionBuilder, - (TabData, $TabReferences), - TabData, - PrefetchHooks Function({bool containerId})> { +class $TabTableManager + extends + RootTableManager< + _$TabDatabase, + Tab, + TabData, + $TabFilterComposer, + $TabOrderingComposer, + $TabAnnotationComposer, + $TabCreateCompanionBuilder, + $TabUpdateCompanionBuilder, + (TabData, $TabReferences), + TabData, + PrefetchHooks Function({bool containerId}) + > { $TabTableManager(_$TabDatabase db, Tab table) - : super(TableManagerState( + : super( + TableManagerState( db: db, table: table, - createFilteringComposer: () => - $TabFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $TabOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $TabAnnotationComposer($db: db, $table: table), - updateCompanionCallback: ({ - Value id = const Value.absent(), - Value containerId = const Value.absent(), - Value orderKey = const Value.absent(), - Value url = const Value.absent(), - Value title = const Value.absent(), - Value isProbablyReaderable = const Value.absent(), - Value extractedContentMarkdown = const Value.absent(), - Value extractedContentPlain = const Value.absent(), - Value fullContentMarkdown = const Value.absent(), - Value fullContentPlain = const Value.absent(), - Value timestamp = const Value.absent(), - Value rowid = const Value.absent(), - }) => - TabCompanion( - id: id, - containerId: containerId, - orderKey: orderKey, - url: url, - title: title, - isProbablyReaderable: isProbablyReaderable, - extractedContentMarkdown: extractedContentMarkdown, - extractedContentPlain: extractedContentPlain, - fullContentMarkdown: fullContentMarkdown, - fullContentPlain: fullContentPlain, - timestamp: timestamp, - rowid: rowid, - ), - createCompanionCallback: ({ - required String id, - Value containerId = const Value.absent(), - required String orderKey, - Value url = const Value.absent(), - Value title = const Value.absent(), - Value isProbablyReaderable = const Value.absent(), - Value extractedContentMarkdown = const Value.absent(), - Value extractedContentPlain = const Value.absent(), - Value fullContentMarkdown = const Value.absent(), - Value fullContentPlain = const Value.absent(), - required DateTime timestamp, - Value rowid = const Value.absent(), - }) => - TabCompanion.insert( - id: id, - containerId: containerId, - orderKey: orderKey, - url: url, - title: title, - isProbablyReaderable: isProbablyReaderable, - extractedContentMarkdown: extractedContentMarkdown, - extractedContentPlain: extractedContentPlain, - fullContentMarkdown: fullContentMarkdown, - fullContentPlain: fullContentPlain, - timestamp: timestamp, - rowid: rowid, - ), - withReferenceMapper: (p0) => p0 - .map((e) => (e.readTable(table), $TabReferences(db, table, e))) - .toList(), + createFilteringComposer: + () => $TabFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $TabOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $TabAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value containerId = const Value.absent(), + Value orderKey = const Value.absent(), + Value url = const Value.absent(), + Value title = const Value.absent(), + Value isProbablyReaderable = const Value.absent(), + Value extractedContentMarkdown = const Value.absent(), + Value extractedContentPlain = const Value.absent(), + Value fullContentMarkdown = const Value.absent(), + Value fullContentPlain = const Value.absent(), + Value timestamp = const Value.absent(), + Value rowid = const Value.absent(), + }) => TabCompanion( + id: id, + containerId: containerId, + orderKey: orderKey, + url: url, + title: title, + isProbablyReaderable: isProbablyReaderable, + extractedContentMarkdown: extractedContentMarkdown, + extractedContentPlain: extractedContentPlain, + fullContentMarkdown: fullContentMarkdown, + fullContentPlain: fullContentPlain, + timestamp: timestamp, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String id, + Value containerId = const Value.absent(), + required String orderKey, + Value url = const Value.absent(), + Value title = const Value.absent(), + Value isProbablyReaderable = const Value.absent(), + Value extractedContentMarkdown = const Value.absent(), + Value extractedContentPlain = const Value.absent(), + Value fullContentMarkdown = const Value.absent(), + Value fullContentPlain = const Value.absent(), + required DateTime timestamp, + Value rowid = const Value.absent(), + }) => TabCompanion.insert( + id: id, + containerId: containerId, + orderKey: orderKey, + url: url, + title: title, + isProbablyReaderable: isProbablyReaderable, + extractedContentMarkdown: extractedContentMarkdown, + extractedContentPlain: extractedContentPlain, + fullContentMarkdown: fullContentMarkdown, + fullContentPlain: fullContentPlain, + timestamp: timestamp, + rowid: rowid, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + $TabReferences(db, table, e), + ), + ) + .toList(), prefetchHooksCallback: ({containerId = false}) { return PrefetchHooks( db: db, explicitlyWatchedTables: [], addJoins: < - T extends TableManagerState< - dynamic, - dynamic, - dynamic, - dynamic, - dynamic, - dynamic, - dynamic, - dynamic, - dynamic, - dynamic, - dynamic>>(state) { + T extends TableManagerState< + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic, + dynamic + > + >(state) { if (containerId) { - state = state.withJoin( - currentTable: table, - currentColumn: table.containerId, - referencedTable: $TabReferences._containerIdTable(db), - referencedColumn: $TabReferences._containerIdTable(db).id, - ) as T; + state = + state.withJoin( + currentTable: table, + currentColumn: table.containerId, + referencedTable: $TabReferences._containerIdTable( + db, + ), + referencedColumn: + $TabReferences._containerIdTable(db).id, + ) + as T; } return state; @@ -2382,39 +2775,44 @@ class $TabTableManager extends RootTableManager< }, ); }, - )); + ), + ); } -typedef $TabProcessedTableManager = ProcessedTableManager< - _$TabDatabase, - Tab, - TabData, - $TabFilterComposer, - $TabOrderingComposer, - $TabAnnotationComposer, - $TabCreateCompanionBuilder, - $TabUpdateCompanionBuilder, - (TabData, $TabReferences), - TabData, - PrefetchHooks Function({bool containerId})>; -typedef $DocumentCreateCompanionBuilder = DocumentCompanion Function({ - required String documentId, - Value mainDocumentId, - Value contextId, - required String content, - required String contentHash, - Value metadata, - Value rowid, -}); -typedef $DocumentUpdateCompanionBuilder = DocumentCompanion Function({ - Value documentId, - Value mainDocumentId, - Value contextId, - Value content, - Value contentHash, - Value metadata, - Value rowid, -}); +typedef $TabProcessedTableManager = + ProcessedTableManager< + _$TabDatabase, + Tab, + TabData, + $TabFilterComposer, + $TabOrderingComposer, + $TabAnnotationComposer, + $TabCreateCompanionBuilder, + $TabUpdateCompanionBuilder, + (TabData, $TabReferences), + TabData, + PrefetchHooks Function({bool containerId}) + >; +typedef $DocumentCreateCompanionBuilder = + DocumentCompanion Function({ + required String documentId, + Value mainDocumentId, + Value contextId, + required String content, + required String contentHash, + Value metadata, + Value rowid, + }); +typedef $DocumentUpdateCompanionBuilder = + DocumentCompanion Function({ + Value documentId, + Value mainDocumentId, + Value contextId, + Value content, + Value contentHash, + Value metadata, + Value rowid, + }); class $DocumentFilterComposer extends Composer<_$TabDatabase, Document> { $DocumentFilterComposer({ @@ -2425,23 +2823,34 @@ class $DocumentFilterComposer extends Composer<_$TabDatabase, Document> { super.$removeJoinBuilderFromRootComposer, }); ColumnFilters get documentId => $composableBuilder( - column: $table.documentId, builder: (column) => ColumnFilters(column)); + column: $table.documentId, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get mainDocumentId => $composableBuilder( - column: $table.mainDocumentId, - builder: (column) => ColumnFilters(column)); + column: $table.mainDocumentId, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get contextId => $composableBuilder( - column: $table.contextId, builder: (column) => ColumnFilters(column)); + column: $table.contextId, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get content => $composableBuilder( - column: $table.content, builder: (column) => ColumnFilters(column)); + column: $table.content, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get contentHash => $composableBuilder( - column: $table.contentHash, builder: (column) => ColumnFilters(column)); + column: $table.contentHash, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get metadata => $composableBuilder( - column: $table.metadata, builder: (column) => ColumnFilters(column)); + column: $table.metadata, + builder: (column) => ColumnFilters(column), + ); } class $DocumentOrderingComposer extends Composer<_$TabDatabase, Document> { @@ -2453,23 +2862,34 @@ class $DocumentOrderingComposer extends Composer<_$TabDatabase, Document> { super.$removeJoinBuilderFromRootComposer, }); ColumnOrderings get documentId => $composableBuilder( - column: $table.documentId, builder: (column) => ColumnOrderings(column)); + column: $table.documentId, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get mainDocumentId => $composableBuilder( - column: $table.mainDocumentId, - builder: (column) => ColumnOrderings(column)); + column: $table.mainDocumentId, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get contextId => $composableBuilder( - column: $table.contextId, builder: (column) => ColumnOrderings(column)); + column: $table.contextId, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get content => $composableBuilder( - column: $table.content, builder: (column) => ColumnOrderings(column)); + column: $table.content, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get contentHash => $composableBuilder( - column: $table.contentHash, builder: (column) => ColumnOrderings(column)); + column: $table.contentHash, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get metadata => $composableBuilder( - column: $table.metadata, builder: (column) => ColumnOrderings(column)); + column: $table.metadata, + builder: (column) => ColumnOrderings(column), + ); } class $DocumentAnnotationComposer extends Composer<_$TabDatabase, Document> { @@ -2481,10 +2901,14 @@ class $DocumentAnnotationComposer extends Composer<_$TabDatabase, Document> { super.$removeJoinBuilderFromRootComposer, }); GeneratedColumn get documentId => $composableBuilder( - column: $table.documentId, builder: (column) => column); + column: $table.documentId, + builder: (column) => column, + ); GeneratedColumn get mainDocumentId => $composableBuilder( - column: $table.mainDocumentId, builder: (column) => column); + column: $table.mainDocumentId, + builder: (column) => column, + ); GeneratedColumn get contextId => $composableBuilder(column: $table.contextId, builder: (column) => column); @@ -2493,103 +2917,121 @@ class $DocumentAnnotationComposer extends Composer<_$TabDatabase, Document> { $composableBuilder(column: $table.content, builder: (column) => column); GeneratedColumn get contentHash => $composableBuilder( - column: $table.contentHash, builder: (column) => column); + column: $table.contentHash, + builder: (column) => column, + ); GeneratedColumn get metadata => $composableBuilder(column: $table.metadata, builder: (column) => column); } -class $DocumentTableManager extends RootTableManager< - _$TabDatabase, - Document, - DocumentData, - $DocumentFilterComposer, - $DocumentOrderingComposer, - $DocumentAnnotationComposer, - $DocumentCreateCompanionBuilder, - $DocumentUpdateCompanionBuilder, - (DocumentData, BaseReferences<_$TabDatabase, Document, DocumentData>), - DocumentData, - PrefetchHooks Function()> { +class $DocumentTableManager + extends + RootTableManager< + _$TabDatabase, + Document, + DocumentData, + $DocumentFilterComposer, + $DocumentOrderingComposer, + $DocumentAnnotationComposer, + $DocumentCreateCompanionBuilder, + $DocumentUpdateCompanionBuilder, + (DocumentData, BaseReferences<_$TabDatabase, Document, DocumentData>), + DocumentData, + PrefetchHooks Function() + > { $DocumentTableManager(_$TabDatabase db, Document table) - : super(TableManagerState( + : super( + TableManagerState( db: db, table: table, - createFilteringComposer: () => - $DocumentFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $DocumentOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $DocumentAnnotationComposer($db: db, $table: table), - updateCompanionCallback: ({ - Value documentId = const Value.absent(), - Value mainDocumentId = const Value.absent(), - Value contextId = const Value.absent(), - Value content = const Value.absent(), - Value contentHash = const Value.absent(), - Value metadata = const Value.absent(), - Value rowid = const Value.absent(), - }) => - DocumentCompanion( - documentId: documentId, - mainDocumentId: mainDocumentId, - contextId: contextId, - content: content, - contentHash: contentHash, - metadata: metadata, - rowid: rowid, - ), - createCompanionCallback: ({ - required String documentId, - Value mainDocumentId = const Value.absent(), - Value contextId = const Value.absent(), - required String content, - required String contentHash, - Value metadata = const Value.absent(), - Value rowid = const Value.absent(), - }) => - DocumentCompanion.insert( - documentId: documentId, - mainDocumentId: mainDocumentId, - contextId: contextId, - content: content, - contentHash: contentHash, - metadata: metadata, - rowid: rowid, - ), - withReferenceMapper: (p0) => p0 - .map((e) => (e.readTable(table), BaseReferences(db, table, e))) - .toList(), + createFilteringComposer: + () => $DocumentFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $DocumentOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $DocumentAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value documentId = const Value.absent(), + Value mainDocumentId = const Value.absent(), + Value contextId = const Value.absent(), + Value content = const Value.absent(), + Value contentHash = const Value.absent(), + Value metadata = const Value.absent(), + Value rowid = const Value.absent(), + }) => DocumentCompanion( + documentId: documentId, + mainDocumentId: mainDocumentId, + contextId: contextId, + content: content, + contentHash: contentHash, + metadata: metadata, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String documentId, + Value mainDocumentId = const Value.absent(), + Value contextId = const Value.absent(), + required String content, + required String contentHash, + Value metadata = const Value.absent(), + Value rowid = const Value.absent(), + }) => DocumentCompanion.insert( + documentId: documentId, + mainDocumentId: mainDocumentId, + contextId: contextId, + content: content, + contentHash: contentHash, + metadata: metadata, + rowid: rowid, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + BaseReferences(db, table, e), + ), + ) + .toList(), prefetchHooksCallback: null, - )); + ), + ); } -typedef $DocumentProcessedTableManager = ProcessedTableManager< - _$TabDatabase, - Document, - DocumentData, - $DocumentFilterComposer, - $DocumentOrderingComposer, - $DocumentAnnotationComposer, - $DocumentCreateCompanionBuilder, - $DocumentUpdateCompanionBuilder, - (DocumentData, BaseReferences<_$TabDatabase, Document, DocumentData>), - DocumentData, - PrefetchHooks Function()>; -typedef $TabFtsCreateCompanionBuilder = TabFtsCompanion Function({ - required String title, - required String url, - required String extractedContentPlain, - required String fullContentPlain, - Value rowid, -}); -typedef $TabFtsUpdateCompanionBuilder = TabFtsCompanion Function({ - Value title, - Value url, - Value extractedContentPlain, - Value fullContentPlain, - Value rowid, -}); +typedef $DocumentProcessedTableManager = + ProcessedTableManager< + _$TabDatabase, + Document, + DocumentData, + $DocumentFilterComposer, + $DocumentOrderingComposer, + $DocumentAnnotationComposer, + $DocumentCreateCompanionBuilder, + $DocumentUpdateCompanionBuilder, + (DocumentData, BaseReferences<_$TabDatabase, Document, DocumentData>), + DocumentData, + PrefetchHooks Function() + >; +typedef $TabFtsCreateCompanionBuilder = + TabFtsCompanion Function({ + required String title, + required String url, + required String extractedContentPlain, + required String fullContentPlain, + Value rowid, + }); +typedef $TabFtsUpdateCompanionBuilder = + TabFtsCompanion Function({ + Value title, + Value url, + Value extractedContentPlain, + Value fullContentPlain, + Value rowid, + }); class $TabFtsFilterComposer extends Composer<_$TabDatabase, TabFts> { $TabFtsFilterComposer({ @@ -2600,18 +3042,24 @@ class $TabFtsFilterComposer extends Composer<_$TabDatabase, TabFts> { super.$removeJoinBuilderFromRootComposer, }); ColumnFilters get title => $composableBuilder( - column: $table.title, builder: (column) => ColumnFilters(column)); + column: $table.title, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get url => $composableBuilder( - column: $table.url, builder: (column) => ColumnFilters(column)); + column: $table.url, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get extractedContentPlain => $composableBuilder( - column: $table.extractedContentPlain, - builder: (column) => ColumnFilters(column)); + column: $table.extractedContentPlain, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get fullContentPlain => $composableBuilder( - column: $table.fullContentPlain, - builder: (column) => ColumnFilters(column)); + column: $table.fullContentPlain, + builder: (column) => ColumnFilters(column), + ); } class $TabFtsOrderingComposer extends Composer<_$TabDatabase, TabFts> { @@ -2623,18 +3071,24 @@ class $TabFtsOrderingComposer extends Composer<_$TabDatabase, TabFts> { super.$removeJoinBuilderFromRootComposer, }); ColumnOrderings get title => $composableBuilder( - column: $table.title, builder: (column) => ColumnOrderings(column)); + column: $table.title, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get url => $composableBuilder( - column: $table.url, builder: (column) => ColumnOrderings(column)); + column: $table.url, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get extractedContentPlain => $composableBuilder( - column: $table.extractedContentPlain, - builder: (column) => ColumnOrderings(column)); + column: $table.extractedContentPlain, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get fullContentPlain => $composableBuilder( - column: $table.fullContentPlain, - builder: (column) => ColumnOrderings(column)); + column: $table.fullContentPlain, + builder: (column) => ColumnOrderings(column), + ); } class $TabFtsAnnotationComposer extends Composer<_$TabDatabase, TabFts> { @@ -2652,101 +3106,121 @@ class $TabFtsAnnotationComposer extends Composer<_$TabDatabase, TabFts> { $composableBuilder(column: $table.url, builder: (column) => column); GeneratedColumn get extractedContentPlain => $composableBuilder( - column: $table.extractedContentPlain, builder: (column) => column); + column: $table.extractedContentPlain, + builder: (column) => column, + ); GeneratedColumn get fullContentPlain => $composableBuilder( - column: $table.fullContentPlain, builder: (column) => column); + column: $table.fullContentPlain, + builder: (column) => column, + ); } -class $TabFtsTableManager extends RootTableManager< - _$TabDatabase, - TabFts, - TabFt, - $TabFtsFilterComposer, - $TabFtsOrderingComposer, - $TabFtsAnnotationComposer, - $TabFtsCreateCompanionBuilder, - $TabFtsUpdateCompanionBuilder, - (TabFt, BaseReferences<_$TabDatabase, TabFts, TabFt>), - TabFt, - PrefetchHooks Function()> { +class $TabFtsTableManager + extends + RootTableManager< + _$TabDatabase, + TabFts, + TabFt, + $TabFtsFilterComposer, + $TabFtsOrderingComposer, + $TabFtsAnnotationComposer, + $TabFtsCreateCompanionBuilder, + $TabFtsUpdateCompanionBuilder, + (TabFt, BaseReferences<_$TabDatabase, TabFts, TabFt>), + TabFt, + PrefetchHooks Function() + > { $TabFtsTableManager(_$TabDatabase db, TabFts table) - : super(TableManagerState( + : super( + TableManagerState( db: db, table: table, - createFilteringComposer: () => - $TabFtsFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $TabFtsOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $TabFtsAnnotationComposer($db: db, $table: table), - updateCompanionCallback: ({ - Value title = const Value.absent(), - Value url = const Value.absent(), - Value extractedContentPlain = const Value.absent(), - Value fullContentPlain = const Value.absent(), - Value rowid = const Value.absent(), - }) => - TabFtsCompanion( - title: title, - url: url, - extractedContentPlain: extractedContentPlain, - fullContentPlain: fullContentPlain, - rowid: rowid, - ), - createCompanionCallback: ({ - required String title, - required String url, - required String extractedContentPlain, - required String fullContentPlain, - Value rowid = const Value.absent(), - }) => - TabFtsCompanion.insert( - title: title, - url: url, - extractedContentPlain: extractedContentPlain, - fullContentPlain: fullContentPlain, - rowid: rowid, - ), - withReferenceMapper: (p0) => p0 - .map((e) => (e.readTable(table), BaseReferences(db, table, e))) - .toList(), + createFilteringComposer: + () => $TabFtsFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $TabFtsOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $TabFtsAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value title = const Value.absent(), + Value url = const Value.absent(), + Value extractedContentPlain = const Value.absent(), + Value fullContentPlain = const Value.absent(), + Value rowid = const Value.absent(), + }) => TabFtsCompanion( + title: title, + url: url, + extractedContentPlain: extractedContentPlain, + fullContentPlain: fullContentPlain, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String title, + required String url, + required String extractedContentPlain, + required String fullContentPlain, + Value rowid = const Value.absent(), + }) => TabFtsCompanion.insert( + title: title, + url: url, + extractedContentPlain: extractedContentPlain, + fullContentPlain: fullContentPlain, + rowid: rowid, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + BaseReferences(db, table, e), + ), + ) + .toList(), prefetchHooksCallback: null, - )); + ), + ); } -typedef $TabFtsProcessedTableManager = ProcessedTableManager< - _$TabDatabase, - TabFts, - TabFt, - $TabFtsFilterComposer, - $TabFtsOrderingComposer, - $TabFtsAnnotationComposer, - $TabFtsCreateCompanionBuilder, - $TabFtsUpdateCompanionBuilder, - (TabFt, BaseReferences<_$TabDatabase, TabFts, TabFt>), - TabFt, - PrefetchHooks Function()>; -typedef $DocumentVecCreateCompanionBuilder = DocumentVecCompanion Function({ - required String id, - Value mainDocumentId, - Value contextId, - required Uint8List embedding, - required String contentHash, - Value distance, - Value k, - Value rowid, -}); -typedef $DocumentVecUpdateCompanionBuilder = DocumentVecCompanion Function({ - Value id, - Value mainDocumentId, - Value contextId, - Value embedding, - Value contentHash, - Value distance, - Value k, - Value rowid, -}); +typedef $TabFtsProcessedTableManager = + ProcessedTableManager< + _$TabDatabase, + TabFts, + TabFt, + $TabFtsFilterComposer, + $TabFtsOrderingComposer, + $TabFtsAnnotationComposer, + $TabFtsCreateCompanionBuilder, + $TabFtsUpdateCompanionBuilder, + (TabFt, BaseReferences<_$TabDatabase, TabFts, TabFt>), + TabFt, + PrefetchHooks Function() + >; +typedef $DocumentVecCreateCompanionBuilder = + DocumentVecCompanion Function({ + required String id, + Value mainDocumentId, + Value contextId, + required Uint8List embedding, + required String contentHash, + Value distance, + Value k, + Value rowid, + }); +typedef $DocumentVecUpdateCompanionBuilder = + DocumentVecCompanion Function({ + Value id, + Value mainDocumentId, + Value contextId, + Value embedding, + Value contentHash, + Value distance, + Value k, + Value rowid, + }); class $DocumentVecFilterComposer extends Composer<_$TabDatabase, DocumentVec> { $DocumentVecFilterComposer({ @@ -2757,26 +3231,39 @@ class $DocumentVecFilterComposer extends Composer<_$TabDatabase, DocumentVec> { super.$removeJoinBuilderFromRootComposer, }); ColumnFilters get id => $composableBuilder( - column: $table.id, builder: (column) => ColumnFilters(column)); + column: $table.id, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get mainDocumentId => $composableBuilder( - column: $table.mainDocumentId, - builder: (column) => ColumnFilters(column)); + column: $table.mainDocumentId, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get contextId => $composableBuilder( - column: $table.contextId, builder: (column) => ColumnFilters(column)); + column: $table.contextId, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get embedding => $composableBuilder( - column: $table.embedding, builder: (column) => ColumnFilters(column)); + column: $table.embedding, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get contentHash => $composableBuilder( - column: $table.contentHash, builder: (column) => ColumnFilters(column)); + column: $table.contentHash, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get distance => $composableBuilder( - column: $table.distance, builder: (column) => ColumnFilters(column)); + column: $table.distance, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get k => $composableBuilder( - column: $table.k, builder: (column) => ColumnFilters(column)); + column: $table.k, + builder: (column) => ColumnFilters(column), + ); } class $DocumentVecOrderingComposer @@ -2789,26 +3276,39 @@ class $DocumentVecOrderingComposer super.$removeJoinBuilderFromRootComposer, }); ColumnOrderings get id => $composableBuilder( - column: $table.id, builder: (column) => ColumnOrderings(column)); + column: $table.id, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get mainDocumentId => $composableBuilder( - column: $table.mainDocumentId, - builder: (column) => ColumnOrderings(column)); + column: $table.mainDocumentId, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get contextId => $composableBuilder( - column: $table.contextId, builder: (column) => ColumnOrderings(column)); + column: $table.contextId, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get embedding => $composableBuilder( - column: $table.embedding, builder: (column) => ColumnOrderings(column)); + column: $table.embedding, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get contentHash => $composableBuilder( - column: $table.contentHash, builder: (column) => ColumnOrderings(column)); + column: $table.contentHash, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get distance => $composableBuilder( - column: $table.distance, builder: (column) => ColumnOrderings(column)); + column: $table.distance, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get k => $composableBuilder( - column: $table.k, builder: (column) => ColumnOrderings(column)); + column: $table.k, + builder: (column) => ColumnOrderings(column), + ); } class $DocumentVecAnnotationComposer @@ -2824,7 +3324,9 @@ class $DocumentVecAnnotationComposer $composableBuilder(column: $table.id, builder: (column) => column); GeneratedColumn get mainDocumentId => $composableBuilder( - column: $table.mainDocumentId, builder: (column) => column); + column: $table.mainDocumentId, + builder: (column) => column, + ); GeneratedColumn get contextId => $composableBuilder(column: $table.contextId, builder: (column) => column); @@ -2833,7 +3335,9 @@ class $DocumentVecAnnotationComposer $composableBuilder(column: $table.embedding, builder: (column) => column); GeneratedColumn get contentHash => $composableBuilder( - column: $table.contentHash, builder: (column) => column); + column: $table.contentHash, + builder: (column) => column, + ); GeneratedColumn get distance => $composableBuilder(column: $table.distance, builder: (column) => column); @@ -2842,93 +3346,107 @@ class $DocumentVecAnnotationComposer $composableBuilder(column: $table.k, builder: (column) => column); } -class $DocumentVecTableManager extends RootTableManager< - _$TabDatabase, - DocumentVec, - DocumentVecData, - $DocumentVecFilterComposer, - $DocumentVecOrderingComposer, - $DocumentVecAnnotationComposer, - $DocumentVecCreateCompanionBuilder, - $DocumentVecUpdateCompanionBuilder, - ( - DocumentVecData, - BaseReferences<_$TabDatabase, DocumentVec, DocumentVecData> - ), - DocumentVecData, - PrefetchHooks Function()> { +class $DocumentVecTableManager + extends + RootTableManager< + _$TabDatabase, + DocumentVec, + DocumentVecData, + $DocumentVecFilterComposer, + $DocumentVecOrderingComposer, + $DocumentVecAnnotationComposer, + $DocumentVecCreateCompanionBuilder, + $DocumentVecUpdateCompanionBuilder, + ( + DocumentVecData, + BaseReferences<_$TabDatabase, DocumentVec, DocumentVecData>, + ), + DocumentVecData, + PrefetchHooks Function() + > { $DocumentVecTableManager(_$TabDatabase db, DocumentVec table) - : super(TableManagerState( + : super( + TableManagerState( db: db, table: table, - createFilteringComposer: () => - $DocumentVecFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $DocumentVecOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $DocumentVecAnnotationComposer($db: db, $table: table), - updateCompanionCallback: ({ - Value id = const Value.absent(), - Value mainDocumentId = const Value.absent(), - Value contextId = const Value.absent(), - Value embedding = const Value.absent(), - Value contentHash = const Value.absent(), - Value distance = const Value.absent(), - Value k = const Value.absent(), - Value rowid = const Value.absent(), - }) => - DocumentVecCompanion( - id: id, - mainDocumentId: mainDocumentId, - contextId: contextId, - embedding: embedding, - contentHash: contentHash, - distance: distance, - k: k, - rowid: rowid, - ), - createCompanionCallback: ({ - required String id, - Value mainDocumentId = const Value.absent(), - Value contextId = const Value.absent(), - required Uint8List embedding, - required String contentHash, - Value distance = const Value.absent(), - Value k = const Value.absent(), - Value rowid = const Value.absent(), - }) => - DocumentVecCompanion.insert( - id: id, - mainDocumentId: mainDocumentId, - contextId: contextId, - embedding: embedding, - contentHash: contentHash, - distance: distance, - k: k, - rowid: rowid, - ), - withReferenceMapper: (p0) => p0 - .map((e) => (e.readTable(table), BaseReferences(db, table, e))) - .toList(), + createFilteringComposer: + () => $DocumentVecFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $DocumentVecOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $DocumentVecAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value id = const Value.absent(), + Value mainDocumentId = const Value.absent(), + Value contextId = const Value.absent(), + Value embedding = const Value.absent(), + Value contentHash = const Value.absent(), + Value distance = const Value.absent(), + Value k = const Value.absent(), + Value rowid = const Value.absent(), + }) => DocumentVecCompanion( + id: id, + mainDocumentId: mainDocumentId, + contextId: contextId, + embedding: embedding, + contentHash: contentHash, + distance: distance, + k: k, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String id, + Value mainDocumentId = const Value.absent(), + Value contextId = const Value.absent(), + required Uint8List embedding, + required String contentHash, + Value distance = const Value.absent(), + Value k = const Value.absent(), + Value rowid = const Value.absent(), + }) => DocumentVecCompanion.insert( + id: id, + mainDocumentId: mainDocumentId, + contextId: contextId, + embedding: embedding, + contentHash: contentHash, + distance: distance, + k: k, + rowid: rowid, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + BaseReferences(db, table, e), + ), + ) + .toList(), prefetchHooksCallback: null, - )); + ), + ); } -typedef $DocumentVecProcessedTableManager = ProcessedTableManager< - _$TabDatabase, - DocumentVec, - DocumentVecData, - $DocumentVecFilterComposer, - $DocumentVecOrderingComposer, - $DocumentVecAnnotationComposer, - $DocumentVecCreateCompanionBuilder, - $DocumentVecUpdateCompanionBuilder, - ( +typedef $DocumentVecProcessedTableManager = + ProcessedTableManager< + _$TabDatabase, + DocumentVec, DocumentVecData, - BaseReferences<_$TabDatabase, DocumentVec, DocumentVecData> - ), - DocumentVecData, - PrefetchHooks Function()>; + $DocumentVecFilterComposer, + $DocumentVecOrderingComposer, + $DocumentVecAnnotationComposer, + $DocumentVecCreateCompanionBuilder, + $DocumentVecUpdateCompanionBuilder, + ( + DocumentVecData, + BaseReferences<_$TabDatabase, DocumentVec, DocumentVecData>, + ), + DocumentVecData, + PrefetchHooks Function() + >; class $TabDatabaseManager { final _$TabDatabase _db; diff --git a/app/lib/features/geckoview/features/tabs/data/models/container_data.g.dart b/app/lib/features/geckoview/features/tabs/data/models/container_data.g.dart index 949fb21e..8cc9eea2 100644 --- a/app/lib/features/geckoview/features/tabs/data/models/container_data.g.dart +++ b/app/lib/features/geckoview/features/tabs/data/models/container_data.g.dart @@ -46,7 +46,6 @@ class _$ContainerAuthSettingsCWProxyImpl this(lockTimeout: lockTimeout); @override - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `ContainerAuthSettings(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. /// /// Usage @@ -64,14 +63,16 @@ class _$ContainerAuthSettingsCWProxyImpl ? _value.authenticationRequired // ignore: cast_nullable_to_non_nullable : authenticationRequired as bool, - lockOnAppBackground: lockOnAppBackground == const $CopyWithPlaceholder() - ? _value.lockOnAppBackground - // ignore: cast_nullable_to_non_nullable - : lockOnAppBackground as bool, - lockTimeout: lockTimeout == const $CopyWithPlaceholder() - ? _value.lockTimeout - // ignore: cast_nullable_to_non_nullable - : lockTimeout as Duration?, + lockOnAppBackground: + lockOnAppBackground == const $CopyWithPlaceholder() + ? _value.lockOnAppBackground + // ignore: cast_nullable_to_non_nullable + : lockOnAppBackground as bool, + lockTimeout: + lockTimeout == const $CopyWithPlaceholder() + ? _value.lockTimeout + // ignore: cast_nullable_to_non_nullable + : lockTimeout as Duration?, ); } } @@ -127,7 +128,6 @@ class _$ContainerMetadataCWProxyImpl implements _$ContainerMetadataCWProxy { ContainerMetadata useProxy(bool useProxy) => this(useProxy: useProxy); @override - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `ContainerMetadata(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. /// /// Usage @@ -141,22 +141,26 @@ class _$ContainerMetadataCWProxyImpl implements _$ContainerMetadataCWProxy { Object? useProxy = const $CopyWithPlaceholder(), }) { return ContainerMetadata( - iconData: iconData == const $CopyWithPlaceholder() - ? _value.iconData - // ignore: cast_nullable_to_non_nullable - : iconData as IconData?, - contextualIdentity: contextualIdentity == const $CopyWithPlaceholder() - ? _value.contextualIdentity - // ignore: cast_nullable_to_non_nullable - : contextualIdentity as String?, - authSettings: authSettings == const $CopyWithPlaceholder() - ? _value.authSettings - // ignore: cast_nullable_to_non_nullable - : authSettings as ContainerAuthSettings, - useProxy: useProxy == const $CopyWithPlaceholder() - ? _value.useProxy - // ignore: cast_nullable_to_non_nullable - : useProxy as bool, + iconData: + iconData == const $CopyWithPlaceholder() + ? _value.iconData + // ignore: cast_nullable_to_non_nullable + : iconData as IconData?, + contextualIdentity: + contextualIdentity == const $CopyWithPlaceholder() + ? _value.contextualIdentity + // ignore: cast_nullable_to_non_nullable + : contextualIdentity as String?, + authSettings: + authSettings == const $CopyWithPlaceholder() + ? _value.authSettings + // ignore: cast_nullable_to_non_nullable + : authSettings as ContainerAuthSettings, + useProxy: + useProxy == const $CopyWithPlaceholder() + ? _value.useProxy + // ignore: cast_nullable_to_non_nullable + : useProxy as bool, ); } } @@ -211,7 +215,6 @@ class _$ContainerDataCWProxyImpl implements _$ContainerDataCWProxy { this(metadata: metadata); @override - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `ContainerData(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. /// /// Usage @@ -225,22 +228,26 @@ class _$ContainerDataCWProxyImpl implements _$ContainerDataCWProxy { Object? metadata = const $CopyWithPlaceholder(), }) { return ContainerData( - id: id == const $CopyWithPlaceholder() - ? _value.id - // ignore: cast_nullable_to_non_nullable - : id as String, - name: name == const $CopyWithPlaceholder() - ? _value.name - // ignore: cast_nullable_to_non_nullable - : name as String?, - color: color == const $CopyWithPlaceholder() - ? _value.color - // ignore: cast_nullable_to_non_nullable - : color as Color, - metadata: metadata == const $CopyWithPlaceholder() - ? _value.metadata - // ignore: cast_nullable_to_non_nullable - : metadata as ContainerMetadata?, + id: + id == const $CopyWithPlaceholder() + ? _value.id + // ignore: cast_nullable_to_non_nullable + : id as String, + name: + name == const $CopyWithPlaceholder() + ? _value.name + // ignore: cast_nullable_to_non_nullable + : name as String?, + color: + color == const $CopyWithPlaceholder() + ? _value.color + // ignore: cast_nullable_to_non_nullable + : color as Color, + metadata: + metadata == const $CopyWithPlaceholder() + ? _value.metadata + // ignore: cast_nullable_to_non_nullable + : metadata as ContainerMetadata?, ); } } @@ -256,52 +263,57 @@ extension $ContainerDataCopyWith on ContainerData { // ************************************************************************** ContainerAuthSettings _$ContainerAuthSettingsFromJson( - Map json) => - ContainerAuthSettings( - authenticationRequired: json['authenticationRequired'] as bool, - lockOnAppBackground: json['lockOnAppBackground'] as bool, - lockTimeout: json['lockTimeout'] == null + Map json, +) => ContainerAuthSettings( + authenticationRequired: json['authenticationRequired'] as bool, + lockOnAppBackground: json['lockOnAppBackground'] as bool, + lockTimeout: + json['lockTimeout'] == null ? null : Duration(microseconds: (json['lockTimeout'] as num).toInt()), - ); +); Map _$ContainerAuthSettingsToJson( - ContainerAuthSettings instance) => - { - 'authenticationRequired': instance.authenticationRequired, - 'lockOnAppBackground': instance.lockOnAppBackground, - 'lockTimeout': instance.lockTimeout?.inMicroseconds, - }; + ContainerAuthSettings instance, +) => { + 'authenticationRequired': instance.authenticationRequired, + 'lockOnAppBackground': instance.lockOnAppBackground, + 'lockTimeout': instance.lockTimeout?.inMicroseconds, +}; ContainerMetadata _$ContainerMetadataFromJson(Map json) => ContainerMetadata.withDefaults( iconData: _$JsonConverterFromJson, IconData>( - json['iconData'], const IconDataJsonConverter().fromJson), + json['iconData'], + const IconDataJsonConverter().fromJson, + ), contextualIdentity: json['contextualIdentity'] as String?, - authSettings: json['authSettings'] == null - ? null - : ContainerAuthSettings.fromJson( - json['authSettings'] as Map), + authSettings: + json['authSettings'] == null + ? null + : ContainerAuthSettings.fromJson( + json['authSettings'] as Map, + ), useProxy: json['useProxy'] as bool? ?? false, ); Map _$ContainerMetadataToJson(ContainerMetadata instance) => { 'iconData': _$JsonConverterToJson, IconData>( - instance.iconData, const IconDataJsonConverter().toJson), + instance.iconData, + const IconDataJsonConverter().toJson, + ), 'contextualIdentity': instance.contextualIdentity, - 'authSettings': instance.authSettings, + 'authSettings': instance.authSettings.toJson(), 'useProxy': instance.useProxy, }; Value? _$JsonConverterFromJson( Object? json, Value? Function(Json json) fromJson, -) => - json == null ? null : fromJson(json as Json); +) => json == null ? null : fromJson(json as Json); Json? _$JsonConverterToJson( Value? value, Json? Function(Value value) toJson, -) => - value == null ? null : toJson(value); +) => value == null ? null : toJson(value); diff --git a/app/lib/features/geckoview/features/tabs/data/models/tab_query_result.dart b/app/lib/features/geckoview/features/tabs/data/models/tab_query_result.dart index a30b89c1..b592e055 100644 --- a/app/lib/features/geckoview/features/tabs/data/models/tab_query_result.dart +++ b/app/lib/features/geckoview/features/tabs/data/models/tab_query_result.dart @@ -4,7 +4,7 @@ class TabQueryResult with FastEquatable { final String id; final String? title; - final String? cleanUrl; + final Uri? cleanUrl; final String? url; final String? extractedContent; diff --git a/app/lib/features/geckoview/features/tabs/domain/providers.dart b/app/lib/features/geckoview/features/tabs/domain/providers.dart index 396e070e..eb00ef9e 100644 --- a/app/lib/features/geckoview/features/tabs/domain/providers.dart +++ b/app/lib/features/geckoview/features/tabs/domain/providers.dart @@ -1,3 +1,4 @@ +import 'package:lensai/extensions/nullable.dart'; import 'package:lensai/features/geckoview/features/tabs/data/entities/container_filter.dart'; import 'package:lensai/features/geckoview/features/tabs/data/models/container_data.dart'; import 'package:lensai/features/geckoview/features/tabs/data/providers.dart'; @@ -20,7 +21,7 @@ AsyncValue> matchSortedContainersWithCount( ) { return ref.watch( containersWithCountProvider.select((value) { - if (searchText?.isEmpty ?? true) { + if (searchText.isEmpty) { return value; } diff --git a/app/lib/features/geckoview/features/tabs/domain/providers.g.dart b/app/lib/features/geckoview/features/tabs/domain/providers.g.dart index b12a79c4..4c390192 100644 --- a/app/lib/features/geckoview/features/tabs/domain/providers.g.dart +++ b/app/lib/features/geckoview/features/tabs/domain/providers.g.dart @@ -13,21 +13,22 @@ String _$containersWithCountHash() => @ProviderFor(containersWithCount) final containersWithCountProvider = AutoDisposeStreamProvider>.internal( - containersWithCount, - name: r'containersWithCountProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$containersWithCountHash, - dependencies: null, - allTransitiveDependencies: null, -); + containersWithCount, + name: r'containersWithCountProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$containersWithCountHash, + dependencies: null, + allTransitiveDependencies: null, + ); @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element -typedef ContainersWithCountRef - = AutoDisposeStreamProviderRef>; +typedef ContainersWithCountRef = + AutoDisposeStreamProviderRef>; String _$matchSortedContainersWithCountHash() => - r'0ed555f0cb72f4990a2841114d72f57d8178d5c3'; + r'bc2077602c3c1d86c5b916e4ad920053310993e4'; /// Copied from Dart SDK class _SystemHash { @@ -62,21 +63,15 @@ class MatchSortedContainersWithCountFamily const MatchSortedContainersWithCountFamily(); /// See also [matchSortedContainersWithCount]. - MatchSortedContainersWithCountProvider call( - String? searchText, - ) { - return MatchSortedContainersWithCountProvider( - searchText, - ); + MatchSortedContainersWithCountProvider call(String? searchText) { + return MatchSortedContainersWithCountProvider(searchText); } @override MatchSortedContainersWithCountProvider getProviderOverride( covariant MatchSortedContainersWithCountProvider provider, ) { - return call( - provider.searchText, - ); + return call(provider.searchText); } static const Iterable? _dependencies = null; @@ -98,24 +93,23 @@ class MatchSortedContainersWithCountFamily class MatchSortedContainersWithCountProvider extends AutoDisposeProvider>> { /// See also [matchSortedContainersWithCount]. - MatchSortedContainersWithCountProvider( - String? searchText, - ) : this._internal( - (ref) => matchSortedContainersWithCount( - ref as MatchSortedContainersWithCountRef, - searchText, - ), - from: matchSortedContainersWithCountProvider, - name: r'matchSortedContainersWithCountProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$matchSortedContainersWithCountHash, - dependencies: MatchSortedContainersWithCountFamily._dependencies, - allTransitiveDependencies: - MatchSortedContainersWithCountFamily._allTransitiveDependencies, - searchText: searchText, - ); + MatchSortedContainersWithCountProvider(String? searchText) + : this._internal( + (ref) => matchSortedContainersWithCount( + ref as MatchSortedContainersWithCountRef, + searchText, + ), + from: matchSortedContainersWithCountProvider, + name: r'matchSortedContainersWithCountProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$matchSortedContainersWithCountHash, + dependencies: MatchSortedContainersWithCountFamily._dependencies, + allTransitiveDependencies: + MatchSortedContainersWithCountFamily._allTransitiveDependencies, + searchText: searchText, + ); MatchSortedContainersWithCountProvider._internal( super._createNotifier, { @@ -132,8 +126,9 @@ class MatchSortedContainersWithCountProvider @override Override overrideWith( AsyncValue> Function( - MatchSortedContainersWithCountRef provider) - create, + MatchSortedContainersWithCountRef provider, + ) + create, ) { return ProviderOverride( origin: this, @@ -151,7 +146,7 @@ class MatchSortedContainersWithCountProvider @override AutoDisposeProviderElement>> - createElement() { + createElement() { return _MatchSortedContainersWithCountProviderElement(this); } @@ -200,21 +195,15 @@ class ContainerTabIdsFamily extends Family>> { const ContainerTabIdsFamily(); /// See also [containerTabIds]. - ContainerTabIdsProvider call( - ContainerFilter containerFilter, - ) { - return ContainerTabIdsProvider( - containerFilter, - ); + ContainerTabIdsProvider call(ContainerFilter containerFilter) { + return ContainerTabIdsProvider(containerFilter); } @override ContainerTabIdsProvider getProviderOverride( covariant ContainerTabIdsProvider provider, ) { - return call( - provider.containerFilter, - ); + return call(provider.containerFilter); } static const Iterable? _dependencies = null; @@ -235,24 +224,20 @@ class ContainerTabIdsFamily extends Family>> { /// See also [containerTabIds]. class ContainerTabIdsProvider extends AutoDisposeStreamProvider> { /// See also [containerTabIds]. - ContainerTabIdsProvider( - ContainerFilter containerFilter, - ) : this._internal( - (ref) => containerTabIds( - ref as ContainerTabIdsRef, - containerFilter, - ), - from: containerTabIdsProvider, - name: r'containerTabIdsProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$containerTabIdsHash, - dependencies: ContainerTabIdsFamily._dependencies, - allTransitiveDependencies: - ContainerTabIdsFamily._allTransitiveDependencies, - containerFilter: containerFilter, - ); + ContainerTabIdsProvider(ContainerFilter containerFilter) + : this._internal( + (ref) => containerTabIds(ref as ContainerTabIdsRef, containerFilter), + from: containerTabIdsProvider, + name: r'containerTabIdsProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$containerTabIdsHash, + dependencies: ContainerTabIdsFamily._dependencies, + allTransitiveDependencies: + ContainerTabIdsFamily._allTransitiveDependencies, + containerFilter: containerFilter, + ); ContainerTabIdsProvider._internal( super._createNotifier, { @@ -320,5 +305,6 @@ class _ContainerTabIdsProviderElement ContainerFilter get containerFilter => (origin as ContainerTabIdsProvider).containerFilter; } + // 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 diff --git a/app/lib/features/geckoview/features/tabs/domain/providers/selected_container.g.dart b/app/lib/features/geckoview/features/tabs/domain/providers/selected_container.g.dart index 5bb06bf4..4cf1faf3 100644 --- a/app/lib/features/geckoview/features/tabs/domain/providers/selected_container.g.dart +++ b/app/lib/features/geckoview/features/tabs/domain/providers/selected_container.g.dart @@ -13,14 +13,15 @@ String _$selectedContainerDataHash() => @ProviderFor(selectedContainerData) final selectedContainerDataProvider = AutoDisposeStreamProvider.internal( - selectedContainerData, - name: r'selectedContainerDataProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$selectedContainerDataHash, - dependencies: null, - allTransitiveDependencies: null, -); + selectedContainerData, + name: r'selectedContainerDataProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$selectedContainerDataHash, + dependencies: null, + allTransitiveDependencies: null, + ); @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element @@ -31,14 +32,15 @@ String _$selectedContainerHash() => r'f3dab491337396b8d56daed37a0d85c85aa8d64a'; @ProviderFor(SelectedContainer) final selectedContainerProvider = NotifierProvider.internal( - SelectedContainer.new, - name: r'selectedContainerProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$selectedContainerHash, - dependencies: null, - allTransitiveDependencies: null, -); + SelectedContainer.new, + name: r'selectedContainerProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$selectedContainerHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$SelectedContainer = Notifier; // ignore_for_file: type=lint diff --git a/app/lib/features/geckoview/features/tabs/domain/repositories/container.dart b/app/lib/features/geckoview/features/tabs/domain/repositories/container.dart index 2b22ccea..ddf823db 100644 --- a/app/lib/features/geckoview/features/tabs/domain/repositories/container.dart +++ b/app/lib/features/geckoview/features/tabs/domain/repositories/container.dart @@ -22,7 +22,7 @@ class ContainerRepository extends _$ContainerRepository { .replaceContainer(container); } - Future getContainerData(String id) async { + Future getContainerData(String id) { return ref .read(tabDatabaseProvider) .containerDao diff --git a/app/lib/features/geckoview/features/tabs/domain/repositories/container.g.dart b/app/lib/features/geckoview/features/tabs/domain/repositories/container.g.dart index bc7c2266..62ff992c 100644 --- a/app/lib/features/geckoview/features/tabs/domain/repositories/container.g.dart +++ b/app/lib/features/geckoview/features/tabs/domain/repositories/container.g.dart @@ -7,20 +7,21 @@ part of 'container.dart'; // ************************************************************************** String _$containerRepositoryHash() => - r'e91db35caae057e777fbe3b77439289844f52677'; + r'7bb9aa1b2d88e79b7d5e69df1817fb4c97a2a542'; /// See also [ContainerRepository]. @ProviderFor(ContainerRepository) final containerRepositoryProvider = NotifierProvider.internal( - ContainerRepository.new, - name: r'containerRepositoryProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$containerRepositoryHash, - dependencies: null, - allTransitiveDependencies: null, -); + ContainerRepository.new, + name: r'containerRepositoryProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$containerRepositoryHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$ContainerRepository = Notifier; // ignore_for_file: type=lint diff --git a/app/lib/features/geckoview/features/tabs/domain/repositories/tab.g.dart b/app/lib/features/geckoview/features/tabs/domain/repositories/tab.g.dart index ced86aa1..4bf9934a 100644 --- a/app/lib/features/geckoview/features/tabs/domain/repositories/tab.g.dart +++ b/app/lib/features/geckoview/features/tabs/domain/repositories/tab.g.dart @@ -12,14 +12,15 @@ String _$tabDataRepositoryHash() => r'6c6f4aa5eaf4033541700bf18a592555a4b946d3'; @ProviderFor(TabDataRepository) final tabDataRepositoryProvider = NotifierProvider.internal( - TabDataRepository.new, - name: r'tabDataRepositoryProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$tabDataRepositoryHash, - dependencies: null, - allTransitiveDependencies: null, -); + TabDataRepository.new, + name: r'tabDataRepositoryProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$tabDataRepositoryHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$TabDataRepository = Notifier; // ignore_for_file: type=lint diff --git a/app/lib/features/geckoview/features/tabs/domain/repositories/tab_search.g.dart b/app/lib/features/geckoview/features/tabs/domain/repositories/tab_search.g.dart index 55c50d18..6401e2d6 100644 --- a/app/lib/features/geckoview/features/tabs/domain/repositories/tab_search.g.dart +++ b/app/lib/features/geckoview/features/tabs/domain/repositories/tab_search.g.dart @@ -34,9 +34,7 @@ abstract class _$TabSearchRepository extends BuildlessAutoDisposeAsyncNotifier?> { late final TabSearchPartition partition; - FutureOr?> build( - TabSearchPartition partition, - ); + FutureOr?> build(TabSearchPartition partition); } /// See also [TabSearchRepository]. @@ -50,21 +48,15 @@ class TabSearchRepositoryFamily const TabSearchRepositoryFamily(); /// See also [TabSearchRepository]. - TabSearchRepositoryProvider call( - TabSearchPartition partition, - ) { - return TabSearchRepositoryProvider( - partition, - ); + TabSearchRepositoryProvider call(TabSearchPartition partition) { + return TabSearchRepositoryProvider(partition); } @override TabSearchRepositoryProvider getProviderOverride( covariant TabSearchRepositoryProvider provider, ) { - return call( - provider.partition, - ); + return call(provider.partition); } static const Iterable? _dependencies = null; @@ -83,24 +75,27 @@ class TabSearchRepositoryFamily } /// See also [TabSearchRepository]. -class TabSearchRepositoryProvider extends AutoDisposeAsyncNotifierProviderImpl< - TabSearchRepository, List?> { +class TabSearchRepositoryProvider + extends + AutoDisposeAsyncNotifierProviderImpl< + TabSearchRepository, + List? + > { /// See also [TabSearchRepository]. - TabSearchRepositoryProvider( - TabSearchPartition partition, - ) : this._internal( - () => TabSearchRepository()..partition = partition, - from: tabSearchRepositoryProvider, - name: r'tabSearchRepositoryProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$tabSearchRepositoryHash, - dependencies: TabSearchRepositoryFamily._dependencies, - allTransitiveDependencies: - TabSearchRepositoryFamily._allTransitiveDependencies, - partition: partition, - ); + TabSearchRepositoryProvider(TabSearchPartition partition) + : this._internal( + () => TabSearchRepository()..partition = partition, + from: tabSearchRepositoryProvider, + name: r'tabSearchRepositoryProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$tabSearchRepositoryHash, + dependencies: TabSearchRepositoryFamily._dependencies, + allTransitiveDependencies: + TabSearchRepositoryFamily._allTransitiveDependencies, + partition: partition, + ); TabSearchRepositoryProvider._internal( super._createNotifier, { @@ -118,9 +113,7 @@ class TabSearchRepositoryProvider extends AutoDisposeAsyncNotifierProviderImpl< FutureOr?> runNotifierBuild( covariant TabSearchRepository notifier, ) { - return notifier.build( - partition, - ); + return notifier.build(partition); } @override @@ -140,8 +133,11 @@ class TabSearchRepositoryProvider extends AutoDisposeAsyncNotifierProviderImpl< } @override - AutoDisposeAsyncNotifierProviderElement?> createElement() { + AutoDisposeAsyncNotifierProviderElement< + TabSearchRepository, + List? + > + createElement() { return _TabSearchRepositoryProviderElement(this); } @@ -168,13 +164,18 @@ mixin TabSearchRepositoryRef } class _TabSearchRepositoryProviderElement - extends AutoDisposeAsyncNotifierProviderElement?> with TabSearchRepositoryRef { + extends + AutoDisposeAsyncNotifierProviderElement< + TabSearchRepository, + List? + > + with TabSearchRepositoryRef { _TabSearchRepositoryProviderElement(super.provider); @override TabSearchPartition get partition => (origin as TabSearchRepositoryProvider).partition; } + // 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 diff --git a/app/lib/features/geckoview/features/tabs/features/chat/domain/chat_backend.g.dart b/app/lib/features/geckoview/features/tabs/features/chat/domain/chat_backend.g.dart index e52ffd6c..6c6fbc38 100644 --- a/app/lib/features/geckoview/features/tabs/features/chat/domain/chat_backend.g.dart +++ b/app/lib/features/geckoview/features/tabs/features/chat/domain/chat_backend.g.dart @@ -32,9 +32,7 @@ class _SystemHash { abstract class _$ChatBackend extends BuildlessAutoDisposeNotifier { late final String chatId; - void build( - String chatId, - ); + void build(String chatId); } /// See also [ChatBackend]. @@ -47,21 +45,15 @@ class ChatBackendFamily extends Family { const ChatBackendFamily(); /// See also [ChatBackend]. - ChatBackendProvider call( - String chatId, - ) { - return ChatBackendProvider( - chatId, - ); + ChatBackendProvider call(String chatId) { + return ChatBackendProvider(chatId); } @override ChatBackendProvider getProviderOverride( covariant ChatBackendProvider provider, ) { - return call( - provider.chatId, - ); + return call(provider.chatId); } static const Iterable? _dependencies = null; @@ -83,21 +75,19 @@ class ChatBackendFamily extends Family { class ChatBackendProvider extends AutoDisposeNotifierProviderImpl { /// See also [ChatBackend]. - ChatBackendProvider( - String chatId, - ) : this._internal( - () => ChatBackend()..chatId = chatId, - from: chatBackendProvider, - name: r'chatBackendProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$chatBackendHash, - dependencies: ChatBackendFamily._dependencies, - allTransitiveDependencies: - ChatBackendFamily._allTransitiveDependencies, - chatId: chatId, - ); + ChatBackendProvider(String chatId) + : this._internal( + () => ChatBackend()..chatId = chatId, + from: chatBackendProvider, + name: r'chatBackendProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$chatBackendHash, + dependencies: ChatBackendFamily._dependencies, + allTransitiveDependencies: ChatBackendFamily._allTransitiveDependencies, + chatId: chatId, + ); ChatBackendProvider._internal( super._createNotifier, { @@ -112,12 +102,8 @@ class ChatBackendProvider final String chatId; @override - void runNotifierBuild( - covariant ChatBackend notifier, - ) { - return notifier.build( - chatId, - ); + void runNotifierBuild(covariant ChatBackend notifier) { + return notifier.build(chatId); } @override @@ -170,5 +156,6 @@ class _ChatBackendProviderElement @override String get chatId => (origin as ChatBackendProvider).chatId; } + // 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 diff --git a/app/lib/features/geckoview/features/tabs/features/chat/services/qa_memory_chain.g.dart b/app/lib/features/geckoview/features/tabs/features/chat/services/qa_memory_chain.g.dart index 69271d12..3b9f028d 100644 --- a/app/lib/features/geckoview/features/tabs/features/chat/services/qa_memory_chain.g.dart +++ b/app/lib/features/geckoview/features/tabs/features/chat/services/qa_memory_chain.g.dart @@ -98,23 +98,24 @@ class QAMemoryChainProvider String? mainDocumentId, String? contextId, }) : this._internal( - () => QAMemoryChain() - ..chatId = chatId - ..mainDocumentId = mainDocumentId - ..contextId = contextId, - from: qAMemoryChainProvider, - name: r'qAMemoryChainProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$qAMemoryChainHash, - dependencies: QAMemoryChainFamily._dependencies, - allTransitiveDependencies: - QAMemoryChainFamily._allTransitiveDependencies, - chatId: chatId, - mainDocumentId: mainDocumentId, - contextId: contextId, - ); + () => + QAMemoryChain() + ..chatId = chatId + ..mainDocumentId = mainDocumentId + ..contextId = contextId, + from: qAMemoryChainProvider, + name: r'qAMemoryChainProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$qAMemoryChainHash, + dependencies: QAMemoryChainFamily._dependencies, + allTransitiveDependencies: + QAMemoryChainFamily._allTransitiveDependencies, + chatId: chatId, + mainDocumentId: mainDocumentId, + contextId: contextId, + ); QAMemoryChainProvider._internal( super._createNotifier, { @@ -133,9 +134,7 @@ class QAMemoryChainProvider final String? contextId; @override - void runNotifierBuild( - covariant QAMemoryChain notifier, - ) { + void runNotifierBuild(covariant QAMemoryChain notifier) { return notifier.build( chatId: chatId, mainDocumentId: mainDocumentId, @@ -148,10 +147,11 @@ class QAMemoryChainProvider return ProviderOverride( origin: this, override: QAMemoryChainProvider._internal( - () => create() - ..chatId = chatId - ..mainDocumentId = mainDocumentId - ..contextId = contextId, + () => + create() + ..chatId = chatId + ..mainDocumentId = mainDocumentId + ..contextId = contextId, from: from, name: null, dependencies: null, @@ -214,5 +214,6 @@ class _QAMemoryChainProviderElement @override String? get contextId => (origin as QAMemoryChainProvider).contextId; } + // 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 diff --git a/app/lib/features/geckoview/features/tabs/features/vector_store/domain/repositories/document.g.dart b/app/lib/features/geckoview/features/tabs/features/vector_store/domain/repositories/document.g.dart index 20fbbf34..1a081ad3 100644 --- a/app/lib/features/geckoview/features/tabs/features/vector_store/domain/repositories/document.g.dart +++ b/app/lib/features/geckoview/features/tabs/features/vector_store/domain/repositories/document.g.dart @@ -13,14 +13,15 @@ String _$documentRepositoryHash() => @ProviderFor(DocumentRepository) final documentRepositoryProvider = AutoDisposeNotifierProvider.internal( - DocumentRepository.new, - name: r'documentRepositoryProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$documentRepositoryHash, - dependencies: null, - allTransitiveDependencies: null, -); + DocumentRepository.new, + name: r'documentRepositoryProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$documentRepositoryHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$DocumentRepository = AutoDisposeNotifier; // ignore_for_file: type=lint diff --git a/app/lib/features/geckoview/features/tabs/presentation/widgets/container_chips.dart b/app/lib/features/geckoview/features/tabs/presentation/widgets/container_chips.dart index 0d24532c..55988d19 100644 --- a/app/lib/features/geckoview/features/tabs/presentation/widgets/container_chips.dart +++ b/app/lib/features/geckoview/features/tabs/presentation/widgets/container_chips.dart @@ -11,7 +11,6 @@ import 'package:lensai/features/geckoview/features/tabs/data/models/container_da import 'package:lensai/features/geckoview/features/tabs/domain/providers.dart'; import 'package:lensai/features/geckoview/features/tabs/domain/repositories/container.dart'; import 'package:lensai/features/geckoview/features/tabs/domain/repositories/tab.dart'; -import 'package:lensai/presentation/hooks/overlay_portal_controller.dart'; import 'package:lensai/presentation/widgets/selectable_chips.dart'; class ContainerChips extends HookConsumerWidget { diff --git a/app/lib/features/geckoview/utils/image_helper.dart b/app/lib/features/geckoview/utils/image_helper.dart index 9866de2a..6e5a4b40 100644 --- a/app/lib/features/geckoview/utils/image_helper.dart +++ b/app/lib/features/geckoview/utils/image_helper.dart @@ -1,9 +1,9 @@ import 'dart:typed_data'; import 'dart:ui'; +import 'package:fast_equatable/hash.dart'; import 'package:lensai/domain/entities/equatable_image.dart'; import 'package:lensai/utils/lru_cache.dart'; -import 'package:xxh3/xxh3.dart'; final _cache = LRUCache(100); @@ -13,7 +13,7 @@ Future tryDecodeImage( int? targetHeight, bool allowUpscaling = true, }) async { - final digest = xxh3(bytes); + final digest = secureHash(bytes); final cached = _cache.get(digest); if (cached != null) { diff --git a/app/lib/features/search/domain/autosuggest/kagi.dart b/app/lib/features/search/domain/autosuggest/kagi.dart index 01e65cf1..03fc6c23 100644 --- a/app/lib/features/search/domain/autosuggest/kagi.dart +++ b/app/lib/features/search/domain/autosuggest/kagi.dart @@ -25,7 +25,7 @@ class KagiAutosuggestService extends _$KagiAutosuggestService } @override - Future>> getSuggestions(String query) async { + Future>> getSuggestions(String query) { return Result.fromAsync(() async { final response = await _client .get(_baseUrl.replace(queryParameters: {'q': query})) diff --git a/app/lib/features/search/domain/autosuggest/kagi.g.dart b/app/lib/features/search/domain/autosuggest/kagi.g.dart index e5b2c530..04a9d846 100644 --- a/app/lib/features/search/domain/autosuggest/kagi.g.dart +++ b/app/lib/features/search/domain/autosuggest/kagi.g.dart @@ -7,20 +7,21 @@ part of 'kagi.dart'; // ************************************************************************** String _$kagiAutosuggestServiceHash() => - r'7cab576fa4f94096f723faa41f06cf16452b9a02'; + r'039fe84dd480316eab38c80b41e16d16d6c14a7c'; /// See also [KagiAutosuggestService]. @ProviderFor(KagiAutosuggestService) final kagiAutosuggestServiceProvider = NotifierProvider.internal( - KagiAutosuggestService.new, - name: r'kagiAutosuggestServiceProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$kagiAutosuggestServiceHash, - dependencies: null, - allTransitiveDependencies: null, -); + KagiAutosuggestService.new, + name: r'kagiAutosuggestServiceProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$kagiAutosuggestServiceHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$KagiAutosuggestService = Notifier; // ignore_for_file: type=lint diff --git a/app/lib/features/settings/presentation/controllers/save_settings.dart b/app/lib/features/settings/presentation/controllers/save_settings.dart index 1d25b3d3..41c26297 100644 --- a/app/lib/features/settings/presentation/controllers/save_settings.dart +++ b/app/lib/features/settings/presentation/controllers/save_settings.dart @@ -7,7 +7,9 @@ part 'save_settings.g.dart'; @Riverpod(keepAlive: true) class SaveGeneralSettingsController extends _$SaveGeneralSettingsController { @override - FutureOr build() {} + Future build() { + return Future.value(); + } Future save(UpdateGeneralSettingsFunc updateSettings) async { state = const AsyncLoading(); @@ -22,7 +24,9 @@ class SaveGeneralSettingsController extends _$SaveGeneralSettingsController { @Riverpod(keepAlive: true) class SaveEngineSettingsController extends _$SaveEngineSettingsController { @override - FutureOr build() {} + Future build() { + return Future.value(); + } Future save(UpdateEngineSettingsFunc updateSettings) async { state = const AsyncLoading(); diff --git a/app/lib/features/settings/presentation/controllers/save_settings.g.dart b/app/lib/features/settings/presentation/controllers/save_settings.g.dart index 70279c4b..03c1a7a2 100644 --- a/app/lib/features/settings/presentation/controllers/save_settings.g.dart +++ b/app/lib/features/settings/presentation/controllers/save_settings.g.dart @@ -7,37 +7,39 @@ part of 'save_settings.dart'; // ************************************************************************** String _$saveGeneralSettingsControllerHash() => - r'ad8b60839cbcb05a964f57e32fc5d9c1aba30377'; + r'b75c9c52452a9cb687f69dad1523f1ed5205847e'; /// See also [SaveGeneralSettingsController]. @ProviderFor(SaveGeneralSettingsController) final saveGeneralSettingsControllerProvider = AsyncNotifierProvider.internal( - SaveGeneralSettingsController.new, - name: r'saveGeneralSettingsControllerProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$saveGeneralSettingsControllerHash, - dependencies: null, - allTransitiveDependencies: null, -); + SaveGeneralSettingsController.new, + name: r'saveGeneralSettingsControllerProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$saveGeneralSettingsControllerHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$SaveGeneralSettingsController = AsyncNotifier; String _$saveEngineSettingsControllerHash() => - r'4ca0ee76a41a72a8e6eacdb0e39045c667390c00'; + r'd3d74a6aadc89532b1d81c424d92efbfa43002d5'; /// See also [SaveEngineSettingsController]. @ProviderFor(SaveEngineSettingsController) final saveEngineSettingsControllerProvider = AsyncNotifierProvider.internal( - SaveEngineSettingsController.new, - name: r'saveEngineSettingsControllerProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$saveEngineSettingsControllerHash, - dependencies: null, - allTransitiveDependencies: null, -); + SaveEngineSettingsController.new, + name: r'saveEngineSettingsControllerProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$saveEngineSettingsControllerHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$SaveEngineSettingsController = AsyncNotifier; // ignore_for_file: type=lint diff --git a/app/lib/features/share_intent/domain/services/sharing_intent.g.dart b/app/lib/features/share_intent/domain/services/sharing_intent.g.dart index 71c8f07e..b9c86b41 100644 --- a/app/lib/features/share_intent/domain/services/sharing_intent.g.dart +++ b/app/lib/features/share_intent/domain/services/sharing_intent.g.dart @@ -13,18 +13,19 @@ String _$sharingIntentStreamHash() => @ProviderFor(sharingIntentStream) final sharingIntentStreamProvider = AutoDisposeProvider>>.internal( - sharingIntentStream, - name: r'sharingIntentStreamProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$sharingIntentStreamHash, - dependencies: null, - allTransitiveDependencies: null, -); + sharingIntentStream, + name: r'sharingIntentStreamProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$sharingIntentStreamHash, + dependencies: null, + allTransitiveDependencies: null, + ); @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element -typedef SharingIntentStreamRef - = AutoDisposeProviderRef>>; +typedef SharingIntentStreamRef = + AutoDisposeProviderRef>>; // 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 diff --git a/app/lib/features/tor/domain/services/tor_proxy.g.dart b/app/lib/features/tor/domain/services/tor_proxy.g.dart index f95db821..bf2f74c8 100644 --- a/app/lib/features/tor/domain/services/tor_proxy.g.dart +++ b/app/lib/features/tor/domain/services/tor_proxy.g.dart @@ -12,14 +12,15 @@ String _$torProxyServiceHash() => r'85ed8e3b49007aa56e6b82ff802a3e0ce567a0c8'; @ProviderFor(TorProxyService) final torProxyServiceProvider = AsyncNotifierProvider.internal( - TorProxyService.new, - name: r'torProxyServiceProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$torProxyServiceHash, - dependencies: null, - allTransitiveDependencies: null, -); + TorProxyService.new, + name: r'torProxyServiceProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$torProxyServiceHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$TorProxyService = AsyncNotifier; // ignore_for_file: type=lint diff --git a/app/lib/features/tor/presentation/controllers/start_tor_proxy.g.dart b/app/lib/features/tor/presentation/controllers/start_tor_proxy.g.dart index 1cae7c4b..757ee438 100644 --- a/app/lib/features/tor/presentation/controllers/start_tor_proxy.g.dart +++ b/app/lib/features/tor/presentation/controllers/start_tor_proxy.g.dart @@ -13,14 +13,15 @@ String _$startProxyControllerHash() => @ProviderFor(StartProxyController) final startProxyControllerProvider = AutoDisposeNotifierProvider.internal( - StartProxyController.new, - name: r'startProxyControllerProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$startProxyControllerHash, - dependencies: null, - allTransitiveDependencies: null, -); + StartProxyController.new, + name: r'startProxyControllerProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$startProxyControllerHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$StartProxyController = AutoDisposeNotifier; // ignore_for_file: type=lint diff --git a/app/lib/features/user/data/database/daos/cache.dart b/app/lib/features/user/data/database/daos/cache.dart index 3ef3d751..daeb2d6f 100644 --- a/app/lib/features/user/data/database/daos/cache.dart +++ b/app/lib/features/user/data/database/daos/cache.dart @@ -33,9 +33,9 @@ class CacheDao extends DatabaseAccessor with _$CacheDaoMixin { fetchDate: DateTime.now(), ), onConflict: DoUpdate( - (old) => IconCacheCompanion.custom( - iconData: Variable(bytes), - fetchDate: Variable(DateTime.now()), + (old) => IconCacheCompanion( + iconData: Value(bytes), + fetchDate: Value(DateTime.now()), ), ), ); diff --git a/app/lib/features/user/data/database/daos/setting.dart b/app/lib/features/user/data/database/daos/setting.dart index 95b70d80..19b0dd9c 100644 --- a/app/lib/features/user/data/database/daos/setting.dart +++ b/app/lib/features/user/data/database/daos/setting.dart @@ -23,9 +23,7 @@ class SettingDao extends DatabaseAccessor with _$SettingDaoMixin { partitionKey: Value(partitionKey), value: Value(driftvalue), ), - onConflict: DoUpdate( - (old) => SettingCompanion.custom(value: Variable(driftvalue)), - ), + onConflict: DoUpdate((old) => SettingCompanion(value: Value(driftvalue))), ); } diff --git a/app/lib/features/user/data/database/database.g.dart b/app/lib/features/user/data/database/database.g.dart index 11ea871c..5a1506d2 100644 --- a/app/lib/features/user/data/database/database.g.dart +++ b/app/lib/features/user/data/database/database.g.dart @@ -9,20 +9,29 @@ class Setting extends Table with TableInfo { final String? _alias; Setting(this.attachedDatabase, [this._alias]); late final GeneratedColumn key = GeneratedColumn( - 'key', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'PRIMARY KEY NOT NULL'); + 'key', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'PRIMARY KEY NOT NULL', + ); late final GeneratedColumn partitionKey = GeneratedColumn( - 'partition_key', aliasedName, true, - type: DriftSqlType.string, - requiredDuringInsert: false, - $customConstraints: ''); + 'partition_key', + aliasedName, + true, + type: DriftSqlType.string, + requiredDuringInsert: false, + $customConstraints: '', + ); late final GeneratedColumn value = GeneratedColumn( - 'value', aliasedName, true, - type: DriftSqlType.any, - requiredDuringInsert: false, - $customConstraints: ''); + 'value', + aliasedName, + true, + type: DriftSqlType.any, + requiredDuringInsert: false, + $customConstraints: '', + ); @override List get $columns => [key, partitionKey, value]; @override @@ -36,12 +45,19 @@ class Setting extends Table with TableInfo { SettingData map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return SettingData( - key: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}key'])!, - partitionKey: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}partition_key']), - value: attachedDatabase.typeMapping - .read(DriftSqlType.any, data['${effectivePrefix}value']), + key: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}key'], + )!, + partitionKey: attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}partition_key'], + ), + value: attachedDatabase.typeMapping.read( + DriftSqlType.any, + data['${effectivePrefix}value'], + ), ); } @@ -74,8 +90,10 @@ class SettingData extends DataClass implements Insertable { return map; } - factory SettingData.fromJson(Map json, - {ValueSerializer? serializer}) { + factory SettingData.fromJson( + Map json, { + ValueSerializer? serializer, + }) { serializer ??= driftRuntimeOptions.defaultSerializer; return SettingData( key: serializer.fromJson(json['key']), @@ -93,22 +111,22 @@ class SettingData extends DataClass implements Insertable { }; } - SettingData copyWith( - {String? key, - Value partitionKey = const Value.absent(), - Value value = const Value.absent()}) => - SettingData( - key: key ?? this.key, - partitionKey: - partitionKey.present ? partitionKey.value : this.partitionKey, - value: value.present ? value.value : this.value, - ); + SettingData copyWith({ + String? key, + Value partitionKey = const Value.absent(), + Value value = const Value.absent(), + }) => SettingData( + key: key ?? this.key, + partitionKey: partitionKey.present ? partitionKey.value : this.partitionKey, + value: value.present ? value.value : this.value, + ); SettingData copyWithCompanion(SettingCompanion data) { return SettingData( key: data.key.present ? data.key.value : this.key, - partitionKey: data.partitionKey.present - ? data.partitionKey.value - : this.partitionKey, + partitionKey: + data.partitionKey.present + ? data.partitionKey.value + : this.partitionKey, value: data.value.present ? data.value.value : this.value, ); } @@ -165,11 +183,12 @@ class SettingCompanion extends UpdateCompanion { }); } - SettingCompanion copyWith( - {Value? key, - Value? partitionKey, - Value? value, - Value? rowid}) { + SettingCompanion copyWith({ + Value? key, + Value? partitionKey, + Value? value, + Value? rowid, + }) { return SettingCompanion( key: key ?? this.key, partitionKey: partitionKey ?? this.partitionKey, @@ -214,20 +233,29 @@ class IconCache extends Table with TableInfo { final String? _alias; IconCache(this.attachedDatabase, [this._alias]); late final GeneratedColumn origin = GeneratedColumn( - 'origin', aliasedName, false, - type: DriftSqlType.string, - requiredDuringInsert: true, - $customConstraints: 'PRIMARY KEY NOT NULL'); + 'origin', + aliasedName, + false, + type: DriftSqlType.string, + requiredDuringInsert: true, + $customConstraints: 'PRIMARY KEY NOT NULL', + ); late final GeneratedColumn iconData = GeneratedColumn( - 'icon_data', aliasedName, false, - type: DriftSqlType.blob, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL'); + 'icon_data', + aliasedName, + false, + type: DriftSqlType.blob, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ); late final GeneratedColumn fetchDate = GeneratedColumn( - 'fetch_date', aliasedName, false, - type: DriftSqlType.dateTime, - requiredDuringInsert: true, - $customConstraints: 'NOT NULL'); + 'fetch_date', + aliasedName, + false, + type: DriftSqlType.dateTime, + requiredDuringInsert: true, + $customConstraints: 'NOT NULL', + ); @override List get $columns => [origin, iconData, fetchDate]; @override @@ -241,12 +269,21 @@ class IconCache extends Table with TableInfo { IconCacheData map(Map data, {String? tablePrefix}) { final effectivePrefix = tablePrefix != null ? '$tablePrefix.' : ''; return IconCacheData( - origin: attachedDatabase.typeMapping - .read(DriftSqlType.string, data['${effectivePrefix}origin'])!, - iconData: attachedDatabase.typeMapping - .read(DriftSqlType.blob, data['${effectivePrefix}icon_data'])!, - fetchDate: attachedDatabase.typeMapping - .read(DriftSqlType.dateTime, data['${effectivePrefix}fetch_date'])!, + origin: + attachedDatabase.typeMapping.read( + DriftSqlType.string, + data['${effectivePrefix}origin'], + )!, + iconData: + attachedDatabase.typeMapping.read( + DriftSqlType.blob, + data['${effectivePrefix}icon_data'], + )!, + fetchDate: + attachedDatabase.typeMapping.read( + DriftSqlType.dateTime, + data['${effectivePrefix}fetch_date'], + )!, ); } @@ -263,8 +300,11 @@ class IconCacheData extends DataClass implements Insertable { final String origin; final Uint8List iconData; final DateTime fetchDate; - const IconCacheData( - {required this.origin, required this.iconData, required this.fetchDate}); + const IconCacheData({ + required this.origin, + required this.iconData, + required this.fetchDate, + }); @override Map toColumns(bool nullToAbsent) { final map = {}; @@ -274,8 +314,10 @@ class IconCacheData extends DataClass implements Insertable { return map; } - factory IconCacheData.fromJson(Map json, - {ValueSerializer? serializer}) { + factory IconCacheData.fromJson( + Map json, { + ValueSerializer? serializer, + }) { serializer ??= driftRuntimeOptions.defaultSerializer; return IconCacheData( origin: serializer.fromJson(json['origin']), @@ -293,13 +335,15 @@ class IconCacheData extends DataClass implements Insertable { }; } - IconCacheData copyWith( - {String? origin, Uint8List? iconData, DateTime? fetchDate}) => - IconCacheData( - origin: origin ?? this.origin, - iconData: iconData ?? this.iconData, - fetchDate: fetchDate ?? this.fetchDate, - ); + IconCacheData copyWith({ + String? origin, + Uint8List? iconData, + DateTime? fetchDate, + }) => IconCacheData( + origin: origin ?? this.origin, + iconData: iconData ?? this.iconData, + fetchDate: fetchDate ?? this.fetchDate, + ); IconCacheData copyWithCompanion(IconCacheCompanion data) { return IconCacheData( origin: data.origin.present ? data.origin.value : this.origin, @@ -346,9 +390,9 @@ class IconCacheCompanion extends UpdateCompanion { required Uint8List iconData, required DateTime fetchDate, this.rowid = const Value.absent(), - }) : origin = Value(origin), - iconData = Value(iconData), - fetchDate = Value(fetchDate); + }) : origin = Value(origin), + iconData = Value(iconData), + fetchDate = Value(fetchDate); static Insertable custom({ Expression? origin, Expression? iconData, @@ -363,11 +407,12 @@ class IconCacheCompanion extends UpdateCompanion { }); } - IconCacheCompanion copyWith( - {Value? origin, - Value? iconData, - Value? fetchDate, - Value? rowid}) { + IconCacheCompanion copyWith({ + Value? origin, + Value? iconData, + Value? fetchDate, + Value? rowid, + }) { return IconCacheCompanion( origin: origin ?? this.origin, iconData: iconData ?? this.iconData, @@ -429,18 +474,20 @@ abstract class _$UserDatabase extends GeneratedDatabase { List get allSchemaEntities => [setting, iconCache]; } -typedef $SettingCreateCompanionBuilder = SettingCompanion Function({ - required String key, - Value partitionKey, - Value value, - Value rowid, -}); -typedef $SettingUpdateCompanionBuilder = SettingCompanion Function({ - Value key, - Value partitionKey, - Value value, - Value rowid, -}); +typedef $SettingCreateCompanionBuilder = + SettingCompanion Function({ + required String key, + Value partitionKey, + Value value, + Value rowid, + }); +typedef $SettingUpdateCompanionBuilder = + SettingCompanion Function({ + Value key, + Value partitionKey, + Value value, + Value rowid, + }); class $SettingFilterComposer extends Composer<_$UserDatabase, Setting> { $SettingFilterComposer({ @@ -451,13 +498,19 @@ class $SettingFilterComposer extends Composer<_$UserDatabase, Setting> { super.$removeJoinBuilderFromRootComposer, }); ColumnFilters get key => $composableBuilder( - column: $table.key, builder: (column) => ColumnFilters(column)); + column: $table.key, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get partitionKey => $composableBuilder( - column: $table.partitionKey, builder: (column) => ColumnFilters(column)); + column: $table.partitionKey, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get value => $composableBuilder( - column: $table.value, builder: (column) => ColumnFilters(column)); + column: $table.value, + builder: (column) => ColumnFilters(column), + ); } class $SettingOrderingComposer extends Composer<_$UserDatabase, Setting> { @@ -469,14 +522,19 @@ class $SettingOrderingComposer extends Composer<_$UserDatabase, Setting> { super.$removeJoinBuilderFromRootComposer, }); ColumnOrderings get key => $composableBuilder( - column: $table.key, builder: (column) => ColumnOrderings(column)); + column: $table.key, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get partitionKey => $composableBuilder( - column: $table.partitionKey, - builder: (column) => ColumnOrderings(column)); + column: $table.partitionKey, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get value => $composableBuilder( - column: $table.value, builder: (column) => ColumnOrderings(column)); + column: $table.value, + builder: (column) => ColumnOrderings(column), + ); } class $SettingAnnotationComposer extends Composer<_$UserDatabase, Setting> { @@ -491,89 +549,107 @@ class $SettingAnnotationComposer extends Composer<_$UserDatabase, Setting> { $composableBuilder(column: $table.key, builder: (column) => column); GeneratedColumn get partitionKey => $composableBuilder( - column: $table.partitionKey, builder: (column) => column); + column: $table.partitionKey, + builder: (column) => column, + ); GeneratedColumn get value => $composableBuilder(column: $table.value, builder: (column) => column); } -class $SettingTableManager extends RootTableManager< - _$UserDatabase, - Setting, - SettingData, - $SettingFilterComposer, - $SettingOrderingComposer, - $SettingAnnotationComposer, - $SettingCreateCompanionBuilder, - $SettingUpdateCompanionBuilder, - (SettingData, BaseReferences<_$UserDatabase, Setting, SettingData>), - SettingData, - PrefetchHooks Function()> { +class $SettingTableManager + extends + RootTableManager< + _$UserDatabase, + Setting, + SettingData, + $SettingFilterComposer, + $SettingOrderingComposer, + $SettingAnnotationComposer, + $SettingCreateCompanionBuilder, + $SettingUpdateCompanionBuilder, + (SettingData, BaseReferences<_$UserDatabase, Setting, SettingData>), + SettingData, + PrefetchHooks Function() + > { $SettingTableManager(_$UserDatabase db, Setting table) - : super(TableManagerState( + : super( + TableManagerState( db: db, table: table, - createFilteringComposer: () => - $SettingFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $SettingOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $SettingAnnotationComposer($db: db, $table: table), - updateCompanionCallback: ({ - Value key = const Value.absent(), - Value partitionKey = const Value.absent(), - Value value = const Value.absent(), - Value rowid = const Value.absent(), - }) => - SettingCompanion( - key: key, - partitionKey: partitionKey, - value: value, - rowid: rowid, - ), - createCompanionCallback: ({ - required String key, - Value partitionKey = const Value.absent(), - Value value = const Value.absent(), - Value rowid = const Value.absent(), - }) => - SettingCompanion.insert( - key: key, - partitionKey: partitionKey, - value: value, - rowid: rowid, - ), - withReferenceMapper: (p0) => p0 - .map((e) => (e.readTable(table), BaseReferences(db, table, e))) - .toList(), + createFilteringComposer: + () => $SettingFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $SettingOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $SettingAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value key = const Value.absent(), + Value partitionKey = const Value.absent(), + Value value = const Value.absent(), + Value rowid = const Value.absent(), + }) => SettingCompanion( + key: key, + partitionKey: partitionKey, + value: value, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String key, + Value partitionKey = const Value.absent(), + Value value = const Value.absent(), + Value rowid = const Value.absent(), + }) => SettingCompanion.insert( + key: key, + partitionKey: partitionKey, + value: value, + rowid: rowid, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + BaseReferences(db, table, e), + ), + ) + .toList(), prefetchHooksCallback: null, - )); + ), + ); } -typedef $SettingProcessedTableManager = ProcessedTableManager< - _$UserDatabase, - Setting, - SettingData, - $SettingFilterComposer, - $SettingOrderingComposer, - $SettingAnnotationComposer, - $SettingCreateCompanionBuilder, - $SettingUpdateCompanionBuilder, - (SettingData, BaseReferences<_$UserDatabase, Setting, SettingData>), - SettingData, - PrefetchHooks Function()>; -typedef $IconCacheCreateCompanionBuilder = IconCacheCompanion Function({ - required String origin, - required Uint8List iconData, - required DateTime fetchDate, - Value rowid, -}); -typedef $IconCacheUpdateCompanionBuilder = IconCacheCompanion Function({ - Value origin, - Value iconData, - Value fetchDate, - Value rowid, -}); +typedef $SettingProcessedTableManager = + ProcessedTableManager< + _$UserDatabase, + Setting, + SettingData, + $SettingFilterComposer, + $SettingOrderingComposer, + $SettingAnnotationComposer, + $SettingCreateCompanionBuilder, + $SettingUpdateCompanionBuilder, + (SettingData, BaseReferences<_$UserDatabase, Setting, SettingData>), + SettingData, + PrefetchHooks Function() + >; +typedef $IconCacheCreateCompanionBuilder = + IconCacheCompanion Function({ + required String origin, + required Uint8List iconData, + required DateTime fetchDate, + Value rowid, + }); +typedef $IconCacheUpdateCompanionBuilder = + IconCacheCompanion Function({ + Value origin, + Value iconData, + Value fetchDate, + Value rowid, + }); class $IconCacheFilterComposer extends Composer<_$UserDatabase, IconCache> { $IconCacheFilterComposer({ @@ -584,13 +660,19 @@ class $IconCacheFilterComposer extends Composer<_$UserDatabase, IconCache> { super.$removeJoinBuilderFromRootComposer, }); ColumnFilters get origin => $composableBuilder( - column: $table.origin, builder: (column) => ColumnFilters(column)); + column: $table.origin, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get iconData => $composableBuilder( - column: $table.iconData, builder: (column) => ColumnFilters(column)); + column: $table.iconData, + builder: (column) => ColumnFilters(column), + ); ColumnFilters get fetchDate => $composableBuilder( - column: $table.fetchDate, builder: (column) => ColumnFilters(column)); + column: $table.fetchDate, + builder: (column) => ColumnFilters(column), + ); } class $IconCacheOrderingComposer extends Composer<_$UserDatabase, IconCache> { @@ -602,13 +684,19 @@ class $IconCacheOrderingComposer extends Composer<_$UserDatabase, IconCache> { super.$removeJoinBuilderFromRootComposer, }); ColumnOrderings get origin => $composableBuilder( - column: $table.origin, builder: (column) => ColumnOrderings(column)); + column: $table.origin, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get iconData => $composableBuilder( - column: $table.iconData, builder: (column) => ColumnOrderings(column)); + column: $table.iconData, + builder: (column) => ColumnOrderings(column), + ); ColumnOrderings get fetchDate => $composableBuilder( - column: $table.fetchDate, builder: (column) => ColumnOrderings(column)); + column: $table.fetchDate, + builder: (column) => ColumnOrderings(column), + ); } class $IconCacheAnnotationComposer extends Composer<_$UserDatabase, IconCache> { @@ -629,71 +717,88 @@ class $IconCacheAnnotationComposer extends Composer<_$UserDatabase, IconCache> { $composableBuilder(column: $table.fetchDate, builder: (column) => column); } -class $IconCacheTableManager extends RootTableManager< - _$UserDatabase, - IconCache, - IconCacheData, - $IconCacheFilterComposer, - $IconCacheOrderingComposer, - $IconCacheAnnotationComposer, - $IconCacheCreateCompanionBuilder, - $IconCacheUpdateCompanionBuilder, - (IconCacheData, BaseReferences<_$UserDatabase, IconCache, IconCacheData>), - IconCacheData, - PrefetchHooks Function()> { +class $IconCacheTableManager + extends + RootTableManager< + _$UserDatabase, + IconCache, + IconCacheData, + $IconCacheFilterComposer, + $IconCacheOrderingComposer, + $IconCacheAnnotationComposer, + $IconCacheCreateCompanionBuilder, + $IconCacheUpdateCompanionBuilder, + ( + IconCacheData, + BaseReferences<_$UserDatabase, IconCache, IconCacheData>, + ), + IconCacheData, + PrefetchHooks Function() + > { $IconCacheTableManager(_$UserDatabase db, IconCache table) - : super(TableManagerState( + : super( + TableManagerState( db: db, table: table, - createFilteringComposer: () => - $IconCacheFilterComposer($db: db, $table: table), - createOrderingComposer: () => - $IconCacheOrderingComposer($db: db, $table: table), - createComputedFieldComposer: () => - $IconCacheAnnotationComposer($db: db, $table: table), - updateCompanionCallback: ({ - Value origin = const Value.absent(), - Value iconData = const Value.absent(), - Value fetchDate = const Value.absent(), - Value rowid = const Value.absent(), - }) => - IconCacheCompanion( - origin: origin, - iconData: iconData, - fetchDate: fetchDate, - rowid: rowid, - ), - createCompanionCallback: ({ - required String origin, - required Uint8List iconData, - required DateTime fetchDate, - Value rowid = const Value.absent(), - }) => - IconCacheCompanion.insert( - origin: origin, - iconData: iconData, - fetchDate: fetchDate, - rowid: rowid, - ), - withReferenceMapper: (p0) => p0 - .map((e) => (e.readTable(table), BaseReferences(db, table, e))) - .toList(), + createFilteringComposer: + () => $IconCacheFilterComposer($db: db, $table: table), + createOrderingComposer: + () => $IconCacheOrderingComposer($db: db, $table: table), + createComputedFieldComposer: + () => $IconCacheAnnotationComposer($db: db, $table: table), + updateCompanionCallback: + ({ + Value origin = const Value.absent(), + Value iconData = const Value.absent(), + Value fetchDate = const Value.absent(), + Value rowid = const Value.absent(), + }) => IconCacheCompanion( + origin: origin, + iconData: iconData, + fetchDate: fetchDate, + rowid: rowid, + ), + createCompanionCallback: + ({ + required String origin, + required Uint8List iconData, + required DateTime fetchDate, + Value rowid = const Value.absent(), + }) => IconCacheCompanion.insert( + origin: origin, + iconData: iconData, + fetchDate: fetchDate, + rowid: rowid, + ), + withReferenceMapper: + (p0) => + p0 + .map( + (e) => ( + e.readTable(table), + BaseReferences(db, table, e), + ), + ) + .toList(), prefetchHooksCallback: null, - )); + ), + ); } -typedef $IconCacheProcessedTableManager = ProcessedTableManager< - _$UserDatabase, - IconCache, - IconCacheData, - $IconCacheFilterComposer, - $IconCacheOrderingComposer, - $IconCacheAnnotationComposer, - $IconCacheCreateCompanionBuilder, - $IconCacheUpdateCompanionBuilder, - (IconCacheData, BaseReferences<_$UserDatabase, IconCache, IconCacheData>), - IconCacheData, - PrefetchHooks Function()>; +typedef $IconCacheProcessedTableManager = + ProcessedTableManager< + _$UserDatabase, + IconCache, + IconCacheData, + $IconCacheFilterComposer, + $IconCacheOrderingComposer, + $IconCacheAnnotationComposer, + $IconCacheCreateCompanionBuilder, + $IconCacheUpdateCompanionBuilder, + (IconCacheData, BaseReferences<_$UserDatabase, IconCache, IconCacheData>), + IconCacheData, + PrefetchHooks Function() + >; class $UserDatabaseManager { final _$UserDatabase _db; diff --git a/app/lib/features/user/data/models/engine_settings.g.dart b/app/lib/features/user/data/models/engine_settings.g.dart index 8034c2c2..c83b1be0 100644 --- a/app/lib/features/user/data/models/engine_settings.g.dart +++ b/app/lib/features/user/data/models/engine_settings.g.dart @@ -10,7 +10,8 @@ abstract class _$EngineSettingsCWProxy { EngineSettings javascriptEnabled(bool? javascriptEnabled); EngineSettings trackingProtectionPolicy( - TrackingProtectionPolicy? trackingProtectionPolicy); + TrackingProtectionPolicy? trackingProtectionPolicy, + ); EngineSettings httpsOnlyMode(HttpsOnlyMode? httpsOnlyMode); @@ -19,19 +20,24 @@ abstract class _$EngineSettingsCWProxy { EngineSettings preferredColorScheme(ColorScheme? preferredColorScheme); EngineSettings cookieBannerHandlingMode( - CookieBannerHandlingMode? cookieBannerHandlingMode); + CookieBannerHandlingMode? cookieBannerHandlingMode, + ); EngineSettings cookieBannerHandlingModePrivateBrowsing( - CookieBannerHandlingMode? cookieBannerHandlingModePrivateBrowsing); + CookieBannerHandlingMode? cookieBannerHandlingModePrivateBrowsing, + ); EngineSettings cookieBannerHandlingGlobalRules( - bool? cookieBannerHandlingGlobalRules); + bool? cookieBannerHandlingGlobalRules, + ); EngineSettings cookieBannerHandlingGlobalRulesSubFrames( - bool? cookieBannerHandlingGlobalRulesSubFrames); + bool? cookieBannerHandlingGlobalRulesSubFrames, + ); EngineSettings webContentIsolationStrategy( - WebContentIsolationStrategy? webContentIsolationStrategy); + WebContentIsolationStrategy? webContentIsolationStrategy, + ); /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `EngineSettings(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. /// @@ -65,8 +71,8 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy { @override EngineSettings trackingProtectionPolicy( - TrackingProtectionPolicy? trackingProtectionPolicy) => - this(trackingProtectionPolicy: trackingProtectionPolicy); + TrackingProtectionPolicy? trackingProtectionPolicy, + ) => this(trackingProtectionPolicy: trackingProtectionPolicy); @override EngineSettings httpsOnlyMode(HttpsOnlyMode? httpsOnlyMode) => @@ -74,8 +80,8 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy { @override EngineSettings globalPrivacyControlEnabled( - bool? globalPrivacyControlEnabled) => - this(globalPrivacyControlEnabled: globalPrivacyControlEnabled); + bool? globalPrivacyControlEnabled, + ) => this(globalPrivacyControlEnabled: globalPrivacyControlEnabled); @override EngineSettings preferredColorScheme(ColorScheme? preferredColorScheme) => @@ -83,35 +89,36 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy { @override EngineSettings cookieBannerHandlingMode( - CookieBannerHandlingMode? cookieBannerHandlingMode) => - this(cookieBannerHandlingMode: cookieBannerHandlingMode); + CookieBannerHandlingMode? cookieBannerHandlingMode, + ) => this(cookieBannerHandlingMode: cookieBannerHandlingMode); @override EngineSettings cookieBannerHandlingModePrivateBrowsing( - CookieBannerHandlingMode? cookieBannerHandlingModePrivateBrowsing) => - this( - cookieBannerHandlingModePrivateBrowsing: - cookieBannerHandlingModePrivateBrowsing); + CookieBannerHandlingMode? cookieBannerHandlingModePrivateBrowsing, + ) => this( + cookieBannerHandlingModePrivateBrowsing: + cookieBannerHandlingModePrivateBrowsing, + ); @override EngineSettings cookieBannerHandlingGlobalRules( - bool? cookieBannerHandlingGlobalRules) => - this(cookieBannerHandlingGlobalRules: cookieBannerHandlingGlobalRules); + bool? cookieBannerHandlingGlobalRules, + ) => this(cookieBannerHandlingGlobalRules: cookieBannerHandlingGlobalRules); @override EngineSettings cookieBannerHandlingGlobalRulesSubFrames( - bool? cookieBannerHandlingGlobalRulesSubFrames) => - this( - cookieBannerHandlingGlobalRulesSubFrames: - cookieBannerHandlingGlobalRulesSubFrames); + bool? cookieBannerHandlingGlobalRulesSubFrames, + ) => this( + cookieBannerHandlingGlobalRulesSubFrames: + cookieBannerHandlingGlobalRulesSubFrames, + ); @override EngineSettings webContentIsolationStrategy( - WebContentIsolationStrategy? webContentIsolationStrategy) => - this(webContentIsolationStrategy: webContentIsolationStrategy); + WebContentIsolationStrategy? webContentIsolationStrategy, + ) => this(webContentIsolationStrategy: webContentIsolationStrategy); @override - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `EngineSettings(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. /// /// Usage @@ -133,28 +140,31 @@ class _$EngineSettingsCWProxyImpl implements _$EngineSettingsCWProxy { Object? webContentIsolationStrategy = const $CopyWithPlaceholder(), }) { return EngineSettings( - javascriptEnabled: javascriptEnabled == const $CopyWithPlaceholder() - ? _value.javascriptEnabled - // ignore: cast_nullable_to_non_nullable - : javascriptEnabled as bool?, + javascriptEnabled: + javascriptEnabled == const $CopyWithPlaceholder() + ? _value.javascriptEnabled + // ignore: cast_nullable_to_non_nullable + : javascriptEnabled as bool?, trackingProtectionPolicy: trackingProtectionPolicy == const $CopyWithPlaceholder() ? _value.trackingProtectionPolicy // ignore: cast_nullable_to_non_nullable : trackingProtectionPolicy as TrackingProtectionPolicy?, - httpsOnlyMode: httpsOnlyMode == const $CopyWithPlaceholder() - ? _value.httpsOnlyMode - // ignore: cast_nullable_to_non_nullable - : httpsOnlyMode as HttpsOnlyMode?, + httpsOnlyMode: + httpsOnlyMode == const $CopyWithPlaceholder() + ? _value.httpsOnlyMode + // ignore: cast_nullable_to_non_nullable + : httpsOnlyMode as HttpsOnlyMode?, globalPrivacyControlEnabled: globalPrivacyControlEnabled == const $CopyWithPlaceholder() ? _value.globalPrivacyControlEnabled // ignore: cast_nullable_to_non_nullable : globalPrivacyControlEnabled as bool?, - preferredColorScheme: preferredColorScheme == const $CopyWithPlaceholder() - ? _value.preferredColorScheme - // ignore: cast_nullable_to_non_nullable - : preferredColorScheme as ColorScheme?, + preferredColorScheme: + preferredColorScheme == const $CopyWithPlaceholder() + ? _value.preferredColorScheme + // ignore: cast_nullable_to_non_nullable + : preferredColorScheme as ColorScheme?, cookieBannerHandlingMode: cookieBannerHandlingMode == const $CopyWithPlaceholder() ? _value.cookieBannerHandlingMode @@ -201,47 +211,57 @@ EngineSettings _$EngineSettingsFromJson(Map json) => EngineSettings.withDefaults( javascriptEnabled: json['javascriptEnabled'] as bool?, trackingProtectionPolicy: $enumDecodeNullable( - _$TrackingProtectionPolicyEnumMap, json['trackingProtectionPolicy']), - httpsOnlyMode: - $enumDecodeNullable(_$HttpsOnlyModeEnumMap, json['httpsOnlyMode']), + _$TrackingProtectionPolicyEnumMap, + json['trackingProtectionPolicy'], + ), + httpsOnlyMode: $enumDecodeNullable( + _$HttpsOnlyModeEnumMap, + json['httpsOnlyMode'], + ), globalPrivacyControlEnabled: json['globalPrivacyControlEnabled'] as bool?, preferredColorScheme: $enumDecodeNullable( - _$ColorSchemeEnumMap, json['preferredColorScheme']), + _$ColorSchemeEnumMap, + json['preferredColorScheme'], + ), cookieBannerHandlingMode: $enumDecodeNullable( - _$CookieBannerHandlingModeEnumMap, json['cookieBannerHandlingMode']), + _$CookieBannerHandlingModeEnumMap, + json['cookieBannerHandlingMode'], + ), cookieBannerHandlingModePrivateBrowsing: $enumDecodeNullable( - _$CookieBannerHandlingModeEnumMap, - json['cookieBannerHandlingModePrivateBrowsing']), + _$CookieBannerHandlingModeEnumMap, + json['cookieBannerHandlingModePrivateBrowsing'], + ), cookieBannerHandlingGlobalRules: json['cookieBannerHandlingGlobalRules'] as bool?, cookieBannerHandlingGlobalRulesSubFrames: json['cookieBannerHandlingGlobalRulesSubFrames'] as bool?, webContentIsolationStrategy: $enumDecodeNullable( - _$WebContentIsolationStrategyEnumMap, - json['webContentIsolationStrategy']), + _$WebContentIsolationStrategyEnumMap, + json['webContentIsolationStrategy'], + ), ); -Map _$EngineSettingsToJson(EngineSettings instance) => - { - 'javascriptEnabled': instance.javascriptEnabled, - 'trackingProtectionPolicy': - _$TrackingProtectionPolicyEnumMap[instance.trackingProtectionPolicy]!, - 'httpsOnlyMode': _$HttpsOnlyModeEnumMap[instance.httpsOnlyMode]!, - 'preferredColorScheme': - _$ColorSchemeEnumMap[instance.preferredColorScheme]!, - 'globalPrivacyControlEnabled': instance.globalPrivacyControlEnabled, - 'cookieBannerHandlingMode': - _$CookieBannerHandlingModeEnumMap[instance.cookieBannerHandlingMode]!, - 'cookieBannerHandlingModePrivateBrowsing': - _$CookieBannerHandlingModeEnumMap[ - instance.cookieBannerHandlingModePrivateBrowsing]!, - 'cookieBannerHandlingGlobalRules': - instance.cookieBannerHandlingGlobalRules, - 'cookieBannerHandlingGlobalRulesSubFrames': - instance.cookieBannerHandlingGlobalRulesSubFrames, - 'webContentIsolationStrategy': _$WebContentIsolationStrategyEnumMap[ - instance.webContentIsolationStrategy]!, - }; +Map _$EngineSettingsToJson( + EngineSettings instance, +) => { + 'javascriptEnabled': instance.javascriptEnabled, + 'trackingProtectionPolicy': + _$TrackingProtectionPolicyEnumMap[instance.trackingProtectionPolicy]!, + 'httpsOnlyMode': _$HttpsOnlyModeEnumMap[instance.httpsOnlyMode]!, + 'preferredColorScheme': _$ColorSchemeEnumMap[instance.preferredColorScheme]!, + 'globalPrivacyControlEnabled': instance.globalPrivacyControlEnabled, + 'cookieBannerHandlingMode': + _$CookieBannerHandlingModeEnumMap[instance.cookieBannerHandlingMode]!, + 'cookieBannerHandlingModePrivateBrowsing': + _$CookieBannerHandlingModeEnumMap[instance + .cookieBannerHandlingModePrivateBrowsing]!, + 'cookieBannerHandlingGlobalRules': instance.cookieBannerHandlingGlobalRules, + 'cookieBannerHandlingGlobalRulesSubFrames': + instance.cookieBannerHandlingGlobalRulesSubFrames, + 'webContentIsolationStrategy': + _$WebContentIsolationStrategyEnumMap[instance + .webContentIsolationStrategy]!, +}; const _$TrackingProtectionPolicyEnumMap = { TrackingProtectionPolicy.none: 'none', diff --git a/app/lib/features/user/data/models/general_settings.g.dart b/app/lib/features/user/data/models/general_settings.g.dart index 50a52f29..74966fa9 100644 --- a/app/lib/features/user/data/models/general_settings.g.dart +++ b/app/lib/features/user/data/models/general_settings.g.dart @@ -12,7 +12,8 @@ abstract class _$GeneralSettingsCWProxy { GeneralSettings enableReadability(bool enableReadability); GeneralSettings deleteBrowsingDataOnQuit( - Set? deleteBrowsingDataOnQuit); + Set? deleteBrowsingDataOnQuit, + ); /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `GeneralSettings(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. /// @@ -42,11 +43,10 @@ class _$GeneralSettingsCWProxyImpl implements _$GeneralSettingsCWProxy { @override GeneralSettings deleteBrowsingDataOnQuit( - Set? deleteBrowsingDataOnQuit) => - this(deleteBrowsingDataOnQuit: deleteBrowsingDataOnQuit); + Set? deleteBrowsingDataOnQuit, + ) => this(deleteBrowsingDataOnQuit: deleteBrowsingDataOnQuit); @override - /// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `GeneralSettings(...).copyWith.fieldName(...)` to override fields one at a time with nullification support. /// /// Usage @@ -59,14 +59,16 @@ class _$GeneralSettingsCWProxyImpl implements _$GeneralSettingsCWProxy { Object? deleteBrowsingDataOnQuit = const $CopyWithPlaceholder(), }) { return GeneralSettings( - themeMode: themeMode == const $CopyWithPlaceholder() - ? _value.themeMode - // ignore: cast_nullable_to_non_nullable - : themeMode as ThemeMode, - enableReadability: enableReadability == const $CopyWithPlaceholder() - ? _value.enableReadability - // ignore: cast_nullable_to_non_nullable - : enableReadability as bool, + themeMode: + themeMode == const $CopyWithPlaceholder() + ? _value.themeMode + // ignore: cast_nullable_to_non_nullable + : themeMode as ThemeMode, + enableReadability: + enableReadability == const $CopyWithPlaceholder() + ? _value.enableReadability + // ignore: cast_nullable_to_non_nullable + : enableReadability as bool, deleteBrowsingDataOnQuit: deleteBrowsingDataOnQuit == const $CopyWithPlaceholder() ? _value.deleteBrowsingDataOnQuit @@ -100,9 +102,10 @@ Map _$GeneralSettingsToJson(GeneralSettings instance) => { 'themeMode': _$ThemeModeEnumMap[instance.themeMode]!, 'enableReadability': instance.enableReadability, - 'deleteBrowsingDataOnQuit': instance.deleteBrowsingDataOnQuit - ?.map((e) => _$DeleteBrowsingDataTypeEnumMap[e]!) - .toList(), + 'deleteBrowsingDataOnQuit': + instance.deleteBrowsingDataOnQuit + ?.map((e) => _$DeleteBrowsingDataTypeEnumMap[e]!) + .toList(), }; const _$ThemeModeEnumMap = { diff --git a/app/lib/features/user/domain/providers.g.dart b/app/lib/features/user/domain/providers.g.dart index 91bfbbc5..dc80c5c4 100644 --- a/app/lib/features/user/domain/providers.g.dart +++ b/app/lib/features/user/domain/providers.g.dart @@ -13,9 +13,10 @@ String _$storedAuthDataHash() => r'5f7e3ef6233a2036f7ce3728131901a46b1e548e'; final _storedAuthDataProvider = AutoDisposeFutureProvider.internal( _storedAuthData, name: r'_storedAuthDataProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$storedAuthDataHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$storedAuthDataHash, dependencies: null, allTransitiveDependencies: null, ); @@ -30,14 +31,15 @@ String _$iconCacheSizeMegabytesHash() => @ProviderFor(iconCacheSizeMegabytes) final iconCacheSizeMegabytesProvider = AutoDisposeStreamProvider.internal( - iconCacheSizeMegabytes, - name: r'iconCacheSizeMegabytesProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$iconCacheSizeMegabytesHash, - dependencies: null, - allTransitiveDependencies: null, -); + iconCacheSizeMegabytes, + name: r'iconCacheSizeMegabytesProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$iconCacheSizeMegabytesHash, + dependencies: null, + allTransitiveDependencies: null, + ); @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element @@ -98,9 +100,10 @@ String _$incognitoModeEnabledHash() => final incognitoModeEnabledProvider = AutoDisposeProvider.internal( incognitoModeEnabled, name: r'incognitoModeEnabledProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$incognitoModeEnabledHash, + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$incognitoModeEnabledHash, dependencies: null, allTransitiveDependencies: null, ); diff --git a/app/lib/features/user/domain/repositories/auth.g.dart b/app/lib/features/user/domain/repositories/auth.g.dart index 1bdcd08a..43ea7255 100644 --- a/app/lib/features/user/domain/repositories/auth.g.dart +++ b/app/lib/features/user/domain/repositories/auth.g.dart @@ -12,14 +12,15 @@ String _$authRepositoryHash() => r'90ea6f082ef968831763c7f7ee31863f1fe329fe'; @ProviderFor(AuthRepository) final authRepositoryProvider = AutoDisposeNotifierProvider.internal( - AuthRepository.new, - name: r'authRepositoryProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$authRepositoryHash, - dependencies: null, - allTransitiveDependencies: null, -); + AuthRepository.new, + name: r'authRepositoryProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$authRepositoryHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$AuthRepository = AutoDisposeNotifier; // ignore_for_file: type=lint diff --git a/app/lib/features/user/domain/repositories/cache.g.dart b/app/lib/features/user/domain/repositories/cache.g.dart index ea2d3bb6..c8ea66e1 100644 --- a/app/lib/features/user/domain/repositories/cache.g.dart +++ b/app/lib/features/user/domain/repositories/cache.g.dart @@ -12,14 +12,15 @@ String _$cacheRepositoryHash() => r'548b7cba9a23c21bba39f0918d7d90acaaf8d8e9'; @ProviderFor(CacheRepository) final cacheRepositoryProvider = NotifierProvider.internal( - CacheRepository.new, - name: r'cacheRepositoryProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$cacheRepositoryHash, - dependencies: null, - allTransitiveDependencies: null, -); + CacheRepository.new, + name: r'cacheRepositoryProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$cacheRepositoryHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$CacheRepository = Notifier; // ignore_for_file: type=lint diff --git a/app/lib/features/user/domain/repositories/engine_settings.g.dart b/app/lib/features/user/domain/repositories/engine_settings.g.dart index 6fe2ac4c..dea7e338 100644 --- a/app/lib/features/user/domain/repositories/engine_settings.g.dart +++ b/app/lib/features/user/domain/repositories/engine_settings.g.dart @@ -13,14 +13,15 @@ String _$engineSettingsRepositoryHash() => @ProviderFor(EngineSettingsRepository) final engineSettingsRepositoryProvider = NotifierProvider.internal( - EngineSettingsRepository.new, - name: r'engineSettingsRepositoryProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$engineSettingsRepositoryHash, - dependencies: null, - allTransitiveDependencies: null, -); + EngineSettingsRepository.new, + name: r'engineSettingsRepositoryProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$engineSettingsRepositoryHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$EngineSettingsRepository = Notifier; // ignore_for_file: type=lint diff --git a/app/lib/features/user/domain/repositories/general_settings.dart b/app/lib/features/user/domain/repositories/general_settings.dart index 7f1be834..ab01f2b3 100644 --- a/app/lib/features/user/domain/repositories/general_settings.dart +++ b/app/lib/features/user/domain/repositories/general_settings.dart @@ -39,7 +39,7 @@ class GeneralSettingsRepository extends _$GeneralSettingsRepository { } //Eager fetch, when up to date settings are required - Future fetch() async { + Future fetch() { return ref .read(userDatabaseProvider) .settingDao diff --git a/app/lib/features/user/domain/repositories/general_settings.g.dart b/app/lib/features/user/domain/repositories/general_settings.g.dart index 613b118e..91bc6261 100644 --- a/app/lib/features/user/domain/repositories/general_settings.g.dart +++ b/app/lib/features/user/domain/repositories/general_settings.g.dart @@ -7,20 +7,21 @@ part of 'general_settings.dart'; // ************************************************************************** String _$generalSettingsRepositoryHash() => - r'9753ffa757a34e475fe816ef990ca387ca169ef4'; + r'fd40dc270c52b137a5459f93f93c60e4c1ba9b58'; /// See also [GeneralSettingsRepository]. @ProviderFor(GeneralSettingsRepository) final generalSettingsRepositoryProvider = NotifierProvider.internal( - GeneralSettingsRepository.new, - name: r'generalSettingsRepositoryProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$generalSettingsRepositoryHash, - dependencies: null, - allTransitiveDependencies: null, -); + GeneralSettingsRepository.new, + name: r'generalSettingsRepositoryProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$generalSettingsRepositoryHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$GeneralSettingsRepository = Notifier; // ignore_for_file: type=lint diff --git a/app/lib/features/user/domain/services/local_authentication.g.dart b/app/lib/features/user/domain/services/local_authentication.g.dart index 3f3b9d3c..b8e35d1f 100644 --- a/app/lib/features/user/domain/services/local_authentication.g.dart +++ b/app/lib/features/user/domain/services/local_authentication.g.dart @@ -13,14 +13,15 @@ String _$localAuthenticationServiceHash() => @ProviderFor(LocalAuthenticationService) final localAuthenticationServiceProvider = AsyncNotifierProvider.internal( - LocalAuthenticationService.new, - name: r'localAuthenticationServiceProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$localAuthenticationServiceHash, - dependencies: null, - allTransitiveDependencies: null, -); + LocalAuthenticationService.new, + name: r'localAuthenticationServiceProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$localAuthenticationServiceHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$LocalAuthenticationService = AsyncNotifier; // ignore_for_file: type=lint diff --git a/app/lib/features/user/presentation/controllers/controllers.dart b/app/lib/features/user/presentation/controllers/controllers.dart index 085f1994..baa56991 100644 --- a/app/lib/features/user/presentation/controllers/controllers.dart +++ b/app/lib/features/user/presentation/controllers/controllers.dart @@ -6,7 +6,9 @@ part 'controllers.g.dart'; @Riverpod() class AuthController extends _$AuthController { @override - FutureOr build() {} + Future build() { + return Future.value(); + } Future authWithPassword(String user, String password) async { state = const AsyncLoading(); diff --git a/app/lib/features/user/presentation/controllers/controllers.g.dart b/app/lib/features/user/presentation/controllers/controllers.g.dart index cfbe9514..b79aee7a 100644 --- a/app/lib/features/user/presentation/controllers/controllers.g.dart +++ b/app/lib/features/user/presentation/controllers/controllers.g.dart @@ -6,20 +6,21 @@ part of 'controllers.dart'; // RiverpodGenerator // ************************************************************************** -String _$authControllerHash() => r'5b56651948683d669f29946fe02bdb004f436afb'; +String _$authControllerHash() => r'0085e324fbe093c1984eaa56dbfac33472138f9f'; /// See also [AuthController]. @ProviderFor(AuthController) final authControllerProvider = AutoDisposeAsyncNotifierProvider.internal( - AuthController.new, - name: r'authControllerProvider', - debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') - ? null - : _$authControllerHash, - dependencies: null, - allTransitiveDependencies: null, -); + AuthController.new, + name: r'authControllerProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$authControllerHash, + dependencies: null, + allTransitiveDependencies: null, + ); typedef _$AuthController = AutoDisposeAsyncNotifier; // ignore_for_file: type=lint diff --git a/app/lib/features/user/presentation/screens/auth.dart b/app/lib/features/user/presentation/screens/auth.dart index 736393e4..bedf642f 100644 --- a/app/lib/features/user/presentation/screens/auth.dart +++ b/app/lib/features/user/presentation/screens/auth.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:go_router/go_router.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:lensai/extensions/nullable.dart'; import 'package:lensai/features/user/domain/providers.dart'; import 'package:lensai/features/user/presentation/controllers/controllers.dart'; @@ -46,7 +47,7 @@ class UserAuthScreen extends HookConsumerWidget { icon: Icon(Icons.account_circle), ), validator: (value) { - if (value?.isEmpty ?? true) { + if (value.isEmpty) { return 'Email must be provided'; } @@ -79,7 +80,7 @@ class UserAuthScreen extends HookConsumerWidget { ), obscureText: obscure.value, validator: (value) { - if (value?.isEmpty ?? true) { + if (value.isEmpty) { return 'Password must be provided'; } @@ -105,7 +106,7 @@ class UserAuthScreen extends HookConsumerWidget { ), obscureText: obscure.value, validator: (value) { - if (value?.isEmpty ?? true) { + if (value.isEmpty) { return 'Password must be provided'; } diff --git a/app/lib/presentation/controllers/website_title.dart b/app/lib/presentation/controllers/website_title.dart index f15f5d1a..3a58511c 100644 --- a/app/lib/presentation/controllers/website_title.dart +++ b/app/lib/presentation/controllers/website_title.dart @@ -5,8 +5,15 @@ import 'package:riverpod_annotation/riverpod_annotation.dart'; part 'website_title.g.dart'; -@Riverpod(keepAlive: true) -Future pageInfo(Ref ref, Uri url) { +@Riverpod() +Future pageInfo(Ref ref, Uri url) async { final websiteService = ref.watch(genericWebsiteServiceProvider.notifier); - return websiteService.fetchPageInfo(url).then((value) => value.value); + + final result = await websiteService.fetchPageInfo(url); + + if (result.isSuccess) { + ref.keepAlive(); + } + + return result.value; } diff --git a/app/lib/presentation/controllers/website_title.g.dart b/app/lib/presentation/controllers/website_title.g.dart index a322f8fa..18b6af6a 100644 --- a/app/lib/presentation/controllers/website_title.g.dart +++ b/app/lib/presentation/controllers/website_title.g.dart @@ -6,7 +6,7 @@ part of 'website_title.dart'; // RiverpodGenerator // ************************************************************************** -String _$pageInfoHash() => r'f777a45aba30c82cf7b8790c07a804be364cfeb1'; +String _$pageInfoHash() => r'bdb860ec904959d7aa561045b85b75b209fb38e1'; /// Copied from Dart SDK class _SystemHash { @@ -39,21 +39,13 @@ class PageInfoFamily extends Family> { const PageInfoFamily(); /// See also [pageInfo]. - PageInfoProvider call( - Uri url, - ) { - return PageInfoProvider( - url, - ); + PageInfoProvider call(Uri url) { + return PageInfoProvider(url); } @override - PageInfoProvider getProviderOverride( - covariant PageInfoProvider provider, - ) { - return call( - provider.url, - ); + PageInfoProvider getProviderOverride(covariant PageInfoProvider provider) { + return call(provider.url); } static const Iterable? _dependencies = null; @@ -72,25 +64,21 @@ class PageInfoFamily extends Family> { } /// See also [pageInfo]. -class PageInfoProvider extends FutureProvider { +class PageInfoProvider extends AutoDisposeFutureProvider { /// See also [pageInfo]. - PageInfoProvider( - Uri url, - ) : this._internal( - (ref) => pageInfo( - ref as PageInfoRef, - url, - ), - from: pageInfoProvider, - name: r'pageInfoProvider', - debugGetCreateSourceHash: - const bool.fromEnvironment('dart.vm.product') - ? null - : _$pageInfoHash, - dependencies: PageInfoFamily._dependencies, - allTransitiveDependencies: PageInfoFamily._allTransitiveDependencies, - url: url, - ); + PageInfoProvider(Uri url) + : this._internal( + (ref) => pageInfo(ref as PageInfoRef, url), + from: pageInfoProvider, + name: r'pageInfoProvider', + debugGetCreateSourceHash: + const bool.fromEnvironment('dart.vm.product') + ? null + : _$pageInfoHash, + dependencies: PageInfoFamily._dependencies, + allTransitiveDependencies: PageInfoFamily._allTransitiveDependencies, + url: url, + ); PageInfoProvider._internal( super._createNotifier, { @@ -123,7 +111,7 @@ class PageInfoProvider extends FutureProvider { } @override - FutureProviderElement createElement() { + AutoDisposeFutureProviderElement createElement() { return _PageInfoProviderElement(this); } @@ -143,17 +131,19 @@ class PageInfoProvider extends FutureProvider { @Deprecated('Will be removed in 3.0. Use Ref instead') // ignore: unused_element -mixin PageInfoRef on FutureProviderRef { +mixin PageInfoRef on AutoDisposeFutureProviderRef { /// The parameter `url` of this provider. Uri get url; } -class _PageInfoProviderElement extends FutureProviderElement +class _PageInfoProviderElement + extends AutoDisposeFutureProviderElement with PageInfoRef { _PageInfoProviderElement(super.provider); @override Uri get url => (origin as PageInfoProvider).url; } + // 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 diff --git a/app/lib/presentation/hooks/draggable_scrollable_controller.dart b/app/lib/presentation/hooks/draggable_scrollable_controller.dart deleted file mode 100644 index 9d0c39ee..00000000 --- a/app/lib/presentation/hooks/draggable_scrollable_controller.dart +++ /dev/null @@ -1,35 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_hooks/flutter_hooks.dart'; - -DraggableScrollableController useDraggableScrollableController() { - return use(const _DraggableScrollableControllerHook()); -} - -class _DraggableScrollableControllerHook - extends Hook { - const _DraggableScrollableControllerHook(); - - @override - HookState> - createState() { - return _DraggableScrollableControllerHookState(); - } -} - -class _DraggableScrollableControllerHookState - extends - HookState< - DraggableScrollableController, - _DraggableScrollableControllerHook - > { - late final _controller = DraggableScrollableController(); - - @override - DraggableScrollableController build(BuildContext context) => _controller; - - @override - void dispose() => _controller.dispose(); - - @override - String get debugLabel => 'useDraggableScrollableController'; -} diff --git a/app/lib/presentation/hooks/overlay_portal_controller.dart b/app/lib/presentation/hooks/overlay_portal_controller.dart deleted file mode 100644 index ed9c432a..00000000 --- a/app/lib/presentation/hooks/overlay_portal_controller.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:flutter_hooks/flutter_hooks.dart'; - -OverlayPortalController useOverlayPortalController() { - return use(const _OverlayPortalControllerHook()); -} - -class _OverlayPortalControllerHook extends Hook { - const _OverlayPortalControllerHook(); - - @override - HookState> - createState() { - return _OverlayPortalControllerHookState(); - } -} - -class _OverlayPortalControllerHookState - extends HookState { - late final _controller = OverlayPortalController(); - - @override - OverlayPortalController build(BuildContext context) => _controller; - - @override - String get debugLabel => 'useOverlayPortalController'; -} diff --git a/app/lib/presentation/widgets/autocomplete.dart b/app/lib/presentation/widgets/autocomplete.dart index 981fb3f7..9d7a5aca 100644 --- a/app/lib/presentation/widgets/autocomplete.dart +++ b/app/lib/presentation/widgets/autocomplete.dart @@ -130,6 +130,7 @@ class ExternalResultsAutocomplete extends StatefulWidget { /// {@endtemplate} final AutocompleteOnSelected? onSelected; + // ignore: avoid_futureor_void final FutureOr Function(TextEditingValue textEditingValue) onTextChanged; diff --git a/app/lib/presentation/widgets/rounded_text.dart b/app/lib/presentation/widgets/rounded_text.dart new file mode 100644 index 00000000..0b6a5ab2 --- /dev/null +++ b/app/lib/presentation/widgets/rounded_text.dart @@ -0,0 +1,24 @@ +import 'package:flutter/material.dart'; + +class RoundedBackground extends StatelessWidget { + final Widget child; + final Color? backgroundColor; + + const RoundedBackground({ + super.key, + required this.child, + this.backgroundColor, + }); + + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 2), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(25), + color: backgroundColor ?? Theme.of(context).colorScheme.primary, + ), + child: child, + ); + } +} diff --git a/app/lib/presentation/widgets/bang_icon.dart b/app/lib/presentation/widgets/url_icon.dart similarity index 90% rename from app/lib/presentation/widgets/bang_icon.dart rename to app/lib/presentation/widgets/url_icon.dart index 9c6001d6..874eb612 100644 --- a/app/lib/presentation/widgets/bang_icon.dart +++ b/app/lib/presentation/widgets/url_icon.dart @@ -14,8 +14,9 @@ class UrlIcon extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final icon = useCachedFuture( - () async => - ref.read(genericWebsiteServiceProvider.notifier).getUrlIcon(url), + () => + // ignore: discarded_futures + ref.read(genericWebsiteServiceProvider.notifier).getUrlIcon(url), [url], ); diff --git a/app/lib/presentation/widgets/website_feed_tile.dart b/app/lib/presentation/widgets/website_feed_tile.dart new file mode 100644 index 00000000..2729d9df --- /dev/null +++ b/app/lib/presentation/widgets/website_feed_tile.dart @@ -0,0 +1,64 @@ +import 'package:flutter/material.dart'; +import 'package:hooks_riverpod/hooks_riverpod.dart'; +import 'package:lensai/data/models/web_page_info.dart'; +import 'package:lensai/extensions/nullable.dart'; +import 'package:lensai/presentation/controllers/website_title.dart'; +import 'package:lensai/presentation/widgets/rounded_text.dart'; +import 'package:skeletonizer/skeletonizer.dart'; + +class WebsiteFeedTile extends HookConsumerWidget { + final Uri url; + final WebPageInfo? precachedInfo; + + const WebsiteFeedTile(this.url, {this.precachedInfo, super.key}); + + @override + Widget build(BuildContext context, WidgetRef ref) { + final pageInfoAsync = + (precachedInfo?.feeds != null) + ? AsyncValue.data(precachedInfo!) + : ref.watch(pageInfoProvider(url)); + + return Skeletonizer( + enabled: pageInfoAsync.isLoading && precachedInfo?.feeds == null, + child: pageInfoAsync.when( + data: (info) { + if (info.feeds.isEmpty) { + return const SizedBox.shrink(); + } + + return ListTile( + leading: const Icon(Icons.rss_feed), + title: const Text('Available Web Feeds'), + trailing: RoundedBackground( + child: Text( + info.feeds!.length.toString(), + textAlign: TextAlign.center, + style: TextStyle( + color: Theme.of(context).colorScheme.onPrimary, + ), + ), + ), + ); + }, + error: (error, stackTrace) { + return const SizedBox.shrink(); + + //Will be dispalyed on title already + + // return FailureWidget( + // title: error.toString(), + // onRetry: () => ref.refresh(pageInfoProvider(url)), + // ); + }, + loading: + () => const ListTile( + leading: Icon(Icons.rss_feed), + contentPadding: EdgeInsets.zero, + title: Text('Available Web Feeds'), + trailing: Bone.icon(), + ), + ), + ); + } +} diff --git a/app/lib/utils/feed_finder.dart b/app/lib/utils/feed_finder.dart deleted file mode 100644 index 66034ef8..00000000 --- a/app/lib/utils/feed_finder.dart +++ /dev/null @@ -1,96 +0,0 @@ -import 'package:html/dom.dart'; -import 'package:http/http.dart' as http; - -class FeedFinder { - final Uri url; - final Document document; - - late final String _base; - - FeedFinder({required this.url, required this.document}) { - final uri = url.removeFragment(); - _base = '${uri.scheme}://${uri.authority}'; - } - - Future> _verifyCandidates(Set candidates) async { - final results = {}; - - final client = http.Client(); - try { - for (final candidate in candidates) { - try { - await client.get(Uri.parse(candidate)); - } catch (e) { - continue; - } - - results.add(candidate); - } - } finally { - client.close(); - } - - return results; - } - - void _parseBody(Set candidates) { - for (final a in document.querySelectorAll('a')) { - var href = a.attributes['href']; - if (href != null) { - if (href.contains('rss') || - href.contains('xml') || - href.contains('feed')) { - // Fix relative URLs - href = href.startsWith('/') ? _base + href : href; - href = href.endsWith('/') ? href.substring(0, href.length - 2) : href; - - // Fix naked URLs - href = !href.startsWith('http') ? '$_base/$href' : href; - - candidates.add(href); - } - } - } - } - - void _parseHead(Set candidates) { - for (final link in document.querySelectorAll("link[rel='alternate']")) { - final type = link.attributes['type']; - if (type != null) { - if (type.contains('rss') || type.contains('xml')) { - var href = link.attributes['href']; - if (href != null) { - // Fix relative URLs - href = href.startsWith('/') ? _base + href : href; - candidates.add(href); - } - } - } - } - } - - Future> parse({ - bool parseHead = true, - bool parseBody = true, - bool verifyCandidates = true, - }) async { - final candidates = {}; - - // Look for feed candidates in head - if (parseHead) { - _parseHead(candidates); - } - - // Look for feed candidates in body - if (parseBody) { - _parseBody(candidates); - } - - // Verify candidates - if (verifyCandidates) { - return _verifyCandidates(candidates); - } - - return candidates; - } -} diff --git a/app/lib/utils/markdown/image_extractor.dart b/app/lib/utils/markdown/image_extractor.dart new file mode 100644 index 00000000..bffda5bf --- /dev/null +++ b/app/lib/utils/markdown/image_extractor.dart @@ -0,0 +1,32 @@ +import 'package:lensai/extensions/nullable.dart'; +import 'package:markdown/markdown.dart'; +import 'package:path/path.dart' as p; + +List extractImagesFromMarkdown(String markdownText) { + final imageUrls = []; + + final nodes = Document().parse(markdownText); + + void findImages(List nodes) { + for (final node in nodes) { + if (node is Element && node.tag == 'img') { + final url = node.attributes['src']; + + if (url.mapNotNull((url) => Uri.tryParse(url)) case final Uri url) { + if (p.extension(url.path) + case '.png' || '.jpg' || '.jpeg' || '.webp') { + imageUrls.add(url); + } + } + } + + if (node is Element && node.children != null) { + findImages(node.children!); + } + } + } + + findImages(nodes); + + return imageUrls; +} diff --git a/app/lib/utils/ui_helper.dart b/app/lib/utils/ui_helper.dart index fe732cea..2d1d9588 100644 --- a/app/lib/utils/ui_helper.dart +++ b/app/lib/utils/ui_helper.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:lensai/extensions/nullable.dart'; import 'package:url_launcher/url_launcher.dart'; void showErrorMessage(BuildContext context, String message) { @@ -9,6 +10,60 @@ void showErrorMessage(BuildContext context, String message) { ), backgroundColor: Theme.of(context).colorScheme.onError, ); + + ScaffoldMessenger.of(context).showSnackBar(snackBar); +} + +void showTabBackButtonMessage(BuildContext context, int tabCount) { + final snackbar = SnackBar( + content: + (tabCount > 1) + ? const Text('Please click BACK again to close current tab') + : const Text('Please click BACK again to exit app'), + ); + + ScaffoldMessenger.of(context) + ..clearSnackBars() + ..showSnackBar(snackbar); +} + +void showTabOpenedMessage( + BuildContext context, { + String? tabName, + void Function()? onShow, +}) { + final message = switch (tabName.whenNotEmpty) { + String() => "New tab '$tabName' opened in background", + null => 'New tab opened in background', + }; + + final snackBar = SnackBar( + content: Text(message), + action: onShow.mapNotNull( + (onPressed) => SnackBarAction(label: 'Show', onPressed: onPressed), + ), + ); + + ScaffoldMessenger.of(context).showSnackBar(snackBar); +} + +void showTabSwitchMessage( + BuildContext context, { + String? tabName, + void Function()? onSwitch, +}) { + final message = switch (tabName.whenNotEmpty) { + String() => "New tab '$tabName' opened", + null => 'New tab opened', + }; + + final snackBar = SnackBar( + content: Text(message), + action: onSwitch.mapNotNull( + (onPressed) => SnackBarAction(label: 'Switch', onPressed: onPressed), + ), + ); + ScaffoldMessenger.of(context).showSnackBar(snackBar); } @@ -29,16 +84,3 @@ Future launchUrlFeedback( } } } - -void showTabBackButtonMessage(BuildContext context, int tabCount) { - ScaffoldMessenger.of(context) - ..clearSnackBars() - ..showSnackBar( - SnackBar( - content: - (tabCount > 1) - ? const Text('Please click BACK again to close current tab') - : const Text('Please click BACK again to exit app'), - ), - ); -} diff --git a/packages/flutter_mozilla_components/analysis_options.yaml b/packages/flutter_mozilla_components/analysis_options.yaml index 29144708..9357549d 100644 --- a/packages/flutter_mozilla_components/analysis_options.yaml +++ b/packages/flutter_mozilla_components/analysis_options.yaml @@ -19,7 +19,6 @@ linter: unawaited_futures: true discarded_futures: true collection_methods_unrelated_type: true - require_trailing_commas: false analyzer: plugins: diff --git a/packages/flutter_mozilla_components/android/src/main/assets/extensions/readability_extract/manifest.json b/packages/flutter_mozilla_components/android/src/main/assets/extensions/readability_extract/manifest.json index bb85955e..b6319397 100644 --- a/packages/flutter_mozilla_components/android/src/main/assets/extensions/readability_extract/manifest.json +++ b/packages/flutter_mozilla_components/android/src/main/assets/extensions/readability_extract/manifest.json @@ -9,7 +9,9 @@ "version": "1.0", "content_scripts": [ { - "matches": [""], + "matches": [ + "" + ], "js": [ "readability.min.js", "content.js" @@ -26,4 +28,4 @@ "webNavigation", "" ] -} +} \ No newline at end of file diff --git a/packages/flutter_mozilla_components/android/src/main/assets/extensions/turndown/background.js b/packages/flutter_mozilla_components/android/src/main/assets/extensions/turndown/background.js new file mode 100644 index 00000000..55c295f6 --- /dev/null +++ b/packages/flutter_mozilla_components/android/src/main/assets/extensions/turndown/background.js @@ -0,0 +1,32 @@ +const port = browser.runtime.connectNative("mozacTurndownHtml"); +const parser = new DOMParser(); + +port.onMessage.addListener(message => { + let requestId = message["id"]; + + switch (message["action"]) { + case "turndown": + console.log(message.args) + // Handle array of HTML strings + if (Array.isArray(message.args)) { + const results = message.args.map(htmlString => { + const document = parser.parseFromString(htmlString, 'text/html'); + return parseFullMarkdown(document); + }); + + port.postMessage({ + "id": requestId, + "status": "success", + "result": results + }); + } else { + // Handle error case for invalid input + port.postMessage({ + "id": requestId, + "status": "error", + "error": "Expected args to be an array of HTML strings" + }); + } + break; + } +}); diff --git a/packages/flutter_mozilla_components/android/src/main/assets/extensions/turndown/manifest.json b/packages/flutter_mozilla_components/android/src/main/assets/extensions/turndown/manifest.json new file mode 100644 index 00000000..1112ee49 --- /dev/null +++ b/packages/flutter_mozilla_components/android/src/main/assets/extensions/turndown/manifest.json @@ -0,0 +1,21 @@ +{ + "manifest_version": 2, + "browser_specific_settings": { + "gecko": { + "id": "turndown@movenext.me" + } + }, + "name": "Converts html to markdown", + "version": "1.0", + "background": { + "scripts": [ + "readability.min.js", + "background.js" + ] + }, + "permissions": [ + "geckoViewAddons", + "nativeMessaging", + "" + ] +} \ No newline at end of file diff --git a/packages/flutter_mozilla_components/android/src/main/assets/extensions/turndown/readability.min.js b/packages/flutter_mozilla_components/android/src/main/assets/extensions/turndown/readability.min.js new file mode 120000 index 00000000..1eada1aa --- /dev/null +++ b/packages/flutter_mozilla_components/android/src/main/assets/extensions/turndown/readability.min.js @@ -0,0 +1 @@ +../../../../../../javascript/readability/dist/readability.min.js \ No newline at end of file diff --git a/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/EngineProvider.kt b/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/EngineProvider.kt index 4cdb5ab7..79beb8ed 100644 --- a/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/EngineProvider.kt +++ b/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/EngineProvider.kt @@ -8,6 +8,7 @@ import android.content.Context import eu.lensai.flutter_mozilla_components.feature.ContainerProxyFeature import eu.lensai.flutter_mozilla_components.feature.CookieManagerFeature import eu.lensai.flutter_mozilla_components.feature.PrefManagerFeature +import eu.lensai.flutter_mozilla_components.feature.TurndownFeature import mozilla.components.browser.engine.gecko.GeckoEngine import mozilla.components.browser.engine.gecko.fetch.GeckoViewFetchClient import mozilla.components.concept.engine.DefaultSettings @@ -52,6 +53,7 @@ object EngineProvider { CookieManagerFeature.install(it) PrefManagerFeature.install(it) ContainerProxyFeature.install(it) + TurndownFeature.install(it) } } diff --git a/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/FlutterMozillaComponentsPlugin.kt b/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/FlutterMozillaComponentsPlugin.kt index 2f198d45..cad71ad0 100644 --- a/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/FlutterMozillaComponentsPlugin.kt +++ b/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/FlutterMozillaComponentsPlugin.kt @@ -18,6 +18,7 @@ import eu.lensai.flutter_mozilla_components.api.GeckoSelectionActionControllerIm import eu.lensai.flutter_mozilla_components.api.GeckoSessionApiImpl import eu.lensai.flutter_mozilla_components.api.GeckoSuggestionApiImpl import eu.lensai.flutter_mozilla_components.api.GeckoTabsApiImpl +import eu.lensai.flutter_mozilla_components.api.GeckoTurndownApiImpl import eu.lensai.flutter_mozilla_components.feature.DefaultSelectionActionDelegate import eu.lensai.flutter_mozilla_components.pigeons.GeckoAddonEvents import eu.lensai.flutter_mozilla_components.pigeons.GeckoAddonsApi @@ -38,6 +39,7 @@ import eu.lensai.flutter_mozilla_components.pigeons.GeckoSuggestionApi import eu.lensai.flutter_mozilla_components.pigeons.GeckoSuggestionEvents import eu.lensai.flutter_mozilla_components.pigeons.GeckoTabContentEvents import eu.lensai.flutter_mozilla_components.pigeons.GeckoTabsApi +import eu.lensai.flutter_mozilla_components.pigeons.GeckoTurndownApi import eu.lensai.flutter_mozilla_components.pigeons.ReaderViewController import eu.lensai.flutter_mozilla_components.pigeons.ReaderViewEvents @@ -123,6 +125,7 @@ class FlutterMozillaComponentsPlugin: FlutterPlugin, ActivityAware { )) GeckoDeleteBrowsingDataController.setUp(_flutterPluginBinding.binaryMessenger, GeckoDeleteBrowsingDataControllerImpl()) GeckoDownloadsApi.setUp(_flutterPluginBinding.binaryMessenger, GeckoDownloadsApiImpl()) + GeckoTurndownApi.setUp(_flutterPluginBinding.binaryMessenger, GeckoTurndownApiImpl()) ReaderViewEvents.setUp( _flutterPluginBinding.binaryMessenger, diff --git a/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/api/GeckoTurndownApiImpl.kt b/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/api/GeckoTurndownApiImpl.kt new file mode 100644 index 00000000..1ddad9c7 --- /dev/null +++ b/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/api/GeckoTurndownApiImpl.kt @@ -0,0 +1,53 @@ +package eu.lensai.flutter_mozilla_components.api + +import eu.lensai.flutter_mozilla_components.feature.ResultConsumer +import eu.lensai.flutter_mozilla_components.feature.TurndownFeature +import eu.lensai.flutter_mozilla_components.pigeons.GeckoTurndownApi +import org.json.JSONArray +import org.json.JSONObject + +class GeckoTurndownApiImpl : GeckoTurndownApi { + private fun JSONObject.toMap(): Map { + val map = mutableMapOf() + val keys = this.keys() + + while (keys.hasNext()) { + val key = keys.next() + when (val value = this.get(key)) { + is JSONObject -> map[key] = value.toMap() + is JSONArray -> map[key] = value.toList() +// JSONObject.NULL -> map[key] = null + else -> map[key] = value + } + } + + return map + } + + private fun JSONArray.toList(): List { + val list = mutableListOf() + for (i in 0 until this.length()) { + when (val value = this.get(i)) { + is JSONObject -> list.add(value.toMap()) + is JSONArray -> list.add(value.toList()) + JSONObject.NULL -> list.add(null as Any) + else -> list.add(value) + } + } + return list + } + + override fun getMarkdown(htmlList: List, callback: (Result>) -> Unit) { + TurndownFeature.scheduleRequest("turndown", htmlList, object : + ResultConsumer { + override fun success(result: JSONObject) { + val resultArray = result.getJSONArray("result") + callback(Result.success(resultArray.toList())) + } + + override fun error(errorCode: String, errorMessage: String?, errorDetails: Any?) { + callback(Result.failure(Exception("$errorCode $errorMessage $errorDetails"))) + } + }) + } +} diff --git a/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/feature/TurndownFeature.kt b/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/feature/TurndownFeature.kt new file mode 100644 index 00000000..ed450877 --- /dev/null +++ b/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/feature/TurndownFeature.kt @@ -0,0 +1,104 @@ +package eu.lensai.flutter_mozilla_components.feature + +import androidx.annotation.VisibleForTesting +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import kotlinx.coroutines.withContext +import mozilla.components.concept.engine.webextension.MessageHandler +import mozilla.components.concept.engine.webextension.Port +import mozilla.components.concept.engine.webextension.WebExtensionRuntime +import mozilla.components.support.base.log.logger.Logger +import mozilla.components.support.webextensions.WebExtensionController +import org.json.JSONArray +import org.json.JSONObject + +object TurndownFeature { + private val logger = Logger("turndown") + + private const val PREF_MANAGER_REPORTER_EXTENSION_ID = "turndown@movenext.me" + private const val PREF_MANAGER_REPORTER_EXTENSION_URL = "resource://android/assets/extensions/turndown/" + private const val PREF_MANAGER_REPORTER_MESSAGING_ID = "mozacTurndownHtml" + + private var nextRequestId: Int = 0 + private val requestHandlers = HashMap>() + private val mutex = Mutex() + + @VisibleForTesting + // This is an internal var to make it mutable for unit testing purposes only + internal var extensionController = WebExtensionController( + PREF_MANAGER_REPORTER_EXTENSION_ID, + PREF_MANAGER_REPORTER_EXTENSION_URL, + PREF_MANAGER_REPORTER_MESSAGING_ID, + ) + + fun scheduleRequest(command: String, args: Any, callback: ResultConsumer) { + val message = JSONObject() + message.put("action", command); + message.put("args", when (args) { + is List<*> -> JSONArray(args) + else -> args + }) + + runBlocking { + withContext(Dispatchers.Default) { + mutex.withLock { + message.put("id", nextRequestId) + + requestHandlers[nextRequestId] = callback + + nextRequestId += 1 + + extensionController.sendBackgroundMessage(message) + } + } + } + } + + private class TurndownBackgroundMessageHandler() : MessageHandler { + override fun onPortMessage(message: Any, port: Port) { + runBlocking { + withContext(Dispatchers.Default) { + mutex.withLock { + val messageJSON = message as JSONObject; + + val requestId = messageJSON.getInt("id") + val status = messageJSON.getString("status") + if (status == "success") { + requestHandlers[requestId]?.success(message) + } else { + requestHandlers[requestId]?.error( + "Pref Manager", + "Failed to perform operation", + message.getString("error") + ) + } + } + } + } + } + } + + /** + * Installs the web extension in the runtime through the WebExtensionRuntime install method + * + * @param runtime a WebExtensionRuntime. + * @param productName a custom product name used to automatically label reports. Defaults to + * "android-components". + */ + fun install(runtime: WebExtensionRuntime) { + extensionController.registerBackgroundMessageHandler( + TurndownBackgroundMessageHandler(), + ) + extensionController.install( + runtime, + onSuccess = { + logger.debug("Installed Turndown webextension: ${it.id}") + }, + onError = { throwable -> + logger.error("Failed to install Turndown webextension: ", throwable) + }, + ) + } +} diff --git a/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/pigeons/Gecko.g.kt b/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/pigeons/Gecko.g.kt index d0538636..ca618d10 100644 --- a/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/pigeons/Gecko.g.kt +++ b/packages/flutter_mozilla_components/android/src/main/kotlin/eu/lensai/flutter_mozilla_components/pigeons/Gecko.g.kt @@ -2980,6 +2980,42 @@ interface GeckoPrefApi { } } /** Generated interface from Pigeon that represents a handler of messages from Flutter. */ +interface GeckoTurndownApi { + fun getMarkdown(htmlList: List, callback: (Result>) -> Unit) + + companion object { + /** The codec used by GeckoTurndownApi. */ + val codec: MessageCodec by lazy { + GeckoPigeonCodec() + } + /** Sets up an instance of `GeckoTurndownApi` to handle messages through the `binaryMessenger`. */ + @JvmOverloads + fun setUp(binaryMessenger: BinaryMessenger, api: GeckoTurndownApi?, messageChannelSuffix: String = "") { + val separatedMessageChannelSuffix = if (messageChannelSuffix.isNotEmpty()) ".$messageChannelSuffix" else "" + run { + val channel = BasicMessageChannel(binaryMessenger, "dev.flutter.pigeon.flutter_mozilla_components.GeckoTurndownApi.getMarkdown$separatedMessageChannelSuffix", codec) + if (api != null) { + channel.setMessageHandler { message, reply -> + val args = message as List + val htmlListArg = args[0] as List + api.getMarkdown(htmlListArg) { result: Result> -> + val error = result.exceptionOrNull() + if (error != null) { + reply.reply(wrapError(error)) + } else { + val data = result.getOrNull() + reply.reply(wrapResult(data)) + } + } + } + } else { + channel.setMessageHandler(null) + } + } + } + } +} +/** Generated interface from Pigeon that represents a handler of messages from Flutter. */ interface GeckoContainerProxyApi { fun setProxyPort(port: Long) fun addContainerProxy(contextId: String) diff --git a/packages/flutter_mozilla_components/javascript/readability/dist/readability.min.js b/packages/flutter_mozilla_components/javascript/readability/dist/readability.min.js index 4d1bab66..a93b8f47 100644 --- a/packages/flutter_mozilla_components/javascript/readability/dist/readability.min.js +++ b/packages/flutter_mozilla_components/javascript/readability/dist/readability.min.js @@ -1 +1 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.ReadabilityBundle=t():e.ReadabilityBundle=t()}(this,(()=>(()=>{var e={804:e=>{var t={unlikelyCandidates:/-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,okMaybeItsACandidate:/and|article|body|column|content|main|shadow/i};function i(e){return(!e.style||"none"!=e.style.display)&&!e.hasAttribute("hidden")&&(!e.hasAttribute("aria-hidden")||"true"!=e.getAttribute("aria-hidden")||e.className&&e.className.indexOf&&-1!==e.className.indexOf("fallback-image"))}e.exports=function(e,n={}){"function"==typeof n&&(n={visibilityChecker:n});var r={minScore:20,minContentLength:140,visibilityChecker:i};n=Object.assign(r,n);var a=e.querySelectorAll("p, pre, article"),s=e.querySelectorAll("div > br");if(s.length){var o=new Set(a);[].forEach.call(s,(function(e){o.add(e.parentNode)})),a=Array.from(o)}var l=0;return[].some.call(a,(function(e){if(!n.visibilityChecker(e))return!1;var i=e.className+" "+e.id;if(t.unlikelyCandidates.test(i)&&!t.okMaybeItsACandidate.test(i))return!1;if(e.matches("li p"))return!1;var r=e.textContent.trim().length;return!(rn.minScore}))}},238:e=>{function t(e,t){if(t&&t.documentElement)e=t,t=arguments[2];else if(!e||!e.documentElement)throw new Error("First argument to Readability constructor should be a document object.");if(t=t||{},this._doc=e,this._docJSDOMParser=this._doc.firstChild.__JSDOMParser__,this._articleTitle=null,this._articleByline=null,this._articleDir=null,this._articleSiteName=null,this._attempts=[],this._debug=!!t.debug,this._maxElemsToParse=t.maxElemsToParse||this.DEFAULT_MAX_ELEMS_TO_PARSE,this._nbTopCandidates=t.nbTopCandidates||this.DEFAULT_N_TOP_CANDIDATES,this._charThreshold=t.charThreshold||this.DEFAULT_CHAR_THRESHOLD,this._classesToPreserve=this.CLASSES_TO_PRESERVE.concat(t.classesToPreserve||[]),this._keepClasses=!!t.keepClasses,this._serializer=t.serializer||function(e){return e.innerHTML},this._disableJSONLD=!!t.disableJSONLD,this._allowedVideoRegex=t.allowedVideoRegex||this.REGEXPS.videos,this._flags=this.FLAG_STRIP_UNLIKELYS|this.FLAG_WEIGHT_CLASSES|this.FLAG_CLEAN_CONDITIONALLY,this._debug){let e=function(e){if(e.nodeType==e.TEXT_NODE)return`${e.nodeName} ("${e.textContent}")`;let t=Array.from(e.attributes||[],(function(e){return`${e.name}="${e.value}"`})).join(" ");return`<${e.localName} ${t}>`};this.log=function(){if("undefined"!=typeof console){let t=Array.from(arguments,(t=>t&&t.nodeType==this.ELEMENT_NODE?e(t):t));t.unshift("Reader: (Readability)"),console.log.apply(console,t)}else if("undefined"!=typeof dump){var t=Array.prototype.map.call(arguments,(function(t){return t&&t.nodeName?e(t):t})).join(" ");dump("Reader: (Readability) "+t+"\n")}}}else this.log=function(){}}t.prototype={FLAG_STRIP_UNLIKELYS:1,FLAG_WEIGHT_CLASSES:2,FLAG_CLEAN_CONDITIONALLY:4,ELEMENT_NODE:1,TEXT_NODE:3,DEFAULT_MAX_ELEMS_TO_PARSE:0,DEFAULT_N_TOP_CANDIDATES:5,DEFAULT_TAGS_TO_SCORE:"section,h2,h3,h4,h5,h6,p,td,pre".toUpperCase().split(","),DEFAULT_CHAR_THRESHOLD:500,REGEXPS:{unlikelyCandidates:/-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,okMaybeItsACandidate:/and|article|body|column|content|main|shadow/i,positive:/article|body|content|entry|hentry|h-entry|main|page|pagination|post|text|blog|story/i,negative:/-ad-|hidden|^hid$| hid$| hid |^hid |banner|combx|comment|com-|contact|foot|footer|footnote|gdpr|masthead|media|meta|outbrain|promo|related|scroll|share|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|tool|widget/i,extraneous:/print|archive|comment|discuss|e[\-]?mail|share|reply|all|login|sign|single|utility/i,byline:/byline|author|dateline|writtenby|p-author/i,replaceFonts:/<(\/?)font[^>]*>/gi,normalize:/\s{2,}/g,videos:/\/\/(www\.)?((dailymotion|youtube|youtube-nocookie|player\.vimeo|v\.qq)\.com|(archive|upload\.wikimedia)\.org|player\.twitch\.tv)/i,shareElements:/(\b|_)(share|sharedaddy)(\b|_)/i,nextLink:/(next|weiter|continue|>([^\|]|$)|ยป([^\|]|$))/i,prevLink:/(prev|earl|old|new|<|ยซ)/i,tokenize:/\W+/g,whitespace:/^\s*$/,hasContent:/\S$/,hashUrl:/^#.+/,srcsetUrl:/(\S+)(\s+[\d.]+[xw])?(\s*(?:,|$))/g,b64DataUrl:/^data:\s*([^\s;,]+)\s*;\s*base64\s*,/i,commas:/\u002C|\u060C|\uFE50|\uFE10|\uFE11|\u2E41|\u2E34|\u2E32|\uFF0C/g,jsonLdArticleTypes:/^Article|AdvertiserContentArticle|NewsArticle|AnalysisNewsArticle|AskPublicNewsArticle|BackgroundNewsArticle|OpinionNewsArticle|ReportageNewsArticle|ReviewNewsArticle|Report|SatiricalArticle|ScholarlyArticle|MedicalScholarlyArticle|SocialMediaPosting|BlogPosting|LiveBlogPosting|DiscussionForumPosting|TechArticle|APIReference$/},UNLIKELY_ROLES:["menu","menubar","complementary","navigation","alert","alertdialog","dialog"],DIV_TO_P_ELEMS:new Set(["BLOCKQUOTE","DL","DIV","IMG","OL","P","PRE","TABLE","UL"]),ALTER_TO_DIV_EXCEPTIONS:["DIV","ARTICLE","SECTION","P"],PRESENTATIONAL_ATTRIBUTES:["align","background","bgcolor","border","cellpadding","cellspacing","frame","hspace","rules","style","valign","vspace"],DEPRECATED_SIZE_ATTRIBUTE_ELEMS:["TABLE","TH","TD","HR","PRE"],PHRASING_ELEMS:["ABBR","AUDIO","B","BDO","BR","BUTTON","CITE","CODE","DATA","DATALIST","DFN","EM","EMBED","I","IMG","INPUT","KBD","LABEL","MARK","MATH","METER","NOSCRIPT","OBJECT","OUTPUT","PROGRESS","Q","RUBY","SAMP","SCRIPT","SELECT","SMALL","SPAN","STRONG","SUB","SUP","TEXTAREA","TIME","VAR","WBR"],CLASSES_TO_PRESERVE:["page"],HTML_ESCAPE_MAP:{lt:"<",gt:">",amp:"&",quot:'"',apos:"'"},_postProcessContent:function(e){this._fixRelativeUris(e),this._simplifyNestedElements(e),this._keepClasses||this._cleanClasses(e)},_removeNodes:function(e,t){if(this._docJSDOMParser&&e._isLiveNodeList)throw new Error("Do not pass live node lists to _removeNodes");for(var i=e.length-1;i>=0;i--){var n=e[i],r=n.parentNode;r&&(t&&!t.call(this,n,i,e)||r.removeChild(n))}},_replaceNodeTags:function(e,t){if(this._docJSDOMParser&&e._isLiveNodeList)throw new Error("Do not pass live node lists to _replaceNodeTags");for(const i of e)this._setNodeTag(i,t)},_forEachNode:function(e,t){Array.prototype.forEach.call(e,t,this)},_findNode:function(e,t){return Array.prototype.find.call(e,t,this)},_someNode:function(e,t){return Array.prototype.some.call(e,t,this)},_everyNode:function(e,t){return Array.prototype.every.call(e,t,this)},_concatNodeLists:function(){var e=Array.prototype.slice,t=e.call(arguments).map((function(t){return e.call(t)}));return Array.prototype.concat.apply([],t)},_getAllNodesWithTag:function(e,t){return e.querySelectorAll?e.querySelectorAll(t.join(",")):[].concat.apply([],t.map((function(t){var i=e.getElementsByTagName(t);return Array.isArray(i)?i:Array.from(i)})))},_cleanClasses:function(e){var t=this._classesToPreserve,i=(e.getAttribute("class")||"").split(/\s+/).filter((function(e){return-1!=t.indexOf(e)})).join(" ");for(i?e.setAttribute("class",i):e.removeAttribute("class"),e=e.firstElementChild;e;e=e.nextElementSibling)this._cleanClasses(e)},_fixRelativeUris:function(e){var t=this._doc.baseURI,i=this._doc.documentURI;function n(e){if(t==i&&"#"==e.charAt(0))return e;try{return new URL(e,t).href}catch(e){}return e}var r=this._getAllNodesWithTag(e,["a"]);this._forEachNode(r,(function(e){var t=e.getAttribute("href");if(t)if(0===t.indexOf("javascript:"))if(1===e.childNodes.length&&e.childNodes[0].nodeType===this.TEXT_NODE){var i=this._doc.createTextNode(e.textContent);e.parentNode.replaceChild(i,e)}else{for(var r=this._doc.createElement("span");e.firstChild;)r.appendChild(e.firstChild);e.parentNode.replaceChild(r,e)}else e.setAttribute("href",n(t))}));var a=this._getAllNodesWithTag(e,["img","picture","figure","video","audio","source"]);this._forEachNode(a,(function(e){var t=e.getAttribute("src"),i=e.getAttribute("poster"),r=e.getAttribute("srcset");if(t&&e.setAttribute("src",n(t)),i&&e.setAttribute("poster",n(i)),r){var a=r.replace(this.REGEXPS.srcsetUrl,(function(e,t,i,r){return n(t)+(i||"")+r}));e.setAttribute("srcset",a)}}))},_simplifyNestedElements:function(e){for(var t=e;t;){if(t.parentNode&&["DIV","SECTION"].includes(t.tagName)&&(!t.id||!t.id.startsWith("readability"))){if(this._isElementWithoutContent(t)){t=this._removeAndGetNext(t);continue}if(this._hasSingleTagInsideElement(t,"DIV")||this._hasSingleTagInsideElement(t,"SECTION")){for(var i=t.children[0],n=0;nยป] /.test(t))n=/ [\\\/>ยป] /.test(t),r(t=i.replace(/(.*)[\|\-\\\/>ยป] .*/gi,"$1"))<3&&(t=i.replace(/[^\|\-\\\/>ยป]*[\|\-\\\/>ยป](.*)/gi,"$1"));else if(-1!==t.indexOf(": ")){var a=this._concatNodeLists(e.getElementsByTagName("h1"),e.getElementsByTagName("h2")),s=t.trim();this._someNode(a,(function(e){return e.textContent.trim()===s}))||(r(t=i.substring(i.lastIndexOf(":")+1))<3?t=i.substring(i.indexOf(":")+1):r(i.substr(0,i.indexOf(":")))>5&&(t=i))}else if(t.length>150||t.length<15){var o=e.getElementsByTagName("h1");1===o.length&&(t=this._getInnerText(o[0]))}var l=r(t=t.trim().replace(this.REGEXPS.normalize," "));return l<=4&&(!n||l!=r(i.replace(/[\|\-\\\/>ยป]+/g,""))-1)&&(t=i),t},_prepDocument:function(){var e=this._doc;this._removeNodes(this._getAllNodesWithTag(e,["style"])),e.body&&this._replaceBrs(e.body),this._replaceNodeTags(this._getAllNodesWithTag(e,["font"]),"SPAN")},_nextNode:function(e){for(var t=e;t&&t.nodeType!=this.ELEMENT_NODE&&this.REGEXPS.whitespace.test(t.textContent);)t=t.nextSibling;return t},_replaceBrs:function(e){this._forEachNode(this._getAllNodesWithTag(e,["br"]),(function(e){for(var t=e.nextSibling,i=!1;(t=this._nextNode(t))&&"BR"==t.tagName;){i=!0;var n=t.nextSibling;t.parentNode.removeChild(t),t=n}if(i){var r=this._doc.createElement("p");for(e.parentNode.replaceChild(r,e),t=r.nextSibling;t;){if("BR"==t.tagName){var a=this._nextNode(t.nextSibling);if(a&&"BR"==a.tagName)break}if(!this._isPhrasingContent(t))break;var s=t.nextSibling;r.appendChild(t),t=s}for(;r.lastChild&&this._isWhitespace(r.lastChild);)r.removeChild(r.lastChild);"P"===r.parentNode.tagName&&this._setNodeTag(r.parentNode,"DIV")}}))},_setNodeTag:function(e,t){if(this.log("_setNodeTag",e,t),this._docJSDOMParser)return e.localName=t.toLowerCase(),e.tagName=t.toUpperCase(),e;for(var i=e.ownerDocument.createElement(t);e.firstChild;)i.appendChild(e.firstChild);e.parentNode.replaceChild(i,e),e.readability&&(i.readability=e.readability);for(var n=0;n!i.includes(e))).join(" ").length/n.join(" ").length:0},_checkByline:function(e,t){if(this._articleByline)return!1;if(void 0!==e.getAttribute)var i=e.getAttribute("rel"),n=e.getAttribute("itemprop");return!(!("author"===i||n&&-1!==n.indexOf("author")||this.REGEXPS.byline.test(t))||!this._isValidByline(e.textContent))&&(this._articleByline=e.textContent.trim(),!0)},_getNodeAncestors:function(e,t){t=t||0;for(var i=0,n=[];e.parentNode&&(n.push(e.parentNode),!t||++i!==t);)e=e.parentNode;return n},_grabArticle:function(e){this.log("**** grabArticle ****");var t=this._doc,i=null!==e;if(!(e=e||this._doc.body))return this.log("No body found in document. Abort."),null;for(var n=e.innerHTML;;){this.log("Starting grabArticle loop");var r=this._flagIsActive(this.FLAG_STRIP_UNLIKELYS),a=[],s=this._doc.documentElement;let V=!0;for(;s;){"HTML"===s.tagName&&(this._articleLang=s.getAttribute("lang"));var o=s.className+" "+s.id;if(this._isProbablyVisible(s))if("true"!=s.getAttribute("aria-modal")||"dialog"!=s.getAttribute("role"))if(this._checkByline(s,o))s=this._removeAndGetNext(s);else if(V&&this._headerDuplicatesTitle(s))this.log("Removing header: ",s.textContent.trim(),this._articleTitle.trim()),V=!1,s=this._removeAndGetNext(s);else{if(r){if(this.REGEXPS.unlikelyCandidates.test(o)&&!this.REGEXPS.okMaybeItsACandidate.test(o)&&!this._hasAncestorTag(s,"table")&&!this._hasAncestorTag(s,"code")&&"BODY"!==s.tagName&&"A"!==s.tagName){this.log("Removing unlikely candidate - "+o),s=this._removeAndGetNext(s);continue}if(this.UNLIKELY_ROLES.includes(s.getAttribute("role"))){this.log("Removing content with role "+s.getAttribute("role")+" - "+o),s=this._removeAndGetNext(s);continue}}if("DIV"!==s.tagName&&"SECTION"!==s.tagName&&"HEADER"!==s.tagName&&"H1"!==s.tagName&&"H2"!==s.tagName&&"H3"!==s.tagName&&"H4"!==s.tagName&&"H5"!==s.tagName&&"H6"!==s.tagName||!this._isElementWithoutContent(s)){if(-1!==this.DEFAULT_TAGS_TO_SCORE.indexOf(s.tagName)&&a.push(s),"DIV"===s.tagName){for(var l=null,c=s.firstChild;c;){var h=c.nextSibling;if(this._isPhrasingContent(c))null!==l?l.appendChild(c):this._isWhitespace(c)||(l=t.createElement("p"),s.replaceChild(l,c),l.appendChild(c));else if(null!==l){for(;l.lastChild&&this._isWhitespace(l.lastChild);)l.removeChild(l.lastChild);l=null}c=h}if(this._hasSingleTagInsideElement(s,"P")&&this._getLinkDensity(s)<.25){var d=s.children[0];s.parentNode.replaceChild(d,s),s=d,a.push(s)}else this._hasChildBlockElement(s)||(s=this._setNodeTag(s,"P"),a.push(s))}s=this._getNextNode(s)}else s=this._removeAndGetNext(s)}else s=this._removeAndGetNext(s);else this.log("Removing hidden node - "+o),s=this._removeAndGetNext(s)}var u=[];this._forEachNode(a,(function(e){if(e.parentNode&&void 0!==e.parentNode.tagName){var t=this._getInnerText(e);if(!(t.length<25)){var i=this._getNodeAncestors(e,5);if(0!==i.length){var n=0;n+=1,n+=t.split(this.REGEXPS.commas).length,n+=Math.min(Math.floor(t.length/100),3),this._forEachNode(i,(function(e,t){if(e.tagName&&e.parentNode&&void 0!==e.parentNode.tagName){if(void 0===e.readability&&(this._initializeNode(e),u.push(e)),0===t)var i=1;else i=1===t?2:3*t;e.readability.contentScore+=n/i}}))}}}}));for(var g=[],f=0,p=u.length;fN.readability.contentScore){g.splice(b,0,m),g.length>this._nbTopCandidates&&g.pop();break}}}var E,y=g[0]||null,v=!1;if(null===y||"BODY"===y.tagName){for(y=t.createElement("DIV"),v=!0;e.firstChild;)this.log("Moving child out:",e.firstChild),y.appendChild(e.firstChild);e.appendChild(y),this._initializeNode(y)}else if(y){for(var T=[],A=1;A=.75&&T.push(this._getNodeAncestors(g[A]));if(T.length>=3)for(E=y.parentNode;"BODY"!==E.tagName;){for(var S=0,C=0;C=3){y=E;break}E=E.parentNode}y.readability||this._initializeNode(y),E=y.parentNode;for(var L=y.readability.contentScore,x=L/3;"BODY"!==E.tagName;)if(E.readability){var R=E.readability.contentScore;if(RL){y=E;break}L=E.readability.contentScore,E=E.parentNode}else E=E.parentNode;for(E=y.parentNode;"BODY"!=E.tagName&&1==E.children.length;)E=(y=E).parentNode;y.readability||this._initializeNode(y)}var O=t.createElement("DIV");i&&(O.id="readability-content");for(var D=Math.max(10,.2*y.readability.contentScore),I=(E=y.parentNode).children,w=0,P=I.length;w=D)B=!0;else if("P"===k.nodeName){var H=this._getLinkDensity(k),G=this._getInnerText(k),U=G.length;(U>80&&H<.25||U<80&&U>0&&0===H&&-1!==G.search(/\.( |$)/))&&(B=!0)}}B&&(this.log("Appending node:",k),-1===this.ALTER_TO_DIV_EXCEPTIONS.indexOf(k.nodeName)&&(this.log("Altering sibling:",k,"to div."),k=this._setNodeTag(k,"DIV")),O.appendChild(k),I=E.children,w-=1,P-=1)}if(this._debug&&this.log("Article content pre-prep: "+O.innerHTML),this._prepArticle(O),this._debug&&this.log("Article content post-prep: "+O.innerHTML),v)y.id="readability-page-1",y.className="page";else{var $=t.createElement("DIV");for($.id="readability-page-1",$.className="page";O.firstChild;)$.appendChild(O.firstChild);O.appendChild($)}this._debug&&this.log("Article content after paging: "+O.innerHTML);var j=!0,F=this._getInnerText(O,!0).length;if(F0&&e.length<100)},_unescapeHtmlEntities:function(e){if(!e)return e;var t=this.HTML_ESCAPE_MAP;return e.replace(/&(quot|amp|apos|lt|gt);/g,(function(e,i){return t[i]})).replace(/&#(?:x([0-9a-z]{1,4})|([0-9]{1,4}));/gi,(function(e,t,i){var n=parseInt(t||i,t?16:10);return String.fromCharCode(n)}))},_getJSONLD:function(e){var t,i=this._getAllNodesWithTag(e,["script"]);return this._forEachNode(i,(function(e){if(!t&&"application/ld+json"===e.getAttribute("type"))try{var i=e.textContent.replace(/^\s*\s*$/g,""),n=JSON.parse(i);if(!n["@context"]||!n["@context"].match(/^https?\:\/\/schema\.org$/))return;if(!n["@type"]&&Array.isArray(n["@graph"])&&(n=n["@graph"].find((function(e){return(e["@type"]||"").match(this.REGEXPS.jsonLdArticleTypes)}))),!n||!n["@type"]||!n["@type"].match(this.REGEXPS.jsonLdArticleTypes))return;if(t={},"string"==typeof n.name&&"string"==typeof n.headline&&n.name!==n.headline){var r=this._getArticleTitle(),a=this._textSimilarity(n.name,r)>.75,s=this._textSimilarity(n.headline,r)>.75;t.title=s&&!a?n.headline:n.name}else"string"==typeof n.name?t.title=n.name.trim():"string"==typeof n.headline&&(t.title=n.headline.trim());return n.author&&("string"==typeof n.author.name?t.byline=n.author.name.trim():Array.isArray(n.author)&&n.author[0]&&"string"==typeof n.author[0].name&&(t.byline=n.author.filter((function(e){return e&&"string"==typeof e.name})).map((function(e){return e.name.trim()})).join(", "))),"string"==typeof n.description&&(t.excerpt=n.description.trim()),n.publisher&&"string"==typeof n.publisher.name&&(t.siteName=n.publisher.name.trim()),void("string"==typeof n.datePublished&&(t.datePublished=n.datePublished.trim()))}catch(e){this.log(e.message)}})),t||{}},_getArticleMetadata:function(e){var t={},i={},n=this._doc.getElementsByTagName("meta"),r=/\s*(article|dc|dcterm|og|twitter)\s*:\s*(author|creator|description|published_time|title|site_name)\s*/gi,a=/^\s*(?:(dc|dcterm|og|twitter|weibo:(article|webpage))\s*[\.:]\s*)?(author|creator|description|title|site_name)\s*$/i;return this._forEachNode(n,(function(e){var t=e.getAttribute("name"),n=e.getAttribute("property"),s=e.getAttribute("content");if(s){var o=null,l=null;n&&(o=n.match(r))&&(l=o[0].toLowerCase().replace(/\s/g,""),i[l]=s.trim()),!o&&t&&a.test(t)&&(l=t,s&&(l=l.toLowerCase().replace(/\s/g,"").replace(/\./g,":"),i[l]=s.trim()))}})),t.title=e.title||i["dc:title"]||i["dcterm:title"]||i["og:title"]||i["weibo:article:title"]||i["weibo:webpage:title"]||i.title||i["twitter:title"],t.title||(t.title=this._getArticleTitle()),t.byline=e.byline||i["dc:creator"]||i["dcterm:creator"]||i.author,t.excerpt=e.excerpt||i["dc:description"]||i["dcterm:description"]||i["og:description"]||i["weibo:article:description"]||i["weibo:webpage:description"]||i.description||i["twitter:description"],t.siteName=e.siteName||i["og:site_name"],t.publishedTime=e.datePublished||i["article:published_time"]||null,t.title=this._unescapeHtmlEntities(t.title),t.byline=this._unescapeHtmlEntities(t.byline),t.excerpt=this._unescapeHtmlEntities(t.excerpt),t.siteName=this._unescapeHtmlEntities(t.siteName),t.publishedTime=this._unescapeHtmlEntities(t.publishedTime),t},_isSingleImage:function(e){return"IMG"===e.tagName||1===e.children.length&&""===e.textContent.trim()&&this._isSingleImage(e.children[0])},_unwrapNoscriptImages:function(e){var t=Array.from(e.getElementsByTagName("img"));this._forEachNode(t,(function(e){for(var t=0;t0&&r>i)return!1;if(e.parentNode.tagName===t&&(!n||n(e.parentNode)))return!0;e=e.parentNode,r++}return!1},_getRowAndColumnCount:function(e){for(var t=0,i=0,n=e.getElementsByTagName("tr"),r=0;r0)n._readabilityDataTable=!0;else{if(["col","colgroup","tfoot","thead","th"].some((function(e){return!!n.getElementsByTagName(e)[0]})))this.log("Data table because found data-y descendant"),n._readabilityDataTable=!0;else if(n.getElementsByTagName("table")[0])n._readabilityDataTable=!1;else{var a=this._getRowAndColumnCount(n);a.rows>=10||a.columns>4?n._readabilityDataTable=!0:n._readabilityDataTable=a.rows*a.columns>10}}}else n._readabilityDataTable=!1;else n._readabilityDataTable=!1}},_fixLazyImages:function(e){this._forEachNode(this._getAllNodesWithTag(e,["img","picture","figure"]),(function(e){if(e.src&&this.REGEXPS.b64DataUrl.test(e.src)){if("image/svg+xml"===this.REGEXPS.b64DataUrl.exec(e.src)[1])return;for(var t=!1,i=0;in+=this._getInnerText(e,!0).length)),n/i},_cleanConditionally:function(e,t){this._flagIsActive(this.FLAG_CLEAN_CONDITIONALLY)&&this._removeNodes(this._getAllNodesWithTag(e,[t]),(function(e){var i=function(e){return e._readabilityDataTable},n="ul"===t||"ol"===t;if(!n){var r=0,a=this._getAllNodesWithTag(e,["ul","ol"]);this._forEachNode(a,(e=>r+=this._getInnerText(e).length)),n=r/this._getInnerText(e).length>.9}if("table"===t&&i(e))return!1;if(this._hasAncestorTag(e,"table",-1,i))return!1;if(this._hasAncestorTag(e,"code"))return!1;var s=this._getClassWeight(e);this.log("Cleaning Conditionally",e);if(s+0<0)return!0;if(this._getCharCount(e,",")<10){for(var o=e.getElementsByTagName("p").length,l=e.getElementsByTagName("img").length,c=e.getElementsByTagName("li").length-100,h=e.getElementsByTagName("input").length,d=this._getTextDensity(e,["h1","h2","h3","h4","h5","h6"]),u=0,g=this._getAllNodesWithTag(e,["object","embed","iframe"]),f=0;f1&&o/l<.5&&!this._hasAncestorTag(e,"figure")||!n&&c>o||h>Math.floor(o/3)||!n&&d<.9&&_<25&&(0===l||l>2)&&!this._hasAncestorTag(e,"figure")||!n&&s<25&&m>.2||s>=25&&m>.5||1===u&&_<75||u>1;if(n&&b){for(var N=0;N1)return b}if(l==e.getElementsByTagName("li").length)return!1}return b}return!1}))},_cleanMatchedNodes:function(e,t){for(var i=this._getNextNode(e,!0),n=this._getNextNode(e);n&&n!=i;)n=t.call(this,n,n.className+" "+n.id)?this._removeAndGetNext(n):this._getNextNode(n)},_cleanHeaders:function(e){let t=this._getAllNodesWithTag(e,["h1","h2"]);this._removeNodes(t,(function(e){let t=this._getClassWeight(e)<0;return t&&this.log("Removing header with low class weight:",e),t}))},_headerDuplicatesTitle:function(e){if("H1"!=e.tagName&&"H2"!=e.tagName)return!1;var t=this._getInnerText(e,!1);return this.log("Evaluating similarity of header:",t,this._articleTitle),this._textSimilarity(this._articleTitle,t)>.75},_flagIsActive:function(e){return(this._flags&e)>0},_removeFlag:function(e){this._flags=this._flags&~e},_isProbablyVisible:function(e){return(!e.style||"none"!=e.style.display)&&(!e.style||"hidden"!=e.style.visibility)&&!e.hasAttribute("hidden")&&(!e.hasAttribute("aria-hidden")||"true"!=e.getAttribute("aria-hidden")||e.className&&e.className.indexOf&&-1!==e.className.indexOf("fallback-image"))},parse:function(){if(this._maxElemsToParse>0){var e=this._doc.getElementsByTagName("*").length;if(e>this._maxElemsToParse)throw new Error("Aborting parsing document; "+e+" elements found")}this._unwrapNoscriptImages(this._doc);var t=this._disableJSONLD?{}:this._getJSONLD(this._doc);this._removeScripts(this._doc),this._prepDocument();var i=this._getArticleMetadata(t);this._articleTitle=i.title;var n=this._grabArticle();if(!n)return null;if(this.log("Grabbed: "+n.innerHTML),this._postProcessContent(n),!i.excerpt){var r=n.getElementsByTagName("p");r.length>0&&(i.excerpt=r[0].textContent.trim())}var a=n.textContent;return{title:this._articleTitle,byline:i.byline||this._articleByline,dir:this._articleDir,lang:this._articleLang,content:this._serializer(n),textContent:a,length:a.length,excerpt:i.excerpt,siteName:i.siteName||this._articleSiteName,publishedTime:i.publishedTime}}},e.exports=t},396:(e,t,i)=>{var n=i(238),r=i(804);e.exports={Readability:n,isProbablyReaderable:r}},481:e=>{e.exports=function(e,t){(t=t||{}).listUnicodeChar=!!t.hasOwnProperty("listUnicodeChar")&&t.listUnicodeChar,t.stripListLeaders=!t.hasOwnProperty("stripListLeaders")||t.stripListLeaders,t.gfm=!t.hasOwnProperty("gfm")||t.gfm,t.useImgAltText=!t.hasOwnProperty("useImgAltText")||t.useImgAltText,t.abbr=!!t.hasOwnProperty("abbr")&&t.abbr,t.replaceLinksWithURL=!!t.hasOwnProperty("replaceLinksWithURL")&&t.replaceLinksWithURL,t.htmlTagsToSkip=t.hasOwnProperty("htmlTagsToSkip")?t.htmlTagsToSkip:[],t.throwError=!!t.hasOwnProperty("throwError")&&t.throwError;var i=e||"";i=i.replace(/^(-\s*?|\*\s*?|_\s*?){3,}\s*/gm,"");try{t.stripListLeaders&&(i=t.listUnicodeChar?i.replace(/^([\s\t]*)([\*\-\+]|\d+\.)\s+/gm,t.listUnicodeChar+" $1"):i.replace(/^([\s\t]*)([\*\-\+]|\d+\.)\s+/gm,"$1")),t.gfm&&(i=i.replace(/\n={2,}/g,"\n").replace(/~{3}.*\n/g,"").replace(/~~/g,"").replace(/`{3}.*\n/g,"")),t.abbr&&(i=i.replace(/\*\[.*\]:.*\n/,"")),i=i.replace(/<[^>]*>/g,"");var n=new RegExp("<[^>]*>","g");if(t.htmlTagsToSkip.length>0){var r="(?!"+t.htmlTagsToSkip.join("|")+")";n=new RegExp("<"+r+"[^>]*>","ig")}i=i.replace(n,"").replace(/^[=\-]{2,}\s*$/g,"").replace(/\[\^.+?\](\: .*?$)?/g,"").replace(/\s{0,2}\[.*?\]: .*?$/g,"").replace(/\!\[(.*?)\][\[\(].*?[\]\)]/g,t.useImgAltText?"$1":"").replace(/\[([^\]]*?)\][\[\(].*?[\]\)]/g,t.replaceLinksWithURL?"$2":"$1").replace(/^(\n)?\s{0,3}>\s?/gm,"$1").replace(/^\s{1,2}\[(.*?)\]: (\S+)( ".*?")?\s*$/g,"").replace(/^(\n)?\s{0,}#{1,6}\s*( (.+))? +#+$|^(\n)?\s{0,}#{1,6}\s*( (.+))?$/gm,"$1$3$4$6").replace(/([\*]+)(\S)(.*?\S)??\1/g,"$2$3").replace(/(^|\W)([_]+)(\S)(.*?\S)??\2($|\W)/g,"$1$3$4$5").replace(/(`{3,})(.*?)\1/gm,"$2").replace(/`(.+?)`/g,"$1").replace(/~(.*?)~/g,"$1")}catch(i){if(t.throwError)throw i;return console.error("remove-markdown encountered error: %s",i),e}return i}}},t={};function i(n){var r=t[n];if(void 0!==r)return r.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,i),a.exports}i.d=(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};return(()=>{"use strict";i.r(n),i.d(n,{parseReaderable:()=>$});var e=i(396);function t(e,t){return Array(t+1).join(e)}var r=["ADDRESS","ARTICLE","ASIDE","AUDIO","BLOCKQUOTE","BODY","CANVAS","CENTER","DD","DIR","DIV","DL","DT","FIELDSET","FIGCAPTION","FIGURE","FOOTER","FORM","FRAMESET","H1","H2","H3","H4","H5","H6","HEADER","HGROUP","HR","HTML","ISINDEX","LI","MAIN","MENU","NAV","NOFRAMES","NOSCRIPT","OL","OUTPUT","P","PRE","SECTION","TABLE","TBODY","TD","TFOOT","TH","THEAD","TR","UL"];function a(e){return c(e,r)}var s=["AREA","BASE","BR","COL","COMMAND","EMBED","HR","IMG","INPUT","KEYGEN","LINK","META","PARAM","SOURCE","TRACK","WBR"];function o(e){return c(e,s)}var l=["A","TABLE","THEAD","TBODY","TFOOT","TH","TD","IFRAME","SCRIPT","AUDIO","VIDEO"];function c(e,t){return t.indexOf(e.nodeName)>=0}function h(e,t){return e.getElementsByTagName&&t.some((function(t){return e.getElementsByTagName(t).length}))}var d={};function u(e){return e?e.replace(/(\n+\s*)+/g,"\n"):""}function g(e){for(var t in this.options=e,this._keep=[],this._remove=[],this.blankRule={replacement:e.blankReplacement},this.keepReplacement=e.keepReplacement,this.defaultRule={replacement:e.defaultReplacement},this.array=[],e.rules)this.array.push(e.rules[t])}function f(e,t,i){for(var n=0;n-1)return!0}else{if("function"!=typeof n)throw new TypeError("`filter` needs to be a string, array, or function");if(n.call(e,t,i))return!0}}function m(e){var t=e.nextSibling||e.parentNode;return e.parentNode.removeChild(e),t}function _(e,t,i){return e&&e.parentNode===t||i(t)?t.nextSibling||t.parentNode:t.firstChild||t.nextSibling||t.parentNode}d.paragraph={filter:"p",replacement:function(e){return"\n\n"+e+"\n\n"}},d.lineBreak={filter:"br",replacement:function(e,t,i){return i.br+"\n"}},d.heading={filter:["h1","h2","h3","h4","h5","h6"],replacement:function(e,i,n){var r=Number(i.nodeName.charAt(1));return"setext"===n.headingStyle&&r<3?"\n\n"+e+"\n"+t(1===r?"=":"-",e.length)+"\n\n":"\n\n"+t("#",r)+" "+e+"\n\n"}},d.blockquote={filter:"blockquote",replacement:function(e){return"\n\n"+(e=(e=e.replace(/^\n+|\n+$/g,"")).replace(/^/gm,"> "))+"\n\n"}},d.list={filter:["ul","ol"],replacement:function(e,t){var i=t.parentNode;return"LI"===i.nodeName&&i.lastElementChild===t?"\n"+e:"\n\n"+e+"\n\n"}},d.listItem={filter:"li",replacement:function(e,t,i){e=e.replace(/^\n+/,"").replace(/\n+$/,"\n").replace(/\n/gm,"\n ");var n=i.bulletListMarker+" ",r=t.parentNode;if("OL"===r.nodeName){var a=r.getAttribute("start"),s=Array.prototype.indexOf.call(r.children,t);n=(a?Number(a)+s:s+1)+". "}return n+e+(t.nextSibling&&!/\n$/.test(e)?"\n":"")}},d.indentedCodeBlock={filter:function(e,t){return"indented"===t.codeBlockStyle&&"PRE"===e.nodeName&&e.firstChild&&"CODE"===e.firstChild.nodeName},replacement:function(e,t,i){return"\n\n "+t.firstChild.textContent.replace(/\n/g,"\n ")+"\n\n"}},d.fencedCodeBlock={filter:function(e,t){return"fenced"===t.codeBlockStyle&&"PRE"===e.nodeName&&e.firstChild&&"CODE"===e.firstChild.nodeName},replacement:function(e,i,n){for(var r,a=((i.firstChild.getAttribute("class")||"").match(/language-(\S+)/)||[null,""])[1],s=i.firstChild.textContent,o=n.fence.charAt(0),l=3,c=new RegExp("^"+o+"{3,}","gm");r=c.exec(s);)r[0].length>=l&&(l=r[0].length+1);var h=t(o,l);return"\n\n"+h+a+"\n"+s.replace(/\n$/,"")+"\n"+h+"\n\n"}},d.horizontalRule={filter:"hr",replacement:function(e,t,i){return"\n\n"+i.hr+"\n\n"}},d.inlineLink={filter:function(e,t){return"inlined"===t.linkStyle&&"A"===e.nodeName&&e.getAttribute("href")},replacement:function(e,t){var i=t.getAttribute("href");i&&(i=i.replace(/([()])/g,"\\$1"));var n=u(t.getAttribute("title"));return n&&(n=' "'+n.replace(/"/g,'\\"')+'"'),"["+e+"]("+i+n+")"}},d.referenceLink={filter:function(e,t){return"referenced"===t.linkStyle&&"A"===e.nodeName&&e.getAttribute("href")},replacement:function(e,t,i){var n,r,a=t.getAttribute("href"),s=u(t.getAttribute("title"));switch(s&&(s=' "'+s+'"'),i.linkReferenceStyle){case"collapsed":n="["+e+"][]",r="["+e+"]: "+a+s;break;case"shortcut":n="["+e+"]",r="["+e+"]: "+a+s;break;default:var o=this.references.length+1;n="["+e+"]["+o+"]",r="["+o+"]: "+a+s}return this.references.push(r),n},references:[],append:function(e){var t="";return this.references.length&&(t="\n\n"+this.references.join("\n")+"\n\n",this.references=[]),t}},d.emphasis={filter:["em","i"],replacement:function(e,t,i){return e.trim()?i.emDelimiter+e+i.emDelimiter:""}},d.strong={filter:["strong","b"],replacement:function(e,t,i){return e.trim()?i.strongDelimiter+e+i.strongDelimiter:""}},d.code={filter:function(e){var t=e.previousSibling||e.nextSibling,i="PRE"===e.parentNode.nodeName&&!t;return"CODE"===e.nodeName&&!i},replacement:function(e){if(!e)return"";e=e.replace(/\r?\n|\r/g," ");for(var t=/^`|^ .*?[^ ].* $|`$/.test(e)?" ":"",i="`",n=e.match(/`+/gm)||[];-1!==n.indexOf(i);)i+="`";return i+t+e+t+i}},d.image={filter:"img",replacement:function(e,t){var i=u(t.getAttribute("alt")),n=t.getAttribute("src")||"",r=u(t.getAttribute("title"));return n?"!["+i+"]("+n+(r?' "'+r+'"':"")+")":""}},g.prototype={add:function(e,t){this.array.unshift(t)},keep:function(e){this._keep.unshift({filter:e,replacement:this.keepReplacement})},remove:function(e){this._remove.unshift({filter:e,replacement:function(){return""}})},forNode:function(e){return e.isBlank?this.blankRule:(t=f(this.array,e,this.options))||(t=f(this._keep,e,this.options))||(t=f(this._remove,e,this.options))?t:this.defaultRule;var t},forEach:function(e){for(var t=0;t'+e+"","text/html").getElementById("turndown-root"):i=e.cloneNode(!0);return function(e){var t=e.element,i=e.isBlock,n=e.isVoid,r=e.isPre||function(e){return"PRE"===e.nodeName};if(t.firstChild&&!r(t)){for(var a=null,s=!1,o=null,l=_(o,t,r);l!==t;){if(3===l.nodeType||4===l.nodeType){var c=l.data.replace(/[ \r\n\t]+/g," ");if(a&&!/ $/.test(a.data)||s||" "!==c[0]||(c=c.substr(1)),!c){l=m(l);continue}l.data=c,a=l}else{if(1!==l.nodeType){l=m(l);continue}i(l)||"BR"===l.nodeName?(a&&(a.data=a.data.replace(/ $/,"")),a=null,s=!1):n(l)||r(l)?(a=null,s=!0):a&&(s=!1)}var h=_(o,l,r);o=l,l=h}a&&(a.data=a.data.replace(/ $/,""),a.data||m(a))}}({element:i,isBlock:a,isVoid:o,isPre:t.preformattedCode?T:null}),i}function T(e){return"PRE"===e.nodeName||"CODE"===e.nodeName}function A(e,t){return e.isBlock=a(e),e.isCode="CODE"===e.nodeName||e.parentNode.isCode,e.isBlank=function(e){return!o(e)&&!function(e){return c(e,l)}(e)&&/^\s*$/i.test(e.textContent)&&!function(e){return h(e,s)}(e)&&!function(e){return h(e,l)}(e)}(e),e.flankingWhitespace=function(e,t){if(e.isBlock||t.preformattedCode&&e.isCode)return{leading:"",trailing:""};var i=(n=e.textContent,r=n.match(/^(([ \t\r\n]*)(\s*))(?:(?=\S)[\s\S]*\S)?((\s*?)([ \t\r\n]*))$/),{leading:r[1],leadingAscii:r[2],leadingNonAscii:r[3],trailing:r[4],trailingNonAscii:r[5],trailingAscii:r[6]});var n,r;i.leadingAscii&&S("left",e,t)&&(i.leading=i.leadingNonAscii);i.trailingAscii&&S("right",e,t)&&(i.trailing=i.trailingNonAscii);return{leading:i.leading,trailing:i.trailing}}(e,t),e}function S(e,t,i){var n,r,s;return"left"===e?(n=t.previousSibling,r=/ $/):(n=t.nextSibling,r=/^ /),n&&(3===n.nodeType?s=r.test(n.nodeValue):i.preformattedCode&&"CODE"===n.nodeName?s=!1:1!==n.nodeType||a(n)||(s=r.test(n.textContent))),s}var C=Array.prototype.reduce,L=[[/\\/g,"\\\\"],[/\*/g,"\\*"],[/^-/g,"\\-"],[/^\+ /g,"\\+ "],[/^(=+)/g,"\\$1"],[/^(#{1,6}) /g,"\\$1 "],[/`/g,"\\`"],[/^~~~/g,"\\~~~"],[/\[/g,"\\["],[/\]/g,"\\]"],[/^>/g,"\\>"],[/_/g,"\\_"],[/^(\d+)\. /g,"$1\\. "]];function x(e){if(!(this instanceof x))return new x(e);var t={rules:d,headingStyle:"setext",hr:"* * *",bulletListMarker:"*",codeBlockStyle:"indented",fence:"```",emDelimiter:"_",strongDelimiter:"**",linkStyle:"inlined",linkReferenceStyle:"full",br:" ",preformattedCode:!1,blankReplacement:function(e,t){return t.isBlock?"\n\n":""},keepReplacement:function(e,t){return t.isBlock?"\n\n"+t.outerHTML+"\n\n":t.outerHTML},defaultReplacement:function(e,t){return t.isBlock?"\n\n"+e+"\n\n":e}};this.options=function(e){for(var t=1;t0&&"\n"===e[t-1];)t--;return e.substring(0,t)}(e),n=t.replace(/^\n*/,""),r=Math.max(e.length-i.length,t.length-n.length);return i+"\n\n".substring(0,r)+n}x.prototype={turndown:function(e){if(!function(e){return null!=e&&("string"==typeof e||e.nodeType&&(1===e.nodeType||9===e.nodeType||11===e.nodeType))}(e))throw new TypeError(e+" is not a string, or an element/document/fragment node.");if(""===e)return"";var t=R.call(this,new v(e,this.options));return O.call(this,t)},use:function(e){if(Array.isArray(e))for(var t=0;t(()=>{var e={804:e=>{var t={unlikelyCandidates:/-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,okMaybeItsACandidate:/and|article|body|column|content|main|shadow/i};function i(e){return(!e.style||"none"!=e.style.display)&&!e.hasAttribute("hidden")&&(!e.hasAttribute("aria-hidden")||"true"!=e.getAttribute("aria-hidden")||e.className&&e.className.indexOf&&-1!==e.className.indexOf("fallback-image"))}e.exports=function(e,n={}){"function"==typeof n&&(n={visibilityChecker:n});var r={minScore:20,minContentLength:140,visibilityChecker:i};n=Object.assign(r,n);var a=e.querySelectorAll("p, pre, article"),s=e.querySelectorAll("div > br");if(s.length){var o=new Set(a);[].forEach.call(s,(function(e){o.add(e.parentNode)})),a=Array.from(o)}var l=0;return[].some.call(a,(function(e){if(!n.visibilityChecker(e))return!1;var i=e.className+" "+e.id;if(t.unlikelyCandidates.test(i)&&!t.okMaybeItsACandidate.test(i))return!1;if(e.matches("li p"))return!1;var r=e.textContent.trim().length;return!(rn.minScore}))}},238:e=>{function t(e,t){if(t&&t.documentElement)e=t,t=arguments[2];else if(!e||!e.documentElement)throw new Error("First argument to Readability constructor should be a document object.");if(t=t||{},this._doc=e,this._docJSDOMParser=this._doc.firstChild.__JSDOMParser__,this._articleTitle=null,this._articleByline=null,this._articleDir=null,this._articleSiteName=null,this._attempts=[],this._debug=!!t.debug,this._maxElemsToParse=t.maxElemsToParse||this.DEFAULT_MAX_ELEMS_TO_PARSE,this._nbTopCandidates=t.nbTopCandidates||this.DEFAULT_N_TOP_CANDIDATES,this._charThreshold=t.charThreshold||this.DEFAULT_CHAR_THRESHOLD,this._classesToPreserve=this.CLASSES_TO_PRESERVE.concat(t.classesToPreserve||[]),this._keepClasses=!!t.keepClasses,this._serializer=t.serializer||function(e){return e.innerHTML},this._disableJSONLD=!!t.disableJSONLD,this._allowedVideoRegex=t.allowedVideoRegex||this.REGEXPS.videos,this._flags=this.FLAG_STRIP_UNLIKELYS|this.FLAG_WEIGHT_CLASSES|this.FLAG_CLEAN_CONDITIONALLY,this._debug){let e=function(e){if(e.nodeType==e.TEXT_NODE)return`${e.nodeName} ("${e.textContent}")`;let t=Array.from(e.attributes||[],(function(e){return`${e.name}="${e.value}"`})).join(" ");return`<${e.localName} ${t}>`};this.log=function(){if("undefined"!=typeof console){let t=Array.from(arguments,(t=>t&&t.nodeType==this.ELEMENT_NODE?e(t):t));t.unshift("Reader: (Readability)"),console.log.apply(console,t)}else if("undefined"!=typeof dump){var t=Array.prototype.map.call(arguments,(function(t){return t&&t.nodeName?e(t):t})).join(" ");dump("Reader: (Readability) "+t+"\n")}}}else this.log=function(){}}t.prototype={FLAG_STRIP_UNLIKELYS:1,FLAG_WEIGHT_CLASSES:2,FLAG_CLEAN_CONDITIONALLY:4,ELEMENT_NODE:1,TEXT_NODE:3,DEFAULT_MAX_ELEMS_TO_PARSE:0,DEFAULT_N_TOP_CANDIDATES:5,DEFAULT_TAGS_TO_SCORE:"section,h2,h3,h4,h5,h6,p,td,pre".toUpperCase().split(","),DEFAULT_CHAR_THRESHOLD:500,REGEXPS:{unlikelyCandidates:/-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i,okMaybeItsACandidate:/and|article|body|column|content|main|shadow/i,positive:/article|body|content|entry|hentry|h-entry|main|page|pagination|post|text|blog|story/i,negative:/-ad-|hidden|^hid$| hid$| hid |^hid |banner|combx|comment|com-|contact|foot|footer|footnote|gdpr|masthead|media|meta|outbrain|promo|related|scroll|share|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|tool|widget/i,extraneous:/print|archive|comment|discuss|e[\-]?mail|share|reply|all|login|sign|single|utility/i,byline:/byline|author|dateline|writtenby|p-author/i,replaceFonts:/<(\/?)font[^>]*>/gi,normalize:/\s{2,}/g,videos:/\/\/(www\.)?((dailymotion|youtube|youtube-nocookie|player\.vimeo|v\.qq)\.com|(archive|upload\.wikimedia)\.org|player\.twitch\.tv)/i,shareElements:/(\b|_)(share|sharedaddy)(\b|_)/i,nextLink:/(next|weiter|continue|>([^\|]|$)|ยป([^\|]|$))/i,prevLink:/(prev|earl|old|new|<|ยซ)/i,tokenize:/\W+/g,whitespace:/^\s*$/,hasContent:/\S$/,hashUrl:/^#.+/,srcsetUrl:/(\S+)(\s+[\d.]+[xw])?(\s*(?:,|$))/g,b64DataUrl:/^data:\s*([^\s;,]+)\s*;\s*base64\s*,/i,commas:/\u002C|\u060C|\uFE50|\uFE10|\uFE11|\u2E41|\u2E34|\u2E32|\uFF0C/g,jsonLdArticleTypes:/^Article|AdvertiserContentArticle|NewsArticle|AnalysisNewsArticle|AskPublicNewsArticle|BackgroundNewsArticle|OpinionNewsArticle|ReportageNewsArticle|ReviewNewsArticle|Report|SatiricalArticle|ScholarlyArticle|MedicalScholarlyArticle|SocialMediaPosting|BlogPosting|LiveBlogPosting|DiscussionForumPosting|TechArticle|APIReference$/},UNLIKELY_ROLES:["menu","menubar","complementary","navigation","alert","alertdialog","dialog"],DIV_TO_P_ELEMS:new Set(["BLOCKQUOTE","DL","DIV","IMG","OL","P","PRE","TABLE","UL"]),ALTER_TO_DIV_EXCEPTIONS:["DIV","ARTICLE","SECTION","P"],PRESENTATIONAL_ATTRIBUTES:["align","background","bgcolor","border","cellpadding","cellspacing","frame","hspace","rules","style","valign","vspace"],DEPRECATED_SIZE_ATTRIBUTE_ELEMS:["TABLE","TH","TD","HR","PRE"],PHRASING_ELEMS:["ABBR","AUDIO","B","BDO","BR","BUTTON","CITE","CODE","DATA","DATALIST","DFN","EM","EMBED","I","IMG","INPUT","KBD","LABEL","MARK","MATH","METER","NOSCRIPT","OBJECT","OUTPUT","PROGRESS","Q","RUBY","SAMP","SCRIPT","SELECT","SMALL","SPAN","STRONG","SUB","SUP","TEXTAREA","TIME","VAR","WBR"],CLASSES_TO_PRESERVE:["page"],HTML_ESCAPE_MAP:{lt:"<",gt:">",amp:"&",quot:'"',apos:"'"},_postProcessContent:function(e){this._fixRelativeUris(e),this._simplifyNestedElements(e),this._keepClasses||this._cleanClasses(e)},_removeNodes:function(e,t){if(this._docJSDOMParser&&e._isLiveNodeList)throw new Error("Do not pass live node lists to _removeNodes");for(var i=e.length-1;i>=0;i--){var n=e[i],r=n.parentNode;r&&(t&&!t.call(this,n,i,e)||r.removeChild(n))}},_replaceNodeTags:function(e,t){if(this._docJSDOMParser&&e._isLiveNodeList)throw new Error("Do not pass live node lists to _replaceNodeTags");for(const i of e)this._setNodeTag(i,t)},_forEachNode:function(e,t){Array.prototype.forEach.call(e,t,this)},_findNode:function(e,t){return Array.prototype.find.call(e,t,this)},_someNode:function(e,t){return Array.prototype.some.call(e,t,this)},_everyNode:function(e,t){return Array.prototype.every.call(e,t,this)},_concatNodeLists:function(){var e=Array.prototype.slice,t=e.call(arguments).map((function(t){return e.call(t)}));return Array.prototype.concat.apply([],t)},_getAllNodesWithTag:function(e,t){return e.querySelectorAll?e.querySelectorAll(t.join(",")):[].concat.apply([],t.map((function(t){var i=e.getElementsByTagName(t);return Array.isArray(i)?i:Array.from(i)})))},_cleanClasses:function(e){var t=this._classesToPreserve,i=(e.getAttribute("class")||"").split(/\s+/).filter((function(e){return-1!=t.indexOf(e)})).join(" ");for(i?e.setAttribute("class",i):e.removeAttribute("class"),e=e.firstElementChild;e;e=e.nextElementSibling)this._cleanClasses(e)},_fixRelativeUris:function(e){var t=this._doc.baseURI,i=this._doc.documentURI;function n(e){if(t==i&&"#"==e.charAt(0))return e;try{return new URL(e,t).href}catch(e){}return e}var r=this._getAllNodesWithTag(e,["a"]);this._forEachNode(r,(function(e){var t=e.getAttribute("href");if(t)if(0===t.indexOf("javascript:"))if(1===e.childNodes.length&&e.childNodes[0].nodeType===this.TEXT_NODE){var i=this._doc.createTextNode(e.textContent);e.parentNode.replaceChild(i,e)}else{for(var r=this._doc.createElement("span");e.firstChild;)r.appendChild(e.firstChild);e.parentNode.replaceChild(r,e)}else e.setAttribute("href",n(t))}));var a=this._getAllNodesWithTag(e,["img","picture","figure","video","audio","source"]);this._forEachNode(a,(function(e){var t=e.getAttribute("src"),i=e.getAttribute("poster"),r=e.getAttribute("srcset");if(t&&e.setAttribute("src",n(t)),i&&e.setAttribute("poster",n(i)),r){var a=r.replace(this.REGEXPS.srcsetUrl,(function(e,t,i,r){return n(t)+(i||"")+r}));e.setAttribute("srcset",a)}}))},_simplifyNestedElements:function(e){for(var t=e;t;){if(t.parentNode&&["DIV","SECTION"].includes(t.tagName)&&(!t.id||!t.id.startsWith("readability"))){if(this._isElementWithoutContent(t)){t=this._removeAndGetNext(t);continue}if(this._hasSingleTagInsideElement(t,"DIV")||this._hasSingleTagInsideElement(t,"SECTION")){for(var i=t.children[0],n=0;nยป] /.test(t))n=/ [\\\/>ยป] /.test(t),r(t=i.replace(/(.*)[\|\-\\\/>ยป] .*/gi,"$1"))<3&&(t=i.replace(/[^\|\-\\\/>ยป]*[\|\-\\\/>ยป](.*)/gi,"$1"));else if(-1!==t.indexOf(": ")){var a=this._concatNodeLists(e.getElementsByTagName("h1"),e.getElementsByTagName("h2")),s=t.trim();this._someNode(a,(function(e){return e.textContent.trim()===s}))||(r(t=i.substring(i.lastIndexOf(":")+1))<3?t=i.substring(i.indexOf(":")+1):r(i.substr(0,i.indexOf(":")))>5&&(t=i))}else if(t.length>150||t.length<15){var o=e.getElementsByTagName("h1");1===o.length&&(t=this._getInnerText(o[0]))}var l=r(t=t.trim().replace(this.REGEXPS.normalize," "));return l<=4&&(!n||l!=r(i.replace(/[\|\-\\\/>ยป]+/g,""))-1)&&(t=i),t},_prepDocument:function(){var e=this._doc;this._removeNodes(this._getAllNodesWithTag(e,["style"])),e.body&&this._replaceBrs(e.body),this._replaceNodeTags(this._getAllNodesWithTag(e,["font"]),"SPAN")},_nextNode:function(e){for(var t=e;t&&t.nodeType!=this.ELEMENT_NODE&&this.REGEXPS.whitespace.test(t.textContent);)t=t.nextSibling;return t},_replaceBrs:function(e){this._forEachNode(this._getAllNodesWithTag(e,["br"]),(function(e){for(var t=e.nextSibling,i=!1;(t=this._nextNode(t))&&"BR"==t.tagName;){i=!0;var n=t.nextSibling;t.parentNode.removeChild(t),t=n}if(i){var r=this._doc.createElement("p");for(e.parentNode.replaceChild(r,e),t=r.nextSibling;t;){if("BR"==t.tagName){var a=this._nextNode(t.nextSibling);if(a&&"BR"==a.tagName)break}if(!this._isPhrasingContent(t))break;var s=t.nextSibling;r.appendChild(t),t=s}for(;r.lastChild&&this._isWhitespace(r.lastChild);)r.removeChild(r.lastChild);"P"===r.parentNode.tagName&&this._setNodeTag(r.parentNode,"DIV")}}))},_setNodeTag:function(e,t){if(this.log("_setNodeTag",e,t),this._docJSDOMParser)return e.localName=t.toLowerCase(),e.tagName=t.toUpperCase(),e;for(var i=e.ownerDocument.createElement(t);e.firstChild;)i.appendChild(e.firstChild);e.parentNode.replaceChild(i,e),e.readability&&(i.readability=e.readability);for(var n=0;n!i.includes(e))).join(" ").length/n.join(" ").length:0},_checkByline:function(e,t){if(this._articleByline)return!1;if(void 0!==e.getAttribute)var i=e.getAttribute("rel"),n=e.getAttribute("itemprop");return!(!("author"===i||n&&-1!==n.indexOf("author")||this.REGEXPS.byline.test(t))||!this._isValidByline(e.textContent))&&(this._articleByline=e.textContent.trim(),!0)},_getNodeAncestors:function(e,t){t=t||0;for(var i=0,n=[];e.parentNode&&(n.push(e.parentNode),!t||++i!==t);)e=e.parentNode;return n},_grabArticle:function(e){this.log("**** grabArticle ****");var t=this._doc,i=null!==e;if(!(e=e||this._doc.body))return this.log("No body found in document. Abort."),null;for(var n=e.innerHTML;;){this.log("Starting grabArticle loop");var r=this._flagIsActive(this.FLAG_STRIP_UNLIKELYS),a=[],s=this._doc.documentElement;let V=!0;for(;s;){"HTML"===s.tagName&&(this._articleLang=s.getAttribute("lang"));var o=s.className+" "+s.id;if(this._isProbablyVisible(s))if("true"!=s.getAttribute("aria-modal")||"dialog"!=s.getAttribute("role"))if(this._checkByline(s,o))s=this._removeAndGetNext(s);else if(V&&this._headerDuplicatesTitle(s))this.log("Removing header: ",s.textContent.trim(),this._articleTitle.trim()),V=!1,s=this._removeAndGetNext(s);else{if(r){if(this.REGEXPS.unlikelyCandidates.test(o)&&!this.REGEXPS.okMaybeItsACandidate.test(o)&&!this._hasAncestorTag(s,"table")&&!this._hasAncestorTag(s,"code")&&"BODY"!==s.tagName&&"A"!==s.tagName){this.log("Removing unlikely candidate - "+o),s=this._removeAndGetNext(s);continue}if(this.UNLIKELY_ROLES.includes(s.getAttribute("role"))){this.log("Removing content with role "+s.getAttribute("role")+" - "+o),s=this._removeAndGetNext(s);continue}}if("DIV"!==s.tagName&&"SECTION"!==s.tagName&&"HEADER"!==s.tagName&&"H1"!==s.tagName&&"H2"!==s.tagName&&"H3"!==s.tagName&&"H4"!==s.tagName&&"H5"!==s.tagName&&"H6"!==s.tagName||!this._isElementWithoutContent(s)){if(-1!==this.DEFAULT_TAGS_TO_SCORE.indexOf(s.tagName)&&a.push(s),"DIV"===s.tagName){for(var l=null,c=s.firstChild;c;){var h=c.nextSibling;if(this._isPhrasingContent(c))null!==l?l.appendChild(c):this._isWhitespace(c)||(l=t.createElement("p"),s.replaceChild(l,c),l.appendChild(c));else if(null!==l){for(;l.lastChild&&this._isWhitespace(l.lastChild);)l.removeChild(l.lastChild);l=null}c=h}if(this._hasSingleTagInsideElement(s,"P")&&this._getLinkDensity(s)<.25){var d=s.children[0];s.parentNode.replaceChild(d,s),s=d,a.push(s)}else this._hasChildBlockElement(s)||(s=this._setNodeTag(s,"P"),a.push(s))}s=this._getNextNode(s)}else s=this._removeAndGetNext(s)}else s=this._removeAndGetNext(s);else this.log("Removing hidden node - "+o),s=this._removeAndGetNext(s)}var u=[];this._forEachNode(a,(function(e){if(e.parentNode&&void 0!==e.parentNode.tagName){var t=this._getInnerText(e);if(!(t.length<25)){var i=this._getNodeAncestors(e,5);if(0!==i.length){var n=0;n+=1,n+=t.split(this.REGEXPS.commas).length,n+=Math.min(Math.floor(t.length/100),3),this._forEachNode(i,(function(e,t){if(e.tagName&&e.parentNode&&void 0!==e.parentNode.tagName){if(void 0===e.readability&&(this._initializeNode(e),u.push(e)),0===t)var i=1;else i=1===t?2:3*t;e.readability.contentScore+=n/i}}))}}}}));for(var g=[],f=0,p=u.length;fN.readability.contentScore){g.splice(b,0,m),g.length>this._nbTopCandidates&&g.pop();break}}}var E,y=g[0]||null,v=!1;if(null===y||"BODY"===y.tagName){for(y=t.createElement("DIV"),v=!0;e.firstChild;)this.log("Moving child out:",e.firstChild),y.appendChild(e.firstChild);e.appendChild(y),this._initializeNode(y)}else if(y){for(var T=[],A=1;A=.75&&T.push(this._getNodeAncestors(g[A]));if(T.length>=3)for(E=y.parentNode;"BODY"!==E.tagName;){for(var S=0,C=0;C=3){y=E;break}E=E.parentNode}y.readability||this._initializeNode(y),E=y.parentNode;for(var L=y.readability.contentScore,x=L/3;"BODY"!==E.tagName;)if(E.readability){var R=E.readability.contentScore;if(RL){y=E;break}L=E.readability.contentScore,E=E.parentNode}else E=E.parentNode;for(E=y.parentNode;"BODY"!=E.tagName&&1==E.children.length;)E=(y=E).parentNode;y.readability||this._initializeNode(y)}var O=t.createElement("DIV");i&&(O.id="readability-content");for(var D=Math.max(10,.2*y.readability.contentScore),I=(E=y.parentNode).children,w=0,P=I.length;w=D)B=!0;else if("P"===k.nodeName){var H=this._getLinkDensity(k),G=this._getInnerText(k),U=G.length;(U>80&&H<.25||U<80&&U>0&&0===H&&-1!==G.search(/\.( |$)/))&&(B=!0)}}B&&(this.log("Appending node:",k),-1===this.ALTER_TO_DIV_EXCEPTIONS.indexOf(k.nodeName)&&(this.log("Altering sibling:",k,"to div."),k=this._setNodeTag(k,"DIV")),O.appendChild(k),I=E.children,w-=1,P-=1)}if(this._debug&&this.log("Article content pre-prep: "+O.innerHTML),this._prepArticle(O),this._debug&&this.log("Article content post-prep: "+O.innerHTML),v)y.id="readability-page-1",y.className="page";else{var $=t.createElement("DIV");for($.id="readability-page-1",$.className="page";O.firstChild;)$.appendChild(O.firstChild);O.appendChild($)}this._debug&&this.log("Article content after paging: "+O.innerHTML);var j=!0,F=this._getInnerText(O,!0).length;if(F0&&e.length<100)},_unescapeHtmlEntities:function(e){if(!e)return e;var t=this.HTML_ESCAPE_MAP;return e.replace(/&(quot|amp|apos|lt|gt);/g,(function(e,i){return t[i]})).replace(/&#(?:x([0-9a-z]{1,4})|([0-9]{1,4}));/gi,(function(e,t,i){var n=parseInt(t||i,t?16:10);return String.fromCharCode(n)}))},_getJSONLD:function(e){var t,i=this._getAllNodesWithTag(e,["script"]);return this._forEachNode(i,(function(e){if(!t&&"application/ld+json"===e.getAttribute("type"))try{var i=e.textContent.replace(/^\s*\s*$/g,""),n=JSON.parse(i);if(!n["@context"]||!n["@context"].match(/^https?\:\/\/schema\.org$/))return;if(!n["@type"]&&Array.isArray(n["@graph"])&&(n=n["@graph"].find((function(e){return(e["@type"]||"").match(this.REGEXPS.jsonLdArticleTypes)}))),!n||!n["@type"]||!n["@type"].match(this.REGEXPS.jsonLdArticleTypes))return;if(t={},"string"==typeof n.name&&"string"==typeof n.headline&&n.name!==n.headline){var r=this._getArticleTitle(),a=this._textSimilarity(n.name,r)>.75,s=this._textSimilarity(n.headline,r)>.75;t.title=s&&!a?n.headline:n.name}else"string"==typeof n.name?t.title=n.name.trim():"string"==typeof n.headline&&(t.title=n.headline.trim());return n.author&&("string"==typeof n.author.name?t.byline=n.author.name.trim():Array.isArray(n.author)&&n.author[0]&&"string"==typeof n.author[0].name&&(t.byline=n.author.filter((function(e){return e&&"string"==typeof e.name})).map((function(e){return e.name.trim()})).join(", "))),"string"==typeof n.description&&(t.excerpt=n.description.trim()),n.publisher&&"string"==typeof n.publisher.name&&(t.siteName=n.publisher.name.trim()),void("string"==typeof n.datePublished&&(t.datePublished=n.datePublished.trim()))}catch(e){this.log(e.message)}})),t||{}},_getArticleMetadata:function(e){var t={},i={},n=this._doc.getElementsByTagName("meta"),r=/\s*(article|dc|dcterm|og|twitter)\s*:\s*(author|creator|description|published_time|title|site_name)\s*/gi,a=/^\s*(?:(dc|dcterm|og|twitter|weibo:(article|webpage))\s*[\.:]\s*)?(author|creator|description|title|site_name)\s*$/i;return this._forEachNode(n,(function(e){var t=e.getAttribute("name"),n=e.getAttribute("property"),s=e.getAttribute("content");if(s){var o=null,l=null;n&&(o=n.match(r))&&(l=o[0].toLowerCase().replace(/\s/g,""),i[l]=s.trim()),!o&&t&&a.test(t)&&(l=t,s&&(l=l.toLowerCase().replace(/\s/g,"").replace(/\./g,":"),i[l]=s.trim()))}})),t.title=e.title||i["dc:title"]||i["dcterm:title"]||i["og:title"]||i["weibo:article:title"]||i["weibo:webpage:title"]||i.title||i["twitter:title"],t.title||(t.title=this._getArticleTitle()),t.byline=e.byline||i["dc:creator"]||i["dcterm:creator"]||i.author,t.excerpt=e.excerpt||i["dc:description"]||i["dcterm:description"]||i["og:description"]||i["weibo:article:description"]||i["weibo:webpage:description"]||i.description||i["twitter:description"],t.siteName=e.siteName||i["og:site_name"],t.publishedTime=e.datePublished||i["article:published_time"]||null,t.title=this._unescapeHtmlEntities(t.title),t.byline=this._unescapeHtmlEntities(t.byline),t.excerpt=this._unescapeHtmlEntities(t.excerpt),t.siteName=this._unescapeHtmlEntities(t.siteName),t.publishedTime=this._unescapeHtmlEntities(t.publishedTime),t},_isSingleImage:function(e){return"IMG"===e.tagName||1===e.children.length&&""===e.textContent.trim()&&this._isSingleImage(e.children[0])},_unwrapNoscriptImages:function(e){var t=Array.from(e.getElementsByTagName("img"));this._forEachNode(t,(function(e){for(var t=0;t0&&r>i)return!1;if(e.parentNode.tagName===t&&(!n||n(e.parentNode)))return!0;e=e.parentNode,r++}return!1},_getRowAndColumnCount:function(e){for(var t=0,i=0,n=e.getElementsByTagName("tr"),r=0;r0)n._readabilityDataTable=!0;else{if(["col","colgroup","tfoot","thead","th"].some((function(e){return!!n.getElementsByTagName(e)[0]})))this.log("Data table because found data-y descendant"),n._readabilityDataTable=!0;else if(n.getElementsByTagName("table")[0])n._readabilityDataTable=!1;else{var a=this._getRowAndColumnCount(n);a.rows>=10||a.columns>4?n._readabilityDataTable=!0:n._readabilityDataTable=a.rows*a.columns>10}}}else n._readabilityDataTable=!1;else n._readabilityDataTable=!1}},_fixLazyImages:function(e){this._forEachNode(this._getAllNodesWithTag(e,["img","picture","figure"]),(function(e){if(e.src&&this.REGEXPS.b64DataUrl.test(e.src)){if("image/svg+xml"===this.REGEXPS.b64DataUrl.exec(e.src)[1])return;for(var t=!1,i=0;in+=this._getInnerText(e,!0).length)),n/i},_cleanConditionally:function(e,t){this._flagIsActive(this.FLAG_CLEAN_CONDITIONALLY)&&this._removeNodes(this._getAllNodesWithTag(e,[t]),(function(e){var i=function(e){return e._readabilityDataTable},n="ul"===t||"ol"===t;if(!n){var r=0,a=this._getAllNodesWithTag(e,["ul","ol"]);this._forEachNode(a,(e=>r+=this._getInnerText(e).length)),n=r/this._getInnerText(e).length>.9}if("table"===t&&i(e))return!1;if(this._hasAncestorTag(e,"table",-1,i))return!1;if(this._hasAncestorTag(e,"code"))return!1;var s=this._getClassWeight(e);this.log("Cleaning Conditionally",e);if(s+0<0)return!0;if(this._getCharCount(e,",")<10){for(var o=e.getElementsByTagName("p").length,l=e.getElementsByTagName("img").length,c=e.getElementsByTagName("li").length-100,h=e.getElementsByTagName("input").length,d=this._getTextDensity(e,["h1","h2","h3","h4","h5","h6"]),u=0,g=this._getAllNodesWithTag(e,["object","embed","iframe"]),f=0;f1&&o/l<.5&&!this._hasAncestorTag(e,"figure")||!n&&c>o||h>Math.floor(o/3)||!n&&d<.9&&_<25&&(0===l||l>2)&&!this._hasAncestorTag(e,"figure")||!n&&s<25&&m>.2||s>=25&&m>.5||1===u&&_<75||u>1;if(n&&b){for(var N=0;N1)return b}if(l==e.getElementsByTagName("li").length)return!1}return b}return!1}))},_cleanMatchedNodes:function(e,t){for(var i=this._getNextNode(e,!0),n=this._getNextNode(e);n&&n!=i;)n=t.call(this,n,n.className+" "+n.id)?this._removeAndGetNext(n):this._getNextNode(n)},_cleanHeaders:function(e){let t=this._getAllNodesWithTag(e,["h1","h2"]);this._removeNodes(t,(function(e){let t=this._getClassWeight(e)<0;return t&&this.log("Removing header with low class weight:",e),t}))},_headerDuplicatesTitle:function(e){if("H1"!=e.tagName&&"H2"!=e.tagName)return!1;var t=this._getInnerText(e,!1);return this.log("Evaluating similarity of header:",t,this._articleTitle),this._textSimilarity(this._articleTitle,t)>.75},_flagIsActive:function(e){return(this._flags&e)>0},_removeFlag:function(e){this._flags=this._flags&~e},_isProbablyVisible:function(e){return(!e.style||"none"!=e.style.display)&&(!e.style||"hidden"!=e.style.visibility)&&!e.hasAttribute("hidden")&&(!e.hasAttribute("aria-hidden")||"true"!=e.getAttribute("aria-hidden")||e.className&&e.className.indexOf&&-1!==e.className.indexOf("fallback-image"))},parse:function(){if(this._maxElemsToParse>0){var e=this._doc.getElementsByTagName("*").length;if(e>this._maxElemsToParse)throw new Error("Aborting parsing document; "+e+" elements found")}this._unwrapNoscriptImages(this._doc);var t=this._disableJSONLD?{}:this._getJSONLD(this._doc);this._removeScripts(this._doc),this._prepDocument();var i=this._getArticleMetadata(t);this._articleTitle=i.title;var n=this._grabArticle();if(!n)return null;if(this.log("Grabbed: "+n.innerHTML),this._postProcessContent(n),!i.excerpt){var r=n.getElementsByTagName("p");r.length>0&&(i.excerpt=r[0].textContent.trim())}var a=n.textContent;return{title:this._articleTitle,byline:i.byline||this._articleByline,dir:this._articleDir,lang:this._articleLang,content:this._serializer(n),textContent:a,length:a.length,excerpt:i.excerpt,siteName:i.siteName||this._articleSiteName,publishedTime:i.publishedTime}}},e.exports=t},396:(e,t,i)=>{var n=i(238),r=i(804);e.exports={Readability:n,isProbablyReaderable:r}},481:e=>{e.exports=function(e,t){(t=t||{}).listUnicodeChar=!!t.hasOwnProperty("listUnicodeChar")&&t.listUnicodeChar,t.stripListLeaders=!t.hasOwnProperty("stripListLeaders")||t.stripListLeaders,t.gfm=!t.hasOwnProperty("gfm")||t.gfm,t.useImgAltText=!t.hasOwnProperty("useImgAltText")||t.useImgAltText,t.abbr=!!t.hasOwnProperty("abbr")&&t.abbr,t.replaceLinksWithURL=!!t.hasOwnProperty("replaceLinksWithURL")&&t.replaceLinksWithURL,t.htmlTagsToSkip=t.hasOwnProperty("htmlTagsToSkip")?t.htmlTagsToSkip:[],t.throwError=!!t.hasOwnProperty("throwError")&&t.throwError;var i=e||"";i=i.replace(/^(-\s*?|\*\s*?|_\s*?){3,}\s*/gm,"");try{t.stripListLeaders&&(i=t.listUnicodeChar?i.replace(/^([\s\t]*)([\*\-\+]|\d+\.)\s+/gm,t.listUnicodeChar+" $1"):i.replace(/^([\s\t]*)([\*\-\+]|\d+\.)\s+/gm,"$1")),t.gfm&&(i=i.replace(/\n={2,}/g,"\n").replace(/~{3}.*\n/g,"").replace(/~~/g,"").replace(/`{3}.*\n/g,"")),t.abbr&&(i=i.replace(/\*\[.*\]:.*\n/,"")),i=i.replace(/<[^>]*>/g,"");var n=new RegExp("<[^>]*>","g");if(t.htmlTagsToSkip.length>0){var r="(?!"+t.htmlTagsToSkip.join("|")+")";n=new RegExp("<"+r+"[^>]*>","ig")}i=i.replace(n,"").replace(/^[=\-]{2,}\s*$/g,"").replace(/\[\^.+?\](\: .*?$)?/g,"").replace(/\s{0,2}\[.*?\]: .*?$/g,"").replace(/\!\[(.*?)\][\[\(].*?[\]\)]/g,t.useImgAltText?"$1":"").replace(/\[([^\]]*?)\][\[\(].*?[\]\)]/g,t.replaceLinksWithURL?"$2":"$1").replace(/^(\n)?\s{0,3}>\s?/gm,"$1").replace(/^\s{1,2}\[(.*?)\]: (\S+)( ".*?")?\s*$/g,"").replace(/^(\n)?\s{0,}#{1,6}\s*( (.+))? +#+$|^(\n)?\s{0,}#{1,6}\s*( (.+))?$/gm,"$1$3$4$6").replace(/([\*]+)(\S)(.*?\S)??\1/g,"$2$3").replace(/(^|\W)([_]+)(\S)(.*?\S)??\2($|\W)/g,"$1$3$4$5").replace(/(`{3,})(.*?)\1/gm,"$2").replace(/`(.+?)`/g,"$1").replace(/~(.*?)~/g,"$1")}catch(i){if(t.throwError)throw i;return console.error("remove-markdown encountered error: %s",i),e}return i}}},t={};function i(n){var r=t[n];if(void 0!==r)return r.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,i),a.exports}i.d=(e,t)=>{for(var n in t)i.o(t,n)&&!i.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};return(()=>{"use strict";i.r(n),i.d(n,{parseFullMarkdown:()=>$,parseReaderable:()=>j});var e=i(396);function t(e,t){return Array(t+1).join(e)}var r=["ADDRESS","ARTICLE","ASIDE","AUDIO","BLOCKQUOTE","BODY","CANVAS","CENTER","DD","DIR","DIV","DL","DT","FIELDSET","FIGCAPTION","FIGURE","FOOTER","FORM","FRAMESET","H1","H2","H3","H4","H5","H6","HEADER","HGROUP","HR","HTML","ISINDEX","LI","MAIN","MENU","NAV","NOFRAMES","NOSCRIPT","OL","OUTPUT","P","PRE","SECTION","TABLE","TBODY","TD","TFOOT","TH","THEAD","TR","UL"];function a(e){return c(e,r)}var s=["AREA","BASE","BR","COL","COMMAND","EMBED","HR","IMG","INPUT","KEYGEN","LINK","META","PARAM","SOURCE","TRACK","WBR"];function o(e){return c(e,s)}var l=["A","TABLE","THEAD","TBODY","TFOOT","TH","TD","IFRAME","SCRIPT","AUDIO","VIDEO"];function c(e,t){return t.indexOf(e.nodeName)>=0}function h(e,t){return e.getElementsByTagName&&t.some((function(t){return e.getElementsByTagName(t).length}))}var d={};function u(e){return e?e.replace(/(\n+\s*)+/g,"\n"):""}function g(e){for(var t in this.options=e,this._keep=[],this._remove=[],this.blankRule={replacement:e.blankReplacement},this.keepReplacement=e.keepReplacement,this.defaultRule={replacement:e.defaultReplacement},this.array=[],e.rules)this.array.push(e.rules[t])}function f(e,t,i){for(var n=0;n-1)return!0}else{if("function"!=typeof n)throw new TypeError("`filter` needs to be a string, array, or function");if(n.call(e,t,i))return!0}}function m(e){var t=e.nextSibling||e.parentNode;return e.parentNode.removeChild(e),t}function _(e,t,i){return e&&e.parentNode===t||i(t)?t.nextSibling||t.parentNode:t.firstChild||t.nextSibling||t.parentNode}d.paragraph={filter:"p",replacement:function(e){return"\n\n"+e+"\n\n"}},d.lineBreak={filter:"br",replacement:function(e,t,i){return i.br+"\n"}},d.heading={filter:["h1","h2","h3","h4","h5","h6"],replacement:function(e,i,n){var r=Number(i.nodeName.charAt(1));return"setext"===n.headingStyle&&r<3?"\n\n"+e+"\n"+t(1===r?"=":"-",e.length)+"\n\n":"\n\n"+t("#",r)+" "+e+"\n\n"}},d.blockquote={filter:"blockquote",replacement:function(e){return"\n\n"+(e=(e=e.replace(/^\n+|\n+$/g,"")).replace(/^/gm,"> "))+"\n\n"}},d.list={filter:["ul","ol"],replacement:function(e,t){var i=t.parentNode;return"LI"===i.nodeName&&i.lastElementChild===t?"\n"+e:"\n\n"+e+"\n\n"}},d.listItem={filter:"li",replacement:function(e,t,i){e=e.replace(/^\n+/,"").replace(/\n+$/,"\n").replace(/\n/gm,"\n ");var n=i.bulletListMarker+" ",r=t.parentNode;if("OL"===r.nodeName){var a=r.getAttribute("start"),s=Array.prototype.indexOf.call(r.children,t);n=(a?Number(a)+s:s+1)+". "}return n+e+(t.nextSibling&&!/\n$/.test(e)?"\n":"")}},d.indentedCodeBlock={filter:function(e,t){return"indented"===t.codeBlockStyle&&"PRE"===e.nodeName&&e.firstChild&&"CODE"===e.firstChild.nodeName},replacement:function(e,t,i){return"\n\n "+t.firstChild.textContent.replace(/\n/g,"\n ")+"\n\n"}},d.fencedCodeBlock={filter:function(e,t){return"fenced"===t.codeBlockStyle&&"PRE"===e.nodeName&&e.firstChild&&"CODE"===e.firstChild.nodeName},replacement:function(e,i,n){for(var r,a=((i.firstChild.getAttribute("class")||"").match(/language-(\S+)/)||[null,""])[1],s=i.firstChild.textContent,o=n.fence.charAt(0),l=3,c=new RegExp("^"+o+"{3,}","gm");r=c.exec(s);)r[0].length>=l&&(l=r[0].length+1);var h=t(o,l);return"\n\n"+h+a+"\n"+s.replace(/\n$/,"")+"\n"+h+"\n\n"}},d.horizontalRule={filter:"hr",replacement:function(e,t,i){return"\n\n"+i.hr+"\n\n"}},d.inlineLink={filter:function(e,t){return"inlined"===t.linkStyle&&"A"===e.nodeName&&e.getAttribute("href")},replacement:function(e,t){var i=t.getAttribute("href");i&&(i=i.replace(/([()])/g,"\\$1"));var n=u(t.getAttribute("title"));return n&&(n=' "'+n.replace(/"/g,'\\"')+'"'),"["+e+"]("+i+n+")"}},d.referenceLink={filter:function(e,t){return"referenced"===t.linkStyle&&"A"===e.nodeName&&e.getAttribute("href")},replacement:function(e,t,i){var n,r,a=t.getAttribute("href"),s=u(t.getAttribute("title"));switch(s&&(s=' "'+s+'"'),i.linkReferenceStyle){case"collapsed":n="["+e+"][]",r="["+e+"]: "+a+s;break;case"shortcut":n="["+e+"]",r="["+e+"]: "+a+s;break;default:var o=this.references.length+1;n="["+e+"]["+o+"]",r="["+o+"]: "+a+s}return this.references.push(r),n},references:[],append:function(e){var t="";return this.references.length&&(t="\n\n"+this.references.join("\n")+"\n\n",this.references=[]),t}},d.emphasis={filter:["em","i"],replacement:function(e,t,i){return e.trim()?i.emDelimiter+e+i.emDelimiter:""}},d.strong={filter:["strong","b"],replacement:function(e,t,i){return e.trim()?i.strongDelimiter+e+i.strongDelimiter:""}},d.code={filter:function(e){var t=e.previousSibling||e.nextSibling,i="PRE"===e.parentNode.nodeName&&!t;return"CODE"===e.nodeName&&!i},replacement:function(e){if(!e)return"";e=e.replace(/\r?\n|\r/g," ");for(var t=/^`|^ .*?[^ ].* $|`$/.test(e)?" ":"",i="`",n=e.match(/`+/gm)||[];-1!==n.indexOf(i);)i+="`";return i+t+e+t+i}},d.image={filter:"img",replacement:function(e,t){var i=u(t.getAttribute("alt")),n=t.getAttribute("src")||"",r=u(t.getAttribute("title"));return n?"!["+i+"]("+n+(r?' "'+r+'"':"")+")":""}},g.prototype={add:function(e,t){this.array.unshift(t)},keep:function(e){this._keep.unshift({filter:e,replacement:this.keepReplacement})},remove:function(e){this._remove.unshift({filter:e,replacement:function(){return""}})},forNode:function(e){return e.isBlank?this.blankRule:(t=f(this.array,e,this.options))||(t=f(this._keep,e,this.options))||(t=f(this._remove,e,this.options))?t:this.defaultRule;var t},forEach:function(e){for(var t=0;t'+e+"","text/html").getElementById("turndown-root"):i=e.cloneNode(!0);return function(e){var t=e.element,i=e.isBlock,n=e.isVoid,r=e.isPre||function(e){return"PRE"===e.nodeName};if(t.firstChild&&!r(t)){for(var a=null,s=!1,o=null,l=_(o,t,r);l!==t;){if(3===l.nodeType||4===l.nodeType){var c=l.data.replace(/[ \r\n\t]+/g," ");if(a&&!/ $/.test(a.data)||s||" "!==c[0]||(c=c.substr(1)),!c){l=m(l);continue}l.data=c,a=l}else{if(1!==l.nodeType){l=m(l);continue}i(l)||"BR"===l.nodeName?(a&&(a.data=a.data.replace(/ $/,"")),a=null,s=!1):n(l)||r(l)?(a=null,s=!0):a&&(s=!1)}var h=_(o,l,r);o=l,l=h}a&&(a.data=a.data.replace(/ $/,""),a.data||m(a))}}({element:i,isBlock:a,isVoid:o,isPre:t.preformattedCode?T:null}),i}function T(e){return"PRE"===e.nodeName||"CODE"===e.nodeName}function A(e,t){return e.isBlock=a(e),e.isCode="CODE"===e.nodeName||e.parentNode.isCode,e.isBlank=function(e){return!o(e)&&!function(e){return c(e,l)}(e)&&/^\s*$/i.test(e.textContent)&&!function(e){return h(e,s)}(e)&&!function(e){return h(e,l)}(e)}(e),e.flankingWhitespace=function(e,t){if(e.isBlock||t.preformattedCode&&e.isCode)return{leading:"",trailing:""};var i=(n=e.textContent,r=n.match(/^(([ \t\r\n]*)(\s*))(?:(?=\S)[\s\S]*\S)?((\s*?)([ \t\r\n]*))$/),{leading:r[1],leadingAscii:r[2],leadingNonAscii:r[3],trailing:r[4],trailingNonAscii:r[5],trailingAscii:r[6]});var n,r;i.leadingAscii&&S("left",e,t)&&(i.leading=i.leadingNonAscii);i.trailingAscii&&S("right",e,t)&&(i.trailing=i.trailingNonAscii);return{leading:i.leading,trailing:i.trailing}}(e,t),e}function S(e,t,i){var n,r,s;return"left"===e?(n=t.previousSibling,r=/ $/):(n=t.nextSibling,r=/^ /),n&&(3===n.nodeType?s=r.test(n.nodeValue):i.preformattedCode&&"CODE"===n.nodeName?s=!1:1!==n.nodeType||a(n)||(s=r.test(n.textContent))),s}var C=Array.prototype.reduce,L=[[/\\/g,"\\\\"],[/\*/g,"\\*"],[/^-/g,"\\-"],[/^\+ /g,"\\+ "],[/^(=+)/g,"\\$1"],[/^(#{1,6}) /g,"\\$1 "],[/`/g,"\\`"],[/^~~~/g,"\\~~~"],[/\[/g,"\\["],[/\]/g,"\\]"],[/^>/g,"\\>"],[/_/g,"\\_"],[/^(\d+)\. /g,"$1\\. "]];function x(e){if(!(this instanceof x))return new x(e);var t={rules:d,headingStyle:"setext",hr:"* * *",bulletListMarker:"*",codeBlockStyle:"indented",fence:"```",emDelimiter:"_",strongDelimiter:"**",linkStyle:"inlined",linkReferenceStyle:"full",br:" ",preformattedCode:!1,blankReplacement:function(e,t){return t.isBlock?"\n\n":""},keepReplacement:function(e,t){return t.isBlock?"\n\n"+t.outerHTML+"\n\n":t.outerHTML},defaultReplacement:function(e,t){return t.isBlock?"\n\n"+e+"\n\n":e}};this.options=function(e){for(var t=1;t0&&"\n"===e[t-1];)t--;return e.substring(0,t)}(e),n=t.replace(/^\n*/,""),r=Math.max(e.length-i.length,t.length-n.length);return i+"\n\n".substring(0,r)+n}x.prototype={turndown:function(e){if(!function(e){return null!=e&&("string"==typeof e||e.nodeType&&(1===e.nodeType||9===e.nodeType||11===e.nodeType))}(e))throw new TypeError(e+" is not a string, or an element/document/fragment node.");if(""===e)return"";var t=R.call(this,new v(e,this.options));return O.call(this,t)},use:function(e){if(Array.isArray(e))for(var t=0;t - readability [18 Jan 2025 at 20:19] + readability [24 Feb 2025 at 15:42] diff --git a/packages/flutter_mozilla_components/javascript/readability/dist/stats.json b/packages/flutter_mozilla_components/javascript/readability/dist/stats.json index b928e6b2..dc531de5 100644 --- a/packages/flutter_mozilla_components/javascript/readability/dist/stats.json +++ b/packages/flutter_mozilla_components/javascript/readability/dist/stats.json @@ -1,8 +1,8 @@ { - "hash": "68fe8281f85d9e1fa8f9", + "hash": "3b7b601a842a4a70dcf0", "version": "5.97.1", - "time": 560, - "builtAt": 1737227987116, + "time": 695, + "builtAt": 1740408169935, "publicPath": "auto", "outputPath": "/home/fafre/development/repos/lensai/packages/flutter_mozilla_components/javascript/readability/dist", "assetsByChunkName": { @@ -14,14 +14,14 @@ { "type": "asset", "name": "readability.min.js", - "size": 49051, + "size": 49105, "emitted": true, "comparedForEmit": false, "cached": false, "info": { "javascriptModule": false, "minimized": true, - "size": 49051 + "size": 49105 }, "chunkNames": [ "main" @@ -43,9 +43,9 @@ "initial": true, "entry": true, "recorded": false, - "size": 122485, + "size": 122550, "sizes": { - "javascript": 121815, + "javascript": 121880, "runtime": 670 }, "names": [ @@ -59,7 +59,7 @@ "readability.min.js" ], "auxiliaryFiles": [], - "hash": "bf73e1848f9bdc88f1b3", + "hash": "560dd27471dfc45dd435", "childrenByOrder": {}, "id": 792, "siblings": [], @@ -428,9 +428,9 @@ "type": "module", "moduleType": "javascript/esm", "layer": null, - "size": 29333, + "size": 29398, "sizes": { - "javascript": 29333 + "javascript": 29398 }, "built": true, "codeGenerated": true, @@ -486,6 +486,7 @@ ], "usedExports": true, "providedExports": [ + "parseFullMarkdown", "parseReaderable" ], "optimizationBailout": [ @@ -497,9 +498,9 @@ "type": "module", "moduleType": "javascript/auto", "layer": null, - "size": 4271, + "size": 4336, "sizes": { - "javascript": 4271 + "javascript": 4336 }, "built": true, "codeGenerated": false, @@ -529,6 +530,7 @@ "reasons": [], "usedExports": true, "providedExports": [ + "parseFullMarkdown", "parseReaderable" ], "optimizationBailout": [ @@ -743,9 +745,9 @@ "type": "module", "moduleType": "javascript/esm", "layer": null, - "size": 29333, + "size": 29398, "sizes": { - "javascript": 29333 + "javascript": 29398 }, "built": true, "codeGenerated": true, @@ -800,6 +802,7 @@ ], "usedExports": true, "providedExports": [ + "parseFullMarkdown", "parseReaderable" ], "optimizationBailout": [ @@ -811,9 +814,9 @@ "type": "module", "moduleType": "javascript/auto", "layer": null, - "size": 4271, + "size": 4336, "sizes": { - "javascript": 4271 + "javascript": 4336 }, "built": true, "codeGenerated": false, @@ -842,6 +845,7 @@ "reasons": [], "usedExports": true, "providedExports": [ + "parseFullMarkdown", "parseReaderable" ], "optimizationBailout": [ @@ -1478,11 +1482,11 @@ "assets": [ { "name": "readability.min.js", - "size": 49051 + "size": 49105 } ], "filteredAssets": 0, - "assetsSize": 49051, + "assetsSize": 49105, "auxiliaryAssets": [], "filteredAuxiliaryAssets": 0, "auxiliaryAssetsSize": 0, @@ -1500,11 +1504,11 @@ "assets": [ { "name": "readability.min.js", - "size": 49051 + "size": 49105 } ], "filteredAssets": 0, - "assetsSize": 49051, + "assetsSize": 49105, "auxiliaryAssets": [], "filteredAuxiliaryAssets": 0, "auxiliaryAssetsSize": 0, diff --git a/packages/flutter_mozilla_components/javascript/readability/src/index.js b/packages/flutter_mozilla_components/javascript/readability/src/index.js index 12ed0f82..834b442f 100644 --- a/packages/flutter_mozilla_components/javascript/readability/src/index.js +++ b/packages/flutter_mozilla_components/javascript/readability/src/index.js @@ -6,106 +6,106 @@ const removeMarkdown = require('remove-markdown'); const turndownService = new TurndownService(); function sanitizeHtmlTags(node, unwantedSelectors) { - unwantedSelectors.forEach(selector => { - node.querySelectorAll(selector).forEach(el => el.remove()); - }); + unwantedSelectors.forEach(selector => { + node.querySelectorAll(selector).forEach(el => el.remove()); + }); - return node; + return node; } function parseFullMarkdown(node) { - const clonedDoc = node.cloneNode(true); + const clonedDoc = node.cloneNode(true); - sanitizeHtmlTags(clonedDoc, [ - /* Navigation and Header Elements */ - 'nav', - 'footer', - 'header', - 'aside', - 'menu', - 'toolbar', + sanitizeHtmlTags(clonedDoc, [ + /* Navigation and Header Elements */ + 'nav', + 'footer', + 'header', + 'aside', + 'menu', + 'toolbar', - /* Interactive Elements */ - 'form', - 'button', - '[role="button"]', - '[type="button"]', - 'dialog', - 'modal', + /* Interactive Elements */ + 'form', + 'button', + '[role="button"]', + '[type="button"]', + 'dialog', + 'modal', - /* Hidden Elements */ - '[aria-hidden="true"]', - '[hidden]', - '[style*="display: none"]', - '[style*="visibility: hidden"]', - '.hidden', - '.invisible', + /* Hidden Elements */ + '[aria-hidden="true"]', + '[hidden]', + '[style*="display: none"]', + '[style*="visibility: hidden"]', + '.hidden', + '.invisible', - /* Advertising and Marketing */ - '.ad', - '.advertisement', - '.banner', - '.sponsored', - '.promotion', - '.popup', - '.newsletter', - '.subscribe', + /* Advertising and Marketing */ + '.ad', + '.advertisement', + '.banner', + '.sponsored', + '.promotion', + '.popup', + '.newsletter', + '.subscribe', - /* Social Media */ - '.social-share', - '.social-media', - '.share-buttons', - '.follow-us', - '.likes', - '.comments', + /* Social Media */ + '.social-share', + '.social-media', + '.share-buttons', + '.follow-us', + '.likes', + '.comments', - /* Common UI Components */ - '.cookie-notice', - '.cookie-banner', - '.modal', - '.overlay', - '.tooltip', - '.popup', - '.sidebar', - '.widget', + /* Common UI Components */ + '.cookie-notice', + '.cookie-banner', + '.modal', + '.overlay', + '.tooltip', + '.popup', + '.sidebar', + '.widget', - /* Navigation Related */ - '.breadcrumb', - '.pagination', - '.menu', - '.navbar', - '.navigation', + /* Navigation Related */ + '.breadcrumb', + '.pagination', + '.menu', + '.navbar', + '.navigation', - /* Related Content */ - '.related-posts', - '.recommended', - '.suggestions', - '.read-more', + /* Related Content */ + '.related-posts', + '.recommended', + '.suggestions', + '.read-more', - /* Interactive Features */ - '.search', - '.search-box', - '.login', - '.signup', - '.register', + /* Interactive Features */ + '.search', + '.search-box', + '.login', + '.signup', + '.register', - /* Print-specific */ - '.print-only', - '[media="print"]' - ]); + /* Print-specific */ + '.print-only', + '[media="print"]' + ]); - const fullMarkdown = turndownService.turndown(clonedDoc.body.innerHTML); + const fullMarkdown = turndownService.turndown(clonedDoc.body.innerHTML); - let response = { - fullContentMarkdown: fullMarkdown, - fullContentPlain: removeMarkdown(fullMarkdown), - }; + let response = { + fullContentMarkdown: fullMarkdown, + fullContentPlain: removeMarkdown(fullMarkdown), + }; - return response; + return response; } function parseReaderable(document, options) { - const clonedDoc = document.cloneNode(true); + const clonedDoc = document.cloneNode(true); sanitizeHtmlTags(clonedDoc, [ /* Technical Elements */ 'script', @@ -143,4 +143,6 @@ function parseReaderable(document, options) { } window.parseReaderable = parseReaderable; -export { parseReaderable }; \ No newline at end of file +window.parseFullMarkdown = parseFullMarkdown; + +export { parseReaderable, parseFullMarkdown }; \ No newline at end of file diff --git a/packages/flutter_mozilla_components/lib/flutter_mozilla_components.dart b/packages/flutter_mozilla_components/lib/flutter_mozilla_components.dart index 9491a0c0..ca325035 100644 --- a/packages/flutter_mozilla_components/lib/flutter_mozilla_components.dart +++ b/packages/flutter_mozilla_components/lib/flutter_mozilla_components.dart @@ -18,6 +18,7 @@ export 'src/domain/services/gecko_session.dart'; export 'src/domain/services/gecko_suggestions.dart'; export 'src/domain/services/gecko_tab.dart'; export 'src/domain/services/gecko_tab_content.dart'; +export 'src/domain/services/gecko_turndown.dart'; export 'src/geckoview_widget.dart'; export 'src/pigeons/gecko.g.dart' show diff --git a/packages/flutter_mozilla_components/lib/src/domain/entities/turndown_result.dart b/packages/flutter_mozilla_components/lib/src/domain/entities/turndown_result.dart new file mode 100644 index 00000000..8049f67b --- /dev/null +++ b/packages/flutter_mozilla_components/lib/src/domain/entities/turndown_result.dart @@ -0,0 +1,7 @@ +class TurndownResults { + final String plain; + final String? markdown; + + TurndownResults({required this.plain, required String markdown}) + : markdown = (plain != markdown) ? markdown : null; +} diff --git a/packages/flutter_mozilla_components/lib/src/domain/services/gecko_icon.dart b/packages/flutter_mozilla_components/lib/src/domain/services/gecko_icon.dart index c68a7120..2c78914c 100644 --- a/packages/flutter_mozilla_components/lib/src/domain/services/gecko_icon.dart +++ b/packages/flutter_mozilla_components/lib/src/domain/services/gecko_icon.dart @@ -13,7 +13,7 @@ class GeckoIconService { IconSize size = IconSize.defaultSize, bool isPrivate = false, bool waitOnNetworkLoad = true, - }) async { + }) { return _api.loadIcon( IconRequest( url: url.toString(), diff --git a/packages/flutter_mozilla_components/lib/src/domain/services/gecko_turndown.dart b/packages/flutter_mozilla_components/lib/src/domain/services/gecko_turndown.dart new file mode 100644 index 00000000..ccfa6821 --- /dev/null +++ b/packages/flutter_mozilla_components/lib/src/domain/services/gecko_turndown.dart @@ -0,0 +1,25 @@ +import 'package:flutter_mozilla_components/src/domain/entities/turndown_result.dart'; +import 'package:flutter_mozilla_components/src/pigeons/gecko.g.dart'; + +final _apiInstance = GeckoTurndownApi(); + +class GeckoTurndownService { + Future> turndownHtml(List htmlList) async { + final markdownResult = await _apiInstance.getMarkdown(htmlList); + + final results = + markdownResult + .cast() + .map( + (result) => TurndownResults( + // ignore: avoid_dynamic_calls valid + markdown: result['fullContentMarkdown'] as String, + // ignore: avoid_dynamic_calls valid + plain: result['fullContentPlain'] as String, + ), + ) + .toList(); + + return results; + } +} diff --git a/packages/flutter_mozilla_components/lib/src/geckoview_widget.dart b/packages/flutter_mozilla_components/lib/src/geckoview_widget.dart index 4bcd0169..c7594fae 100644 --- a/packages/flutter_mozilla_components/lib/src/geckoview_widget.dart +++ b/packages/flutter_mozilla_components/lib/src/geckoview_widget.dart @@ -9,8 +9,8 @@ import 'package:flutter/services.dart'; import 'package:flutter_mozilla_components/src/domain/services/gecko_browser.dart'; class GeckoView extends StatefulWidget { - final FutureOr Function()? preInitializationStep; - final FutureOr Function()? postInitializationStep; + final Future Function()? preInitializationStep; + final Future Function()? postInitializationStep; const GeckoView({ super.key, @@ -62,7 +62,7 @@ class _GeckoViewState extends State { creationParams: {}, creationParamsCodec: const StandardMessageCodec(), ) - ..addOnPlatformViewCreatedListener((value) async { + ..addOnPlatformViewCreatedListener((value) { params.onPlatformViewCreated(value); SchedulerBinding.instance.addPostFrameCallback((_) async { diff --git a/packages/flutter_mozilla_components/lib/src/pigeons/gecko.g.dart b/packages/flutter_mozilla_components/lib/src/pigeons/gecko.g.dart index d5f12709..88f9003a 100644 --- a/packages/flutter_mozilla_components/lib/src/pigeons/gecko.g.dart +++ b/packages/flutter_mozilla_components/lib/src/pigeons/gecko.g.dart @@ -3123,6 +3123,48 @@ class GeckoPrefApi { } } +class GeckoTurndownApi { + /// Constructor for [GeckoTurndownApi]. The [binaryMessenger] named argument is + /// available for dependency injection. If it is left null, the default + /// BinaryMessenger will be used which routes to the host platform. + GeckoTurndownApi({BinaryMessenger? binaryMessenger, String messageChannelSuffix = ''}) + : pigeonVar_binaryMessenger = binaryMessenger, + pigeonVar_messageChannelSuffix = messageChannelSuffix.isNotEmpty ? '.$messageChannelSuffix' : ''; + final BinaryMessenger? pigeonVar_binaryMessenger; + + static const MessageCodec pigeonChannelCodec = _PigeonCodec(); + + final String pigeonVar_messageChannelSuffix; + + Future> getMarkdown(List htmlList) async { + final String pigeonVar_channelName = 'dev.flutter.pigeon.flutter_mozilla_components.GeckoTurndownApi.getMarkdown$pigeonVar_messageChannelSuffix'; + final BasicMessageChannel pigeonVar_channel = BasicMessageChannel( + pigeonVar_channelName, + pigeonChannelCodec, + binaryMessenger: pigeonVar_binaryMessenger, + ); + final Future pigeonVar_sendFuture = pigeonVar_channel.send([htmlList]); + final List? pigeonVar_replyList = + await pigeonVar_sendFuture as List?; + if (pigeonVar_replyList == null) { + throw _createConnectionError(pigeonVar_channelName); + } else if (pigeonVar_replyList.length > 1) { + throw PlatformException( + code: pigeonVar_replyList[0]! as String, + message: pigeonVar_replyList[1] as String?, + details: pigeonVar_replyList[2], + ); + } else if (pigeonVar_replyList[0] == null) { + throw PlatformException( + code: 'null-error', + message: 'Host platform returned null value for non-null return value.', + ); + } else { + return (pigeonVar_replyList[0] as List?)!.cast(); + } + } +} + class GeckoContainerProxyApi { /// Constructor for [GeckoContainerProxyApi]. The [binaryMessenger] named argument is /// available for dependency injection. If it is left null, the default diff --git a/packages/flutter_mozilla_components/pigeons/gecko.dart b/packages/flutter_mozilla_components/pigeons/gecko.dart index b55d0246..ccda8fb8 100644 --- a/packages/flutter_mozilla_components/pigeons/gecko.dart +++ b/packages/flutter_mozilla_components/pigeons/gecko.dart @@ -942,6 +942,12 @@ abstract class GeckoPrefApi { void resetPrefs(List? preferenceNames); } +@HostApi() +abstract class GeckoTurndownApi { + @async + List getMarkdown(List htmlList); +} + @HostApi() abstract class GeckoContainerProxyApi { void setProxyPort(int port); diff --git a/packages/flutter_mozilla_components/pubspec.yaml b/packages/flutter_mozilla_components/pubspec.yaml index 232f72ad..36b7023a 100644 --- a/packages/flutter_mozilla_components/pubspec.yaml +++ b/packages/flutter_mozilla_components/pubspec.yaml @@ -15,7 +15,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - lint: ^2.6.1 + lint: ^2.8.0 pigeon: ^24.2.1 # For information on the generic Dart part of this file, see the diff --git a/packages/sqlite3_vec/analysis_options.yaml b/packages/sqlite3_vec/analysis_options.yaml index 29144708..9357549d 100644 --- a/packages/sqlite3_vec/analysis_options.yaml +++ b/packages/sqlite3_vec/analysis_options.yaml @@ -19,7 +19,6 @@ linter: unawaited_futures: true discarded_futures: true collection_methods_unrelated_type: true - require_trailing_commas: false analyzer: plugins: diff --git a/packages/sqlite3_vec/example/pubspec.yaml b/packages/sqlite3_vec/example/pubspec.yaml index f201f24b..5d78588c 100644 --- a/packages/sqlite3_vec/example/pubspec.yaml +++ b/packages/sqlite3_vec/example/pubspec.yaml @@ -11,7 +11,7 @@ dependencies: sqlite3_vec: path: ../ sqlite3: ^2.7.4 - sqlite3_flutter_libs: ^0.5.30 + sqlite3_flutter_libs: ^0.5.31 dev_dependencies: integration_test: diff --git a/packages/sqlite3_vec/pubspec.yaml b/packages/sqlite3_vec/pubspec.yaml index 561c84fb..a233f768 100644 --- a/packages/sqlite3_vec/pubspec.yaml +++ b/packages/sqlite3_vec/pubspec.yaml @@ -15,7 +15,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - lint: ^2.6.1 + lint: ^2.8.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec