Browse Source

feat: use download API when has permission

Ahmad Kholid 3 years ago
parent
commit
1da25bbe1a

+ 23 - 6
src/background/workflow-engine/blocks-handler/handler-take-screenshot.js

@@ -2,11 +2,24 @@ import browser from 'webextension-polyfill';
 import { fileSaver } from '@/utils/helper';
 import { fileSaver } from '@/utils/helper';
 import { getBlockConnection } from '../helper';
 import { getBlockConnection } from '../helper';
 
 
-function saveImage({ fileName, uri, ext }) {
+async function saveImage({ filename, uri, ext }) {
+  const hasDownloadAccess = await browser.permissions.contains({
+    permissions: ['downloads'],
+  });
+  const name = `${filename || 'Screenshot'}.${ext || 'png'}`;
+
+  if (hasDownloadAccess) {
+    await browser.downloads.download({
+      url: uri,
+      filename: name,
+    });
+
+    return;
+  }
+
   const image = new Image();
   const image = new Image();
 
 
   image.onload = () => {
   image.onload = () => {
-    const name = `${fileName || 'Screenshot'}.${ext || 'png'}`;
     const canvas = document.createElement('canvas');
     const canvas = document.createElement('canvas');
     canvas.width = image.width;
     canvas.width = image.width;
     canvas.height = image.height;
     canvas.height = image.height;
@@ -31,10 +44,14 @@ async function takeScreenshot({ data, outputs, name }) {
       quality: data.quality,
       quality: data.quality,
       format: data.ext || 'png',
       format: data.ext || 'png',
     };
     };
-    const saveScreenshot = (dataUrl) => {
+    const saveScreenshot = async (dataUrl) => {
       if (data.saveToColumn) this.addDataToColumn(data.dataColumn, dataUrl);
       if (data.saveToColumn) this.addDataToColumn(data.dataColumn, dataUrl);
       if (saveToComputer)
       if (saveToComputer)
-        saveImage({ fileName: data.fileName, uri: dataUrl, ext: data.ext });
+        await saveImage({
+          filename: data.fileName,
+          uri: dataUrl,
+          ext: data.ext,
+        });
       if (data.assignVariable) this.setVariable(data.variableName, dataUrl);
       if (data.assignVariable) this.setVariable(data.variableName, dataUrl);
     };
     };
 
 
@@ -67,11 +84,11 @@ async function takeScreenshot({ data, outputs, name }) {
         await browser.tabs.update(tab.id, { active: true });
         await browser.tabs.update(tab.id, { active: true });
       }
       }
 
 
-      saveScreenshot(screenshot);
+      await saveScreenshot(screenshot);
     } else {
     } else {
       screenshot = await browser.tabs.captureVisibleTab(options);
       screenshot = await browser.tabs.captureVisibleTab(options);
 
 
-      saveScreenshot(screenshot);
+      await saveScreenshot(screenshot);
     }
     }
 
 
     return { data: screenshot, nextBlockId };
     return { data: screenshot, nextBlockId };