فهرست منبع

remove download listener once the download finished

Gildas 7 سال پیش
والد
کامیت
0a03793bfc
2فایلهای تغییر یافته به همراه11 افزوده شده و 5 حذف شده
  1. 9 4
      extension/core/bg/bg.js
  2. 2 1
      lib/browser-polyfill/custom-browser-polyfill.js

+ 9 - 4
extension/core/bg/bg.js

@@ -47,11 +47,16 @@ singlefile.core = (() => {
 		if (request.download) {
 			try {
 				return browser.downloads.download({ url: request.url, saveAs: request.saveAs, filename: request.filename.replace(/[/?<>\\:*|"]/g, "_") })
-					.then(downloadId => new Promise(resolve => browser.downloads.onChanged.addListener(event => {
-						if (event.id == downloadId && event.state && event.state.current == "complete") {
-							resolve({});
+					.then(downloadId => new Promise(resolve => {
+						browser.downloads.onChanged.addListener(onChanged);
+
+						function onChanged(event) {
+							if (event.id == downloadId && event.state && event.state.current == "complete") {
+								resolve({});
+								browser.downloads.onChanged.removeListener(onChanged);
+							}
 						}
-					})))
+					}))
 					.catch(() => ({ notSupported: true }));
 			} catch (error) {
 				return Promise.resolve({ notSupported: true });

+ 2 - 1
lib/browser-polyfill/custom-browser-polyfill.js

@@ -118,7 +118,8 @@
 					});
 				}),
 				onChanged: {
-					addListener: listener => chrome.downloads.onChanged.addListener(listener)
+					addListener: listener => chrome.downloads.onChanged.addListener(listener),
+					removeListener: listener => chrome.downloads.onChanged.removeListener(listener)
 				}
 			},
 			menus: {