|
@@ -362,19 +362,26 @@ singlefile.config = (() => {
|
|
|
filename: "singlefile-settings.json",
|
|
filename: "singlefile-settings.json",
|
|
|
saveAs: true
|
|
saveAs: true
|
|
|
};
|
|
};
|
|
|
- const downloadId = await browser.downloads.download(downloadInfo);
|
|
|
|
|
|
|
+ let downloadId;
|
|
|
|
|
+ try {
|
|
|
|
|
+ downloadId = await browser.downloads.download(downloadInfo);
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ if (!error.message || !error.message.toLowerCase().includes("canceled")) {
|
|
|
|
|
+ throw error;
|
|
|
|
|
+ }
|
|
|
|
|
+ } finally {
|
|
|
|
|
+ URL.revokeObjectURL(url);
|
|
|
|
|
+ }
|
|
|
return new Promise((resolve, reject) => {
|
|
return new Promise((resolve, reject) => {
|
|
|
browser.downloads.onChanged.addListener(onChanged);
|
|
browser.downloads.onChanged.addListener(onChanged);
|
|
|
|
|
|
|
|
function onChanged(event) {
|
|
function onChanged(event) {
|
|
|
if (event.id == downloadId && event.state) {
|
|
if (event.id == downloadId && event.state) {
|
|
|
if (event.state.current == "complete") {
|
|
if (event.state.current == "complete") {
|
|
|
- URL.revokeObjectURL(url);
|
|
|
|
|
resolve({});
|
|
resolve({});
|
|
|
browser.downloads.onChanged.removeListener(onChanged);
|
|
browser.downloads.onChanged.removeListener(onChanged);
|
|
|
}
|
|
}
|
|
|
if (event.state.current == "interrupted" && (!event.error || event.error.current != "USER_CANCELED")) {
|
|
if (event.state.current == "interrupted" && (!event.error || event.error.current != "USER_CANCELED")) {
|
|
|
- URL.revokeObjectURL(url);
|
|
|
|
|
reject(new Error(event.state.current));
|
|
reject(new Error(event.state.current));
|
|
|
browser.downloads.onChanged.removeListener(onChanged);
|
|
browser.downloads.onChanged.removeListener(onChanged);
|
|
|
}
|
|
}
|