fix tab container provider

This commit is contained in:
Fabian Freund
2026-01-02 07:43:44 +01:00
parent 61267c899d
commit 43e0930e6d
4 changed files with 99 additions and 2 deletions
@@ -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(
@@ -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<TabDatabase> with $TabDaoMixin {
return query.map((row) => row.read(db.tab.containerId));
}
SingleOrNullSelectable<ContainerData?> 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<MapEntry<String, String?>> getTabsContainerId(
Iterable<String> tabIds,
) {
@@ -130,6 +130,16 @@ Stream<String?> watchContainerTabId(Ref ref, String tabId) {
.watchSingleOrNull();
}
@Riverpod()
Stream<ContainerData?> 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<Map<String, String?>> watchTabsContainerId(
Ref ref,
@@ -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?>,
ContainerData?,
Stream<ContainerData?>
>
with $FutureModifier<ContainerData?>, $StreamProvider<ContainerData?> {
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<ContainerData?> $createElement(
$ProviderPointer pointer,
) => $StreamProviderElement(pointer);
@override
Stream<ContainerData?> 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<Stream<ContainerData?>, 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._();