84 lines
2.4 KiB
JavaScript
84 lines
2.4 KiB
JavaScript
/*
|
|
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
'use strict';
|
|
|
|
import {
|
|
configs,
|
|
notify,
|
|
wait,
|
|
} from '/common/common.js';
|
|
import * as Constants from '/common/constants.js';
|
|
import * as ContextualIdentities from '/common/contextual-identities.js';
|
|
import * as Sync from '/common/sync.js';
|
|
import * as TabsStore from '/common/tabs-store.js';
|
|
|
|
import { Tab } from '/common/TreeItem.js';
|
|
|
|
import * as Tree from './tree.js';
|
|
|
|
Sync.onMessage.addListener(async message => {
|
|
const data = message.data;
|
|
if (data.type != Constants.kSYNC_DATA_TYPE_TABS ||
|
|
!Array.isArray(data.tabs))
|
|
return;
|
|
|
|
const multiple = data.tabs.length > 1 ? '_multiple' : '';
|
|
notify({
|
|
title: browser.i18n.getMessage(
|
|
`receiveTabs_notification_title${multiple}`,
|
|
[Sync.getDeviceName(message.from)]
|
|
),
|
|
message: browser.i18n.getMessage(
|
|
`receiveTabs_notification_message${multiple}`,
|
|
data.tabs.length > 1 ?
|
|
[data.tabs[0].url, data.tabs.length, data.tabs.length - 1] :
|
|
[data.tabs[0].url]
|
|
),
|
|
timeout: configs.syncReceivedTabsNotificationTimeout
|
|
});
|
|
|
|
const windowId = TabsStore.getCurrentWindowId() || (await browser.windows.getCurrent()).id;
|
|
const win = TabsStore.windows.get(windowId);
|
|
const initialIndex = win.tabs.size;
|
|
win.toBeOpenedOrphanTabs += data.tabs.length;
|
|
let index = 0;
|
|
const tabs = [];
|
|
for (const tab of data.tabs) {
|
|
const createParams = {
|
|
windowId,
|
|
url: tab.url,
|
|
index: initialIndex + index,
|
|
active: index == 0
|
|
};
|
|
if (tab.cookieStoreId &&
|
|
tab.cookieStoreId != 'firefox-default' &&
|
|
ContextualIdentities.get(tab.cookieStoreId))
|
|
createParams.cookieStoreId = tab.cookieStoreId;
|
|
let openedTab;
|
|
try {
|
|
openedTab = await browser.tabs.create(createParams);
|
|
}
|
|
catch(error) {
|
|
console.log(error);
|
|
}
|
|
if (!openedTab)
|
|
openedTab = await browser.tabs.create({
|
|
...createParams,
|
|
url: `about:blank?${tab.url}`
|
|
});
|
|
tabs.push(openedTab);
|
|
index++;
|
|
}
|
|
|
|
if (!Array.isArray(data.structure))
|
|
return;
|
|
|
|
await wait(100); // wait for all tabs are tracked
|
|
await Tree.applyTreeStructureToTabs(tabs.map(tab => Tab.get(tab.id)), data.structure, {
|
|
broadcast: true
|
|
});
|
|
});
|