New sorting algorithm in the parent process
This commit is contained in:
parent
d7d7eeaacb
commit
fba6b1cbd6
2 changed files with 39 additions and 31 deletions
41
index.js
41
index.js
|
@ -2,11 +2,11 @@
|
||||||
const {ContextualIdentityService} = require('resource://gre/modules/ContextualIdentityService.jsm');
|
const {ContextualIdentityService} = require('resource://gre/modules/ContextualIdentityService.jsm');
|
||||||
const { Cc, Ci, Cu, Cr } = require('chrome');
|
const { Cc, Ci, Cu, Cr } = require('chrome');
|
||||||
|
|
||||||
Cu.import("resource://gre/modules/Services.jsm");
|
|
||||||
|
|
||||||
const tabs = require('sdk/tabs');
|
const tabs = require('sdk/tabs');
|
||||||
const webExtension = require('sdk/webextension');
|
const webExtension = require('sdk/webextension');
|
||||||
const { viewFor } = require("sdk/view/core");
|
const { viewFor } = require("sdk/view/core");
|
||||||
|
var windowUtils = require('sdk/window/utils');
|
||||||
|
var tabsUtils = require('sdk/tabs/utils');
|
||||||
|
|
||||||
let ContainerService =
|
let ContainerService =
|
||||||
{
|
{
|
||||||
|
@ -36,6 +36,7 @@ let ContainerService =
|
||||||
'hideTabs',
|
'hideTabs',
|
||||||
'showTabs',
|
'showTabs',
|
||||||
'removeTabs',
|
'removeTabs',
|
||||||
|
'sortTabs',
|
||||||
'openTab',
|
'openTab',
|
||||||
'queryIdentities',
|
'queryIdentities',
|
||||||
'getIdentitiesState',
|
'getIdentitiesState',
|
||||||
|
@ -117,9 +118,43 @@ let ContainerService =
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
sortTabs(args) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
let windows = windowUtils.windows('navigator:browser', {includePrivate:false});
|
||||||
|
for (let window of windows) {
|
||||||
|
let tabs = tabsUtils.getTabs(window);
|
||||||
|
|
||||||
|
// Let's collect UCIs for each tab of this window.
|
||||||
|
let map = new Map;
|
||||||
|
for (let tab of tabs) {
|
||||||
|
let xulTab = viewFor(tab);
|
||||||
|
let userContextId = parseInt(xulTab.getAttribute('usercontextid') || 0, 10);
|
||||||
|
if (!map.has(userContextId)) {
|
||||||
|
map.set(userContextId, []);
|
||||||
|
}
|
||||||
|
map.get(userContextId).push(xulTab);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Let's sort the map.
|
||||||
|
let sortMap = new Map([...map.entries()].sort((a, b) => a[0] > b[0]));
|
||||||
|
|
||||||
|
let pos = 0;
|
||||||
|
|
||||||
|
// Let's move tabs.
|
||||||
|
for (let [userContextId, tabs] of sortMap) {
|
||||||
|
for (let tab of tabs) {
|
||||||
|
window.gBrowser.moveTabTo(tab, pos++);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resolve(null);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
openTab(args) {
|
openTab(args) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
let browserWin = Services.wm.getMostRecentWindow('navigator:browser');
|
let browserWin = windowUtils.getMostRecentBrowserWindow();
|
||||||
|
|
||||||
// This should not really happen.
|
// This should not really happen.
|
||||||
if (!browserWin || !browserWin.gBrowser) {
|
if (!browserWin || !browserWin.gBrowser) {
|
||||||
|
|
|
@ -150,33 +150,6 @@ document.querySelector('#edit-containers-link').addEventListener('click', ()=> {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
function moveTabs(sortedTabsArray) {
|
|
||||||
let positionIndex = 0;
|
|
||||||
|
|
||||||
sortedTabsArray.forEach(tabID=> {
|
|
||||||
browser.tabs.move(tabID, {index: positionIndex});
|
|
||||||
positionIndex++;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
document.querySelector('#sort-containers-link').addEventListener('click', ()=> {
|
document.querySelector('#sort-containers-link').addEventListener('click', ()=> {
|
||||||
browser.runtime.sendMessage({
|
browser.runtime.sendMessage({ method: 'sortTabs' });
|
||||||
method: 'queryIdentities'
|
|
||||||
}).then(identities=> {
|
|
||||||
identities.unshift({userContextId: 0});
|
|
||||||
|
|
||||||
browser.runtime.sendMessage({method: 'queryTabs'}).then(tabsArray=> {
|
|
||||||
const sortedTabsArray = [];
|
|
||||||
|
|
||||||
identities.forEach(identity=> {
|
|
||||||
tabsArray.forEach(tab=> {
|
|
||||||
if (tab.userContextId === identity.userContextId) {
|
|
||||||
sortedTabsArray.push(tab.id);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
moveTabs(sortedTabsArray);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
|
Loading…
Add table
Reference in a new issue