瀏覽代碼

added hidden option "ignoredBookmarkFolders" (fix #261)

Former-commit-id: f394839d5467b24d0dd9f24734b4e017c08ffa11
Gildas 6 年之前
父節點
當前提交
bb101e4419

+ 29 - 14
extension/core/bg/bookmarks.js

@@ -79,20 +79,22 @@ singlefile.extension.core.bg.bookmarks = (() => {
 		const tabs = await singlefile.extension.core.bg.tabs.get({ lastFocusedWindow: true, active: true });
 		const options = await singlefile.extension.core.bg.config.getOptions(bookmarkInfo.url);
 		if (options.saveCreatedBookmarks) {
-			if (tabs.length && tabs[0].url == bookmarkInfo.url) {
-				singlefile.extension.core.bg.business.saveTabs(tabs, { bookmarkId: bookmarkInfo.id });
-			} else {
-				const tabs = await singlefile.extension.core.bg.tabs.get({});
-				if (tabs.length) {
-					const tab = tabs.find(tab => tab.url == bookmarkInfo.url);
-					if (tab) {
-						singlefile.extension.core.bg.business.saveTabs([tab], { bookmarkId: bookmarkInfo.id });
-					} else {
-						if (bookmarkInfo.url) {
-							if (bookmarkInfo.url == "about:blank") {
-								browser.bookmarks.onChanged.addListener(onChanged);
-							} else {
-								saveUrl(bookmarkInfo.url);
+			if (!(await findParentFolder(bookmarkInfo.parentId, options.ignoredBookmarkFolders))) {
+				if (tabs.length && tabs[0].url == bookmarkInfo.url) {
+					singlefile.extension.core.bg.business.saveTabs(tabs, { bookmarkId: bookmarkInfo.id });
+				} else {
+					const tabs = await singlefile.extension.core.bg.tabs.get({});
+					if (tabs.length) {
+						const tab = tabs.find(tab => tab.url == bookmarkInfo.url);
+						if (tab) {
+							singlefile.extension.core.bg.business.saveTabs([tab], { bookmarkId: bookmarkInfo.id });
+						} else {
+							if (bookmarkInfo.url) {
+								if (bookmarkInfo.url == "about:blank") {
+									browser.bookmarks.onChanged.addListener(onChanged);
+								} else {
+									saveUrl(bookmarkInfo.url);
+								}
 							}
 						}
 					}
@@ -100,6 +102,19 @@ singlefile.extension.core.bg.bookmarks = (() => {
 			}
 		}
 
+		async function findParentFolder(id, folderNames) {
+			if (id && folderNames.length) {
+				const bookmarkNode = (await browser.bookmarks.get(id))[0];
+				if (bookmarkNode) {
+					return folderNames.includes(bookmarkNode.title) || findParentFolder(bookmarkNode.parentId, folderNames);
+				} else {
+					return false;
+				}
+			} else {
+				return false;
+			}
+		}
+
 		function onChanged(id, changeInfo) {
 			if (id == bookmarkInfo.id && changeInfo.url) {
 				browser.bookmarks.onChanged.removeListener(onChanged);

+ 1 - 0
extension/core/bg/config.js

@@ -87,6 +87,7 @@ singlefile.extension.core.bg.config = (() => {
 		openEditor: false,
 		autoOpenEditor: false,
 		saveCreatedBookmarks: false,
+		ignoredBookmarkFolders: [],
 		replaceBookmarkURL: true,
 		saveFavicon: true
 	};

+ 9 - 0
extension/lib/single-file/browser-polyfill/chrome-browser-polyfill.js

@@ -126,6 +126,15 @@
 				})
 			},
 			bookmarks: {
+				get: id => new Promise((resolve, reject) => {
+					nativeAPI.bookmarks.get(id, result => {
+						if (nativeAPI.runtime.lastError) {
+							reject(nativeAPI.runtime.lastError.message || nativeAPI.runtime.lastError);
+						} else {
+							resolve(result);
+						}
+					});
+				}),
 				onCreated: {
 					addListener: listener => nativeAPI.bookmarks.onCreated.addListener(listener),
 					removeListener: listener => nativeAPI.bookmarks.onCreated.removeListener(listener)