From 67a7a0909e6905b8e656d1df398dbc829c043371 Mon Sep 17 00:00:00 2001 From: Fabian Freund Date: Sat, 3 Jan 2026 19:32:51 +0100 Subject: [PATCH] upsert container when cloning --- .../geckoview/domain/repositories/tab.dart | 14 +++++--------- .../geckoview/domain/repositories/tab.g.dart | 2 +- .../browser/presentation/widgets/tab_menu.dart | 13 +++++++++++-- .../features/tabs/domain/repositories/tab.dart | 8 ++++++++ .../features/tabs/domain/repositories/tab.g.dart | 2 +- 5 files changed, 26 insertions(+), 13 deletions(-) diff --git a/app/lib/features/geckoview/domain/repositories/tab.dart b/app/lib/features/geckoview/domain/repositories/tab.dart index 2f49b004..769797ad 100644 --- a/app/lib/features/geckoview/domain/repositories/tab.dart +++ b/app/lib/features/geckoview/domain/repositories/tab.dart @@ -127,8 +127,10 @@ class TabRepository extends _$TabRepository { .toSet(); // Batch validate parent IDs that aren't in the current creation batch - final existingParentIds = - await tabDao.getExistingTabIds(parentIdsToValidate).get().then((ids) => ids.toSet()); + final existingParentIds = await tabDao + .getExistingTabIds(parentIdsToValidate) + .get() + .then((ids) => ids.toSet()); // Upsert all tabs in the database for (var i = 0; i < createdTabIds.length; i++) { @@ -160,17 +162,11 @@ class TabRepository extends _$TabRepository { Future duplicateTab({ required String selectTabId, - required String? containerId, + required ContainerData? containerData, required bool selectTab, }) async { final tabDao = ref.read(tabDatabaseProvider).tabDao; - final containerData = await containerId.mapNotNull( - (containerId) => ref - .read(containerRepositoryProvider.notifier) - .getContainerData(containerId), - ); - return await tabDao.upsertTabTransactional( () { return _tabsService.duplicateTab( diff --git a/app/lib/features/geckoview/domain/repositories/tab.g.dart b/app/lib/features/geckoview/domain/repositories/tab.g.dart index a63fea86..c3f05235 100644 --- a/app/lib/features/geckoview/domain/repositories/tab.g.dart +++ b/app/lib/features/geckoview/domain/repositories/tab.g.dart @@ -41,7 +41,7 @@ final class TabRepositoryProvider } } -String _$tabRepositoryHash() => r'6a66c2f1f8d00767d19e6125d4eafc6d93381c8a'; +String _$tabRepositoryHash() => r'ab4ba2bf11ccbd99497819b9068cbbd733a93d81'; abstract class _$TabRepository extends $Notifier { void build(); diff --git a/app/lib/features/geckoview/features/browser/presentation/widgets/tab_menu.dart b/app/lib/features/geckoview/features/browser/presentation/widgets/tab_menu.dart index 5b50f6a7..25b1c2ed 100644 --- a/app/lib/features/geckoview/features/browser/presentation/widgets/tab_menu.dart +++ b/app/lib/features/geckoview/features/browser/presentation/widgets/tab_menu.dart @@ -19,6 +19,7 @@ */ import 'dart:convert'; +import 'package:drift/drift.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -195,6 +196,9 @@ class TabMenu extends HookConsumerWidget { child: const Text('Regular'), onPressed: () async { final tabState = ref.read(tabStateProvider(selectedTabId))!; + final containerData = await ref + .read(tabDataRepositoryProvider.notifier) + .getTabContainerData(selectedTabId); final tabId = (tabState.isPrivate) ? await ref @@ -202,13 +206,14 @@ class TabMenu extends HookConsumerWidget { .addTab( url: tabState.url, private: false, + container: Value(containerData), selectTab: false, ) : await ref .read(tabRepositoryProvider.notifier) .duplicateTab( selectTabId: selectedTabId, - containerId: tabState.contextId, + containerData: containerData, selectTab: false, ); @@ -230,6 +235,9 @@ class TabMenu extends HookConsumerWidget { child: const Text('Private'), onPressed: () async { final tabState = ref.read(tabStateProvider(selectedTabId))!; + final containerData = await ref + .read(tabDataRepositoryProvider.notifier) + .getTabContainerData(selectedTabId); final tabId = (!tabState.isPrivate) ? await ref @@ -237,13 +245,14 @@ class TabMenu extends HookConsumerWidget { .addTab( url: tabState.url, private: true, + container: Value(containerData), selectTab: false, ) : await ref .read(tabRepositoryProvider.notifier) .duplicateTab( selectTabId: selectedTabId, - containerId: tabState.contextId, + containerData: containerData, selectTab: false, ); diff --git a/app/lib/features/geckoview/features/tabs/domain/repositories/tab.dart b/app/lib/features/geckoview/features/tabs/domain/repositories/tab.dart index db255446..de82fa5d 100644 --- a/app/lib/features/geckoview/features/tabs/domain/repositories/tab.dart +++ b/app/lib/features/geckoview/features/tabs/domain/repositories/tab.dart @@ -193,6 +193,14 @@ class TabDataRepository extends _$TabDataRepository { .getSingleOrNull(); } + Future getTabContainerData(String tabId) { + return ref + .read(tabDatabaseProvider) + .tabDao + .getTabContainerData(tabId) + .getSingleOrNull(); + } + Future> getTabsContainerId(Iterable tabIds) { return ref .read(tabDatabaseProvider) 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 69054771..2b7279bb 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 @@ -41,7 +41,7 @@ final class TabDataRepositoryProvider } } -String _$tabDataRepositoryHash() => r'e6d8f328368e7525bdd970d8cb3fdea6f0f03a85'; +String _$tabDataRepositoryHash() => r'0ab598656accfc90a15a9bfef3899cd3bb577b66'; abstract class _$TabDataRepository extends $Notifier { void build();