logic improvements

This commit is contained in:
Fabian Freund
2026-07-07 17:45:10 +02:00
parent 1b4a74865a
commit f902ad97fd
2 changed files with 29 additions and 31 deletions
@@ -984,43 +984,33 @@ class TabRepository extends _$TabRepository {
await selectTab(newTabId); await selectTab(newTabId);
} }
} else { } else {
final tabContainerId = await ref
.read(tabDataRepositoryProvider.notifier)
.getTabContainerId(currentTabState.id);
if (!ref.mounted) {
return;
}
final latestTabState = ref.read(tabStatesProvider)[tabId]; final latestTabState = ref.read(tabStatesProvider)[tabId];
if (latestTabState == null) { if (latestTabState == null) {
logger.w('Could not get tab for assignement ${event.url}'); logger.w('Could not get tab for assignement ${event.url}');
return; return;
} }
if (targetContainerId != tabContainerId) { if (originUri == null) {
if (originUri == null) { await ref
await ref .read(tabDataRepositoryProvider.notifier)
.read(tabDataRepositoryProvider.notifier) .assignContainer(
.assignContainer( latestTabState.id,
latestTabState.id, containerData,
containerData, replacementUrl: uri,
replacementUrl: uri, );
); } else if (latestTabState.url == originUri) {
} else if (latestTabState.url == originUri) { await ref
await ref .read(tabDataRepositoryProvider.notifier)
.read(tabDataRepositoryProvider.notifier) .assignContainer(
.assignContainer( latestTabState.id,
latestTabState.id, containerData,
containerData, closeOldTab: false,
closeOldTab: false, replacementUrl: uri,
replacementUrl: uri, );
); } else {
} else { logger.w(
logger.w( 'Could not match origin url for assignment ${latestTabState.url} to request ${event.originUrl}',
'Could not match origin url for assignment ${latestTabState.url} to request ${event.originUrl}', );
);
}
} }
} }
} }
@@ -61,6 +61,14 @@ class TabDataRepository extends _$TabDataRepository {
final currentContainerData = await getTabContainerData(tabId); final currentContainerData = await getTabContainerData(tabId);
// The tab is already in the target container, so there is nothing to
// reconcile. This guards against churn when an async assignment races a
// move that already landed the tab in [targetContainer] (recreating it
// here would spawn a redundant tab and re-trigger its load).
if (currentContainerData?.id == targetContainer.id) {
return;
}
final sameContext = final sameContext =
targetContainer.metadata.contextualIdentity == targetContainer.metadata.contextualIdentity ==
currentContainerData?.metadata.contextualIdentity; currentContainerData?.metadata.contextualIdentity;