Procházet zdrojové kódy

added support of Google Drive with autosave enabled

Former-commit-id: 5f7a56fac76b1cc98a6c77f4a6603b7d9b99823a
Gildas před 6 roky
rodič
revize
39e69aa805
2 změnil soubory, kde provedl 21 přidání a 11 odebrání
  1. 10 3
      extension/core/bg/autosave.js
  2. 11 8
      extension/core/bg/downloads.js

+ 10 - 3
extension/core/bg/autosave.js

@@ -122,11 +122,18 @@ singlefile.extension.core.bg.autosave = (() => {
 		if (options.includeInfobar) {
 			await singlefile.common.ui.content.infobar.includeScript(pageData);
 		}
-		pageData.url = URL.createObjectURL(new Blob([pageData.content], { type: "text/html" }));
 		try {
-			await singlefile.extension.core.bg.downloads.downloadPage(pageData, options);
+			const blob = new Blob([pageData.content], { type: "text/html" });
+			if (options.saveToGDrive) {
+				await singlefile.extension.core.bg.downloads.uploadPage(pageData.filename, blob, options, {});
+			} else {
+				pageData.url = URL.createObjectURL(blob);
+				await singlefile.extension.core.bg.downloads.downloadPage(pageData, options);
+			}
 		} finally {
-			URL.revokeObjectURL(pageData.url);
+			if (pageData.url) {
+				URL.revokeObjectURL(pageData.url);
+			}
 		}
 	}
 

+ 11 - 8
extension/core/bg/downloads.js

@@ -45,7 +45,8 @@ singlefile.extension.core.bg.downloads = (() => {
 	return {
 		onMessage,
 		download,
-		downloadPage
+		downloadPage,
+		uploadPage
 	};
 
 	async function onMessage(message, sender) {
@@ -85,7 +86,12 @@ singlefile.extension.core.bg.downloads = (() => {
 						const blob = new Blob([contents], { type: MIMETYPE_HTML });
 						try {
 							if (message.saveToGDrive) {
-								await uploadPage(message.filename, blob, sender.tab.id, { forceWebAuthFlow: message.forceWebAuthFlow, extractAuthCode: message.extractAuthCode });
+								await uploadPage(message.filename, blob, {
+									forceWebAuthFlow: message.forceWebAuthFlow,
+									extractAuthCode: message.extractAuthCode
+								}, {
+									onProgress: (offset, size) => singlefile.extension.ui.bg.button.onProgress(sender.tab.id, offset, size)
+								});
 							} else {
 								message.url = URL.createObjectURL(blob);
 								await downloadPage(message, {
@@ -146,13 +152,10 @@ singlefile.extension.core.bg.downloads = (() => {
 		return authInfo;
 	}
 
-	async function uploadPage(filename, blob, tabId, authOptions) {
-		singlefile.extension.ui.bg.button.onUpload(tabId);
+	async function uploadPage(filename, blob, authOptions, uploadOptions) {
 		try {
 			await getAuthInfo(authOptions);
-			await gDrive.upload(filename, blob, {
-				onProgress: (offset, size) => singlefile.extension.ui.bg.button.onProgress(tabId, offset, size)
-			});
+			await gDrive.upload(filename, blob, uploadOptions);
 		}
 		catch (error) {
 			if (error.message == "invalid_token") {
@@ -171,7 +174,7 @@ singlefile.extension.core.bg.downloads = (() => {
 				} else {
 					await singlefile.extension.core.bg.config.removeAuthInfo();
 				}
-				await uploadPage(filename, blob, tabId, authOptions);
+				await uploadPage(filename, blob, authOptions, uploadOptions);
 			} else {
 				throw error;
 			}