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

extracted downloadBlob function

Former-commit-id: 72aac203ac46412f669b34799584f4911f907efc
Gildas 6 лет назад
Родитель
Сommit
d08671ac1a
3 измененных файлов с 39 добавлено и 34 удалено
  1. 4 3
      extension/core/bg/business.js
  2. 32 31
      extension/core/bg/downloads.js
  3. 3 0
      extension/ui/bg/ui-main.js

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

@@ -133,12 +133,13 @@ singlefile.extension.core.bg.business = (() => {
 			const saveInfo = currentSaves.get(tabId);
 			saveInfo.cancelled = true;
 			singlefile.extension.core.bg.tabs.sendMessage(tabId, { method: "content.cancelSave" });
-			if (saveInfo.method == "content.autosave") {
-				singlefile.extension.ui.bg.main.onEnd(tabId, true);
-			}
 			if (saveInfo.cancel) {
 				saveInfo.cancel();
 			}
+			if (saveInfo.method == "content.autosave") {
+				singlefile.extension.ui.bg.main.onEnd(tabId, true);
+			}
+			singlefile.extension.ui.bg.main.onCancelled(saveInfo.tab);
 			saveInfo.resolve();
 		}
 		if (pendingSaves.has(tabId)) {

+ 32 - 31
extension/core/bg/downloads.js

@@ -105,43 +105,44 @@ singlefile.extension.core.bg.downloads = (() => {
 					message.content = contents.join("");
 					saveToClipboard(message);
 				} else {
-					const blob = new Blob([contents], { type: MIMETYPE_HTML });
-					try {
-						if (message.saveToGDrive) {
-							await uploadPage(tab.id, message.filename, blob, {
-								forceWebAuthFlow: message.forceWebAuthFlow,
-								extractAuthCode: message.extractAuthCode
-							}, {
-								onProgress: (offset, size) => singlefile.extension.ui.bg.button.onUploadProgress(tab.id, offset, size)
-							});
-						} else {
-							message.url = URL.createObjectURL(blob);
-							await downloadPage(message, {
-								confirmFilename: message.confirmFilename,
-								incognito: tab.incognito,
-								filenameConflictAction: message.filenameConflictAction,
-								filenameReplacementCharacter: message.filenameReplacementCharacter
-							});
-						}
-						singlefile.extension.ui.bg.main.onEnd(tab.id);
-					} catch (error) {
-						if (error.message && error.message == "upload_cancelled") {
-							singlefile.extension.core.bg.business.cancelTab(tab.id);
-						} else {
-							console.error(error); // eslint-disable-line no-console
-							singlefile.extension.ui.bg.main.onError(tab.id);
-						}
-					} finally {
-						if (message.url) {
-							URL.revokeObjectURL(message.url);
-						}
-					}
+					await downloadBlob(new Blob([contents], { type: MIMETYPE_HTML }), tab.id, tab.incognito, message);
 				}
 			}
 		}
 		return {};
 	}
 
+	async function downloadBlob(blob, tabId, incognito, message) {
+		try {
+			if (message.saveToGDrive) {
+				await uploadPage(tabId, message.filename, blob, {
+					forceWebAuthFlow: message.forceWebAuthFlow,
+					extractAuthCode: message.extractAuthCode
+				}, {
+					onProgress: (offset, size) => singlefile.extension.ui.bg.main.onUploadProgress(tabId, offset, size)
+				});
+			} else {
+				message.url = URL.createObjectURL(blob);
+				await downloadPage(message, {
+					confirmFilename: message.confirmFilename,
+					incognito,
+					filenameConflictAction: message.filenameConflictAction,
+					filenameReplacementCharacter: message.filenameReplacementCharacter
+				});
+			}
+			singlefile.extension.ui.bg.main.onEnd(tabId);
+		} catch (error) {
+			if (!error.message || error.message != "upload_cancelled") {
+				console.error(error); // eslint-disable-line no-console
+				singlefile.extension.ui.bg.main.onError(tabId);
+			}
+		} finally {
+			if (message.url) {
+				URL.revokeObjectURL(message.url);
+			}
+		}
+	}
+
 	async function getAuthInfo(authOptions, force) {
 		let authInfo = await singlefile.extension.core.bg.config.getAuthInfo();
 		const options = {

+ 3 - 0
extension/ui/bg/ui-main.js

@@ -54,6 +54,9 @@ singlefile.extension.ui.bg.main = (() => {
 		onCancelled(tabId) {
 			singlefile.extension.ui.bg.button.onCancelled(tabId);
 		},
+		onUploadProgress(tabId, index, maxIndex) {
+			singlefile.extension.ui.bg.button.onUploadProgress(tabId, index, maxIndex);
+		},
 		onTabCreated(tab) {
 			singlefile.extension.ui.bg.menus.onTabCreated(tab);
 		},