Просмотр исходного кода

order tabs by index (cf #278)

Former-commit-id: bfb25b13bc70174b0b21427624e2fd791221b82c
Gildas 6 лет назад
Родитель
Сommit
c5088f6002

+ 1 - 1
extension/core/bg/autosave.js

@@ -68,7 +68,7 @@ singlefile.extension.core.bg.autosave = (() => {
 		const [options, autoSaveEnabled] = await Promise.all([singlefile.extension.core.bg.config.getOptions(tab.url, true), isEnabled(tab)]);
 		if (options && ((options.autoSaveLoad || options.autoSaveLoadOrUnload) && autoSaveEnabled)) {
 			if (changeInfo.status == "complete") {
-				singlefile.extension.core.bg.business.saveTab(tab, { autoSave: true });
+				singlefile.extension.core.bg.business.saveTabs([tab], { autoSave: true });
 			}
 		}
 	}

+ 7 - 3
extension/core/bg/business.js

@@ -44,16 +44,17 @@ singlefile.extension.core.bg.business = (() => {
 
 	return {
 		isSavingTab: tab => currentSaves.has(tab.id),
-		saveTab,
+		saveTabs,
 		saveLink,
 		cancelTab
 	};
 
-	async function saveTab(tab, options = {}) {
+	async function saveTabs(tabs, options = {}) {
 		const config = singlefile.extension.core.bg.config;
 		const autosave = singlefile.extension.core.bg.autosave;
 		const ui = singlefile.extension.ui.bg.main;
 		maxParallelWorkers = (await config.get()).maxParallelWorkers;
+		const tab = tabs.shift();
 		const tabId = tab.id;
 		options.tabId = tabId;
 		options.tabIndex = tab.index;
@@ -82,12 +83,15 @@ singlefile.extension.core.bg.business = (() => {
 				ui.onError(tabId);
 			}
 		}
+		if (tabs.length) {
+			saveTabs(tabs, options = {});
+		}
 	}
 
 	async function saveLink(url) {
 		const tabs = singlefile.extension.core.bg.tabs;
 		const tab = await tabs.create({ url, active: false });
-		await saveTab(tab, { autoClose: true });
+		await saveTabs([tab], { autoClose: true });
 	}
 
 	async function cancelTab(tab) {

+ 4 - 1
extension/core/bg/tabs.js

@@ -30,7 +30,10 @@ singlefile.extension.core.bg.tabs = (() => {
 	browser.tabs.onRemoved.addListener(tabId => onTabRemoved(tabId));
 	return {
 		onMessage,
-		get: options => browser.tabs.query(options),
+		get: async options => {
+			const tabs = await browser.tabs.query(options);
+			return tabs.sort((tab1, tab2) => tab1.index - tab2.index);
+		},
 		create: async createProperties => {
 			const tab = await browser.tabs.create(createProperties);
 			return new Promise((resolve, reject) => {

+ 2 - 2
extension/ui/bg/ui-button.js

@@ -106,14 +106,14 @@ singlefile.extension.ui.bg.button = (() => {
 		if (!allTabs.length) {
 			toggleSaveTab(tab);
 		} else {
-			allTabs.forEach(tab => (tab.active || tab.highlighted) && toggleSaveTab(tab));
+			business.saveTabs(allTabs);
 		}
 
 		function toggleSaveTab(tab) {
 			if (business.isSavingTab(tab)) {
 				business.cancelTab(tab);
 			} else {
-				business.saveTab(tab);
+				business.saveTabs([tab]);
 			}
 		}
 	});

+ 1 - 1
extension/ui/bg/ui-commands.js

@@ -32,7 +32,7 @@ singlefile.extension.ui.bg.commands = (() => {
 		commands.onCommand.addListener(async command => {
 			if (command == "save-all-tabs") {
 				const allTabs = await singlefile.extension.core.bg.tabs.get({ currentWindow: true });
-				allTabs.forEach(tab => singlefile.extension.core.bg.business.saveTab(tab));
+				singlefile.extension.core.bg.business.saveTabs(allTabs);
 			}
 		});
 	}

+ 6 - 6
extension/ui/bg/ui-menus.js

@@ -323,26 +323,26 @@ singlefile.extension.ui.bg.menus = (() => {
 					if (event.linkUrl) {
 						business.saveLink(event.linkUrl);
 					} else {
-						business.saveTab(tab);
+						business.saveTabs([tab]);
 					}
 				}
 				if (event.menuItemId == MENU_ID_SAVE_SELECTED) {
-					business.saveTab(tab, { selected: true });
+					business.saveTabs([tab], { selected: true });
 				}
 				if (event.menuItemId == MENU_ID_SAVE_FRAME) {
-					business.saveTab(tab, { frameId: event.frameId });
+					business.saveTabs([tab], { frameId: event.frameId });
 				}
 				if (event.menuItemId == MENU_ID_SAVE_SELECTED_TABS || event.menuItemId == MENU_ID_BUTTON_SAVE_SELECTED_TABS) {
 					const allTabs = await tabs.get({ currentWindow: true, highlighted: true });
-					allTabs.forEach(tab => business.saveTab(tab));
+					business.saveTabs(allTabs);
 				}
 				if (event.menuItemId == MENU_ID_SAVE_UNPINNED_TABS || event.menuItemId == MENU_ID_BUTTON_SAVE_UNPINNED_TABS) {
 					const allTabs = await tabs.get({ currentWindow: true, pinned: false });
-					allTabs.forEach(tab => business.saveTab(tab));
+					business.saveTabs(allTabs);
 				}
 				if (event.menuItemId == MENU_ID_SAVE_ALL_TABS || event.menuItemId == MENU_ID_BUTTON_SAVE_ALL_TABS) {
 					const allTabs = await tabs.get({ currentWindow: true });
-					allTabs.forEach(tab => business.saveTab(tab));
+					business.saveTabs(allTabs);
 				}
 				if (event.menuItemId == MENU_ID_AUTO_SAVE_TAB) {
 					const allTabsData = await tabsData.get(tab.id);