Merge pull request #169 from bakulf/hideTabs
Fixing the hiding of tabs #167 Restoring hidden tabs #156
This commit is contained in:
Коммит
a086e3c003
45
index.js
45
index.js
|
@ -31,6 +31,7 @@ const { getFavicon } = require("sdk/places/favicon");
|
||||||
const { modelFor } = require("sdk/model/core");
|
const { modelFor } = require("sdk/model/core");
|
||||||
const prefService = require("sdk/preferences/service");
|
const prefService = require("sdk/preferences/service");
|
||||||
const self = require("sdk/self");
|
const self = require("sdk/self");
|
||||||
|
const ss = require("sdk/simple-storage");
|
||||||
const { Style } = require("sdk/stylesheet/style");
|
const { Style } = require("sdk/stylesheet/style");
|
||||||
const tabs = require("sdk/tabs");
|
const tabs = require("sdk/tabs");
|
||||||
const tabsUtils = require("sdk/tabs/utils");
|
const tabsUtils = require("sdk/tabs/utils");
|
||||||
|
@ -85,6 +86,18 @@ const ContainerService = {
|
||||||
this._remapTabsIfMissing(identity.userContextId);
|
this._remapTabsIfMissing(identity.userContextId);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Let's restore the hidden tabs from the previous session.
|
||||||
|
if (prefService.get('browser.startup.page') == 3 &&
|
||||||
|
"identitiesData" in ss.storage) {
|
||||||
|
ContextualIdentityService.getIdentities().forEach(identity => {
|
||||||
|
if (identity.userContextId in ss.storage.identitiesData &&
|
||||||
|
"hiddenTabs" in ss.storage.identitiesData[identity.userContextId]) {
|
||||||
|
this._identitiesState[identity.userContextId].hiddenTabs =
|
||||||
|
ss.storage.identitiesData[identity.userContextId].hiddenTabs;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
tabs.on("open", tab => {
|
tabs.on("open", tab => {
|
||||||
const userContextId = this._getUserContextIdFromTab(tab);
|
const userContextId = this._getUserContextIdFromTab(tab);
|
||||||
if (userContextId) {
|
if (userContextId) {
|
||||||
|
@ -141,7 +154,7 @@ const ContainerService = {
|
||||||
image: this._fromIconToName(identity.icon),
|
image: this._fromIconToName(identity.icon),
|
||||||
color: this._fromColorToName(identity.color),
|
color: this._fromColorToName(identity.color),
|
||||||
userContextId: identity.userContextId,
|
userContextId: identity.userContextId,
|
||||||
hasHiddenTabs: !!this._identitiesState[identity.userContextId].hiddenTabUrls.length,
|
hasHiddenTabs: !!this._identitiesState[identity.userContextId].hiddenTabs.length,
|
||||||
hasOpenTabs: !!this._identitiesState[identity.userContextId].openTabs
|
hasOpenTabs: !!this._identitiesState[identity.userContextId].openTabs
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
@ -208,7 +221,7 @@ const ContainerService = {
|
||||||
|
|
||||||
_createIdentityState() {
|
_createIdentityState() {
|
||||||
return {
|
return {
|
||||||
hiddenTabUrls: [],
|
hiddenTabs: [],
|
||||||
openTabs: 0
|
openTabs: 0
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
@ -232,11 +245,14 @@ const ContainerService = {
|
||||||
_closeTabs(tabsToClose) {
|
_closeTabs(tabsToClose) {
|
||||||
// We create a new tab only if the current operation closes all the
|
// We create a new tab only if the current operation closes all the
|
||||||
// existing ones.
|
// existing ones.
|
||||||
|
let promise;
|
||||||
if (tabs.length !== tabsToClose.length) {
|
if (tabs.length !== tabsToClose.length) {
|
||||||
return Promise.resolve(null);
|
promise = Promise.resolve(null);
|
||||||
|
} else {
|
||||||
|
promise = this.openTab({});
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.openTab({}).then(() => {
|
return promise.then(() => {
|
||||||
for (let tab of tabsToClose) { // eslint-disable-line prefer-const
|
for (let tab of tabsToClose) { // eslint-disable-line prefer-const
|
||||||
tab.close();
|
tab.close();
|
||||||
}
|
}
|
||||||
|
@ -254,6 +270,11 @@ const ContainerService = {
|
||||||
return Promise.resolve(browserWin);
|
return Promise.resolve(browserWin);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
_syncTabs() {
|
||||||
|
// Let's store all what we have.
|
||||||
|
ss.storage.identitiesData = this._identitiesState;
|
||||||
|
},
|
||||||
|
|
||||||
// Tabs management
|
// Tabs management
|
||||||
|
|
||||||
hideTabs(args) {
|
hideTabs(args) {
|
||||||
|
@ -281,11 +302,13 @@ const ContainerService = {
|
||||||
object.favicon = "";
|
object.favicon = "";
|
||||||
});
|
});
|
||||||
|
|
||||||
this._identitiesState[args.userContextId].hiddenTabUrls.push(object);
|
this._identitiesState[args.userContextId].hiddenTabs.push(object);
|
||||||
tabsToClose.push(tab);
|
tabsToClose.push(tab);
|
||||||
});
|
});
|
||||||
|
|
||||||
return this._closeTabs(tabsToClose);
|
return this._closeTabs(tabsToClose).then(() => {
|
||||||
|
return this._syncTabs();
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
showTabs(args) {
|
showTabs(args) {
|
||||||
|
@ -300,13 +323,15 @@ const ContainerService = {
|
||||||
|
|
||||||
const promises = [];
|
const promises = [];
|
||||||
|
|
||||||
for (let object of this._identitiesState[args.userContextId].hiddenTabUrls) { // eslint-disable-line prefer-const
|
for (let object of this._identitiesState[args.userContextId].hiddenTabs) { // eslint-disable-line prefer-const
|
||||||
promises.push(this.openTab({ userContextId: args.userContextId, url: object.url }));
|
promises.push(this.openTab({ userContextId: args.userContextId, url: object.url }));
|
||||||
}
|
}
|
||||||
|
|
||||||
this._identitiesState[args.userContextId].hiddenTabUrls = [];
|
this._identitiesState[args.userContextId].hiddenTabs = [];
|
||||||
|
|
||||||
return Promise.all(promises);
|
return Promise.all(promises).then(() => {
|
||||||
|
return this._syncTabs();
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
sortTabs() {
|
sortTabs() {
|
||||||
|
@ -386,7 +411,7 @@ const ContainerService = {
|
||||||
}
|
}
|
||||||
|
|
||||||
Promise.all(promises).then(() => {
|
Promise.all(promises).then(() => {
|
||||||
resolve(list.concat(this._identitiesState[args.userContextId].hiddenTabUrls));
|
resolve(list.concat(this._identitiesState[args.userContextId].hiddenTabs));
|
||||||
}).catch((e) => {
|
}).catch((e) => {
|
||||||
reject(e);
|
reject(e);
|
||||||
});
|
});
|
||||||
|
|
Загрузка…
Ссылка в новой задаче