Browse Source

fix cancel upload on Google Drive

Gildas 3 years ago
parent
commit
a951e08884
3 changed files with 12 additions and 12 deletions
  1. 3 1
      src/core/bg/autosave.js
  2. 3 5
      src/core/bg/downloads.js
  3. 6 6
      src/lib/gdrive/gdrive.js

+ 3 - 1
src/core/bg/autosave.js

@@ -159,7 +159,9 @@ async function saveContent(message, tab) {
 				}
 				if (options.saveToGDrive) {
 					const blob = new Blob([pageData.content], { type: "text/html" });
-					await (await downloads.saveToGDrive(message.taskId, pageData.filename, blob, options, {})).uploadPromise;
+					await downloads.saveToGDrive(message.taskId, pageData.filename, blob, options, {
+						forceWebAuthFlow: options.forceWebAuthFlow
+					});
 				} else if (options.saveWithWebDAV) {
 					await downloads.saveWithWebDAV(message.taskId, pageData.filename, pageData.content, options.webDAVURL, options.webDAVUser, options.webDAVPassword);
 				} else if (options.saveToGitHub) {

+ 3 - 5
src/core/bg/downloads.js

@@ -130,11 +130,11 @@ async function downloadContent(contents, tab, incognito, message) {
 		if (message.saveWithWebDAV) {
 			await saveWithWebDAV(message.taskId, message.filename, contents.join(""), message.webDAVURL, message.webDAVUser, message.webDAVPassword);
 		} else if (message.saveToGDrive) {
-			await (await saveToGDrive(message.taskId, message.filename, new Blob(contents, { type: MIMETYPE_HTML }), {
+			await saveToGDrive(message.taskId, message.filename, new Blob(contents, { type: MIMETYPE_HTML }), {
 				forceWebAuthFlow: message.forceWebAuthFlow
 			}, {
 				onProgress: (offset, size) => ui.onUploadProgress(tab.id, offset, size)
-			})).uploadPromise;
+			});
 		} else if (message.saveToGitHub) {
 			await (await saveToGitHub(message.taskId, message.filename, contents.join(""), message.githubToken, message.githubUser, message.githubRepository, message.githubBranch)).pushPromise;
 		} else if (message.saveWithCompanion) {
@@ -270,9 +270,7 @@ async function saveToGDrive(taskId, filename, blob, authOptions, uploadOptions)
 		await getAuthInfo(authOptions);
 		const taskInfo = business.getTaskInfo(taskId);
 		if (!taskInfo || !taskInfo.cancelled) {
-			const uploadInfo = await gDrive.upload(filename, blob, uploadOptions);
-			business.setCancelCallback(taskId, uploadInfo.cancelUpload);
-			return uploadInfo;
+			return gDrive.upload(filename, blob, uploadOptions, callback => business.setCancelCallback(taskId, callback));
 		}
 	}
 	catch (error) {

+ 6 - 6
src/lib/gdrive/gdrive.js

@@ -138,7 +138,7 @@ class GDrive {
 			}
 		}
 	}
-	async upload(fullFilename, blob, options, retry = true) {
+	async upload(fullFilename, blob, options, setCancelCallback, retry = true) {
 		const parentFolderId = await getParentFolderId(this, fullFilename);
 		const fileParts = fullFilename.split("/");
 		const filename = fileParts.pop();
@@ -150,15 +150,15 @@ class GDrive {
 			onProgress: options.onProgress
 		});
 		try {
-			return {
-				cancelUpload: () => uploader.cancelled = true,
-				uploadPromise: await uploader.upload()
-			};
+			if (setCancelCallback) {
+				setCancelCallback(() => uploader.cancelled = true);
+			}
+			await uploader.upload();
 		}
 		catch (error) {
 			if (error.message == "path_not_found" && retry) {
 				this.folderIds.clear();
-				return this.upload(fullFilename, blob, options, false);
+				return this.upload(fullFilename, blob, options, setCancelCallback);
 			} else {
 				throw error;
 			}