Ver Fonte

never block browser.tabs.on* calls

Gildas há 7 anos atrás
pai
commit
c0d963e15d

+ 11 - 10
extension/core/bg/autosave.js

@@ -22,15 +22,7 @@
 
 singlefile.autosave = (() => {
 
-	browser.tabs.onUpdated.addListener(async (tabId, changeInfo, tab) => {
-		const tabsData = await singlefile.tabsData.get();
-		const options = await singlefile.config.getOptions(tabsData.profileName, tab.url, true);
-		if (options && ((options.autoSaveLoad || options.autoSaveLoadOrUnload) && (tabsData.autoSaveAll || (tabsData.autoSaveUnpinned && !tab.pinned) || (tabsData[tab.id] && tabsData[tab.id].autoSave)))) {
-			if (changeInfo.status == "complete") {
-				singlefile.ui.saveTab(tab, { autoSave: true });
-			}
-		}
-	});
+	browser.tabs.onUpdated.addListener((tabId, changeInfo, tab) => onTabUpdated(tabId, changeInfo, tab));
 	browser.runtime.onMessage.addListener((message, sender) => {
 		if (message.isAutoSaveEnabled) {
 			return isAutoSaveEnabled(sender.tab);
@@ -39,7 +31,6 @@ singlefile.autosave = (() => {
 			saveContent(message, sender.tab);
 		}
 	});
-
 	if (browser.runtime.onMessageExternal) {
 		browser.runtime.onMessageExternal.addListener(async message => {
 			if (message.method == "enableAutoSave") {
@@ -63,6 +54,16 @@ singlefile.autosave = (() => {
 		refresh
 	};
 
+	async function onTabUpdated(tabId, changeInfo, tab) {
+		const tabsData = await singlefile.tabsData.get();
+		const options = await singlefile.config.getOptions(tabsData.profileName, tab.url, true);
+		if (options && ((options.autoSaveLoad || options.autoSaveLoadOrUnload) && (tabsData.autoSaveAll || (tabsData.autoSaveUnpinned && !tab.pinned) || (tabsData[tab.id] && tabsData[tab.id].autoSave)))) {
+			if (changeInfo.status == "complete") {
+				singlefile.ui.saveTab(tab, { autoSave: true });
+			}
+		}
+	}
+
 	async function saveContent(message, tab) {
 		const tabsData = await singlefile.tabsData.get();
 		const options = await singlefile.config.getOptions(tabsData.profileName, tab.url, true);

+ 7 - 5
extension/core/bg/tabs-data.js

@@ -23,11 +23,7 @@
 singlefile.tabsData = (() => {
 
 	let persistentData, temporaryData;
-	browser.tabs.onRemoved.addListener(async tabId => {
-		const tabsData = await getPersistent();
-		delete tabsData[tabId];
-		await setPersistent(tabsData);
-	});
+	browser.tabs.onRemoved.addListener(tabId => onTabRemoved(tabId));
 	getPersistent().then(tabsData => persistentData = tabsData);
 	return {
 		getTemporary,
@@ -35,6 +31,12 @@ singlefile.tabsData = (() => {
 		set: setPersistent
 	};
 
+	async function onTabRemoved(tabId) {
+		const tabsData = await getPersistent();
+		delete tabsData[tabId];
+		setPersistent(tabsData);
+	}
+
 	function getTemporary() {
 		if (temporaryData) {
 			return temporaryData;

+ 13 - 9
extension/ui/bg/ui-button.js

@@ -37,14 +37,8 @@ singlefile.ui.button = (() => {
 			}
 		}
 	});
-	browser.tabs.onActivated.addListener(async activeInfo => {
-		const tab = await browser.tabs.get(activeInfo.tabId);
-		await onTabActivated(tab);
-	});
-	browser.tabs.onCreated.addListener(async tab => {
-		await refreshProperty(tab.id, "setBadgeBackgroundColor", { color: DEFAULT_COLOR });
-		await onTabActivated(tab);
-	});
+	browser.tabs.onActivated.addListener(activeInfo => onTabActivated(activeInfo));
+	browser.tabs.onCreated.addListener(tab => onTabCreated(tab));
 	browser.tabs.onUpdated.addListener((tabId, changeInfo, tab) => onTabActivated(tab));
 	browser.runtime.onMessage.addListener((request, sender) => {
 		if (request.processReset) {
@@ -82,6 +76,16 @@ singlefile.ui.button = (() => {
 		}
 	};
 
+	async function onTabActivated(activeInfo) {
+		const tab = await browser.tabs.get(activeInfo.tabId);
+		onActivated(tab);
+	}
+
+	async function onTabCreated(tab) {
+		await refreshProperty(tab.id, "setBadgeBackgroundColor", { color: DEFAULT_COLOR });
+		onActivated(tab);
+	}
+
 	function onReset(tabId) {
 		refresh(tabId, getProperties({}, "", DEFAULT_COLOR, DEFAULT_TITLE));
 	}
@@ -112,7 +116,7 @@ singlefile.ui.button = (() => {
 		refresh(tabId, getProperties(options, "", [4, 229, 36, 255], browser.i18n.getMessage("buttonSaveProgressTooltip") + (progress * 5) + "%", path, [128, 128, 128, 255]));
 	}
 
-	async function onTabActivated(tab) {
+	async function onActivated(tab) {
 		const autoSave = await singlefile.autosave.enabled(tab.id);
 		const properties = getCurrentProperties(tab.id, { autoSave });
 		await refresh(tab.id, properties, true);

+ 7 - 5
extension/ui/bg/ui-menu.js

@@ -46,15 +46,17 @@ singlefile.ui.menu = (() => {
 
 	let profileIndexes = new Map();
 	initialize();
-	browser.tabs.onActivated.addListener(async activeInfo => {
-		const tab = await browser.tabs.get(activeInfo.tabId);
-		await refreshTab(tab);
-	});
-	browser.tabs.onCreated.addListener(refreshTab);
+	browser.tabs.onActivated.addListener(activeInfo => onTabActivated(activeInfo));
+	browser.tabs.onCreated.addListener(tab => refreshTab(tab));
 	return {
 		refresh
 	};
 
+	async function onTabActivated(activeInfo) {
+		const tab = await browser.tabs.get(activeInfo.tabId);
+		refreshTab(tab);
+	}
+
 	async function refresh(tab) {
 		const [profiles, tabsData] = await Promise.all([singlefile.config.getProfiles(), singlefile.tabsData.get()]);
 		const options = await singlefile.config.getOptions(tabsData.profileName, tab && tab.url, true);