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 2206e9d6..01c0b96a 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 @@ -48,7 +48,7 @@ import 'package:weblibre/features/geckoview/features/browser/presentation/widget import 'package:weblibre/features/geckoview/features/history/domain/repositories/history.dart'; import 'package:weblibre/features/geckoview/features/readerview/presentation/controllers/readerable.dart'; import 'package:weblibre/features/geckoview/features/readerview/presentation/widgets/reader_button.dart'; -import 'package:weblibre/features/geckoview/features/tabs/domain/providers/selected_container.dart'; +import 'package:weblibre/features/geckoview/features/tabs/domain/providers.dart'; import 'package:weblibre/features/geckoview/features/tabs/utils/container_colors.dart'; import 'package:weblibre/features/tor/domain/services/tor_proxy.dart'; import 'package:weblibre/features/user/data/models/general_settings.dart'; @@ -184,7 +184,9 @@ class BrowserTabBar extends HookConsumerWidget { final selectedTabId = ref.watch(selectedTabProvider); final containerColor = ref.watch( - selectedContainerDataProvider.select((data) => data.value?.color), + watchTabContainerDataProvider( + selectedTabId, + ).select((data) => data.value?.color), ); final showExtensionShortcut = ref.watch( 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 cec11109..f865b497 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 @@ -27,6 +27,7 @@ import 'package:weblibre/features/geckoview/features/tabs/data/database/daos/tab import 'package:weblibre/features/geckoview/features/tabs/data/database/database.dart'; import 'package:weblibre/features/geckoview/features/tabs/data/database/definitions.drift.dart'; import 'package:weblibre/features/geckoview/features/tabs/data/entities/tab_source.dart'; +import 'package:weblibre/features/geckoview/features/tabs/data/models/container_data.dart'; import 'package:weblibre/features/geckoview/features/tabs/data/models/tab_query_result.dart'; @DriftAccessor() @@ -74,6 +75,14 @@ class TabDao extends DatabaseAccessor with $TabDaoMixin { return query.map((row) => row.read(db.tab.containerId)); } + SingleOrNullSelectable getTabContainerData(String tabId) { + final query = select(db.tab).join([ + innerJoin(db.container, db.container.id.equalsExp(db.tab.containerId)), + ])..where(db.tab.id.equals(tabId)); + + return query.map((row) => row.readTableOrNull(db.container)); + } + Selectable> getTabsContainerId( Iterable tabIds, ) { diff --git a/app/lib/features/geckoview/features/tabs/domain/providers.dart b/app/lib/features/geckoview/features/tabs/domain/providers.dart index 5a36389a..718194b0 100644 --- a/app/lib/features/geckoview/features/tabs/domain/providers.dart +++ b/app/lib/features/geckoview/features/tabs/domain/providers.dart @@ -130,6 +130,16 @@ Stream watchContainerTabId(Ref ref, String tabId) { .watchSingleOrNull(); } +@Riverpod() +Stream watchTabContainerData(Ref ref, String? tabId) { + if (tabId == null) { + return const Stream.empty(); + } + + final db = ref.watch(tabDatabaseProvider); + return db.tabDao.getTabContainerData(tabId).watchSingleOrNull(); +} + @Riverpod() Stream> watchTabsContainerId( Ref ref, 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 711957f2..e4cf4ff3 100644 --- a/app/lib/features/geckoview/features/tabs/domain/providers.g.dart +++ b/app/lib/features/geckoview/features/tabs/domain/providers.g.dart @@ -671,6 +671,82 @@ final class WatchContainerTabIdFamily extends $Family String toString() => r'watchContainerTabIdProvider'; } +@ProviderFor(watchTabContainerData) +final watchTabContainerDataProvider = WatchTabContainerDataFamily._(); + +final class WatchTabContainerDataProvider + extends + $FunctionalProvider< + AsyncValue, + ContainerData?, + Stream + > + with $FutureModifier, $StreamProvider { + WatchTabContainerDataProvider._({ + required WatchTabContainerDataFamily super.from, + required String? super.argument, + }) : super( + retry: null, + name: r'watchTabContainerDataProvider', + isAutoDispose: true, + dependencies: null, + $allTransitiveDependencies: null, + ); + + @override + String debugGetCreateSourceHash() => _$watchTabContainerDataHash(); + + @override + String toString() { + return r'watchTabContainerDataProvider' + '' + '($argument)'; + } + + @$internal + @override + $StreamProviderElement $createElement( + $ProviderPointer pointer, + ) => $StreamProviderElement(pointer); + + @override + Stream create(Ref ref) { + final argument = this.argument as String?; + return watchTabContainerData(ref, argument); + } + + @override + bool operator ==(Object other) { + return other is WatchTabContainerDataProvider && other.argument == argument; + } + + @override + int get hashCode { + return argument.hashCode; + } +} + +String _$watchTabContainerDataHash() => + r'7fe7d139555f6bbf3165ac67a3641bec9b1af966'; + +final class WatchTabContainerDataFamily extends $Family + with $FunctionalFamilyOverride, String?> { + WatchTabContainerDataFamily._() + : super( + retry: null, + name: r'watchTabContainerDataProvider', + dependencies: null, + $allTransitiveDependencies: null, + isAutoDispose: true, + ); + + WatchTabContainerDataProvider call(String? tabId) => + WatchTabContainerDataProvider._(argument: tabId, from: this); + + @override + String toString() => r'watchTabContainerDataProvider'; +} + @ProviderFor(watchTabsContainerId) final watchTabsContainerIdProvider = WatchTabsContainerIdFamily._();