Pārlūkot izejas kodu

feat: save download id in save assets block

Ahmad Kholid 2 gadi atpakaļ
vecāks
revīzija
01f94a4ee4

+ 17 - 0
src/components/newtab/workflow/edit/EditSaveAssets.vue

@@ -58,6 +58,22 @@
           {{ t(`workflow.blocks.base.downloads.onConflict.${item}`) }}
           {{ t(`workflow.blocks.base.downloads.onConflict.${item}`) }}
         </option>
         </option>
       </ui-select>
       </ui-select>
+      <hr class="w-full my-4" />
+      <label class="flex items-center">
+        <ui-switch
+          :model-value="data.saveDownloadIds"
+          @change="updateData({ saveDownloadIds: $event })"
+        />
+        <p class="ml-2">
+          {{ t('workflow.blocks.save-assets.saveDownloadIds') }}
+        </p>
+      </label>
+      <insert-workflow-data
+        v-if="data.saveDownloadIds"
+        :data="data"
+        variables
+        @update="updateData"
+      />
     </template>
     </template>
   </edit-interaction-base>
   </edit-interaction-base>
 </template>
 </template>
@@ -66,6 +82,7 @@ import { useI18n } from 'vue-i18n';
 import { useHasPermissions } from '@/composable/hasPermissions';
 import { useHasPermissions } from '@/composable/hasPermissions';
 import EditInteractionBase from './EditInteractionBase.vue';
 import EditInteractionBase from './EditInteractionBase.vue';
 import EditAutocomplete from './EditAutocomplete.vue';
 import EditAutocomplete from './EditAutocomplete.vue';
+import InsertWorkflowData from './InsertWorkflowData.vue';
 
 
 const props = defineProps({
 const props = defineProps({
   data: {
   data: {

+ 1 - 0
src/locales/en/blocks.json

@@ -212,6 +212,7 @@
         "name": "Save assets",
         "name": "Save assets",
         "description": "Save assets (image, video, audio, or file) from an element or URL",
         "description": "Save assets (image, video, audio, or file) from an element or URL",
         "filename": "Filename (optional)",
         "filename": "Filename (optional)",
+        "saveDownloadIds": "Save items' download ids",
         "contentTypes": {
         "contentTypes": {
           "title": "Type",
           "title": "Type",
           "element": "Media element (image, audio, or video)",
           "element": "Media element (image, audio, or video)",

+ 5 - 0
src/utils/shared.js

@@ -943,7 +943,12 @@ export const tasks = {
       type: 'element',
       type: 'element',
       url: '',
       url: '',
       filename: '',
       filename: '',
+      saveDownloadIds: false,
       onConflict: 'uniquify',
       onConflict: 'uniquify',
+      dataColumn: '',
+      saveData: true,
+      assignVariable: false,
+      variableName: '',
     },
     },
   },
   },
   'press-key': {
   'press-key': {

+ 14 - 3
src/workflowEngine/blocksHandler/handlerSaveAssets.js

@@ -43,6 +43,8 @@ export default async function ({ data, id, label }) {
     return browser.downloads.download(options);
     return browser.downloads.download(options);
   };
   };
 
 
+  let downloadIds = null;
+
   if (data.type === 'element') {
   if (data.type === 'element') {
     sources = await this._sendMessageToTab({
     sources = await this._sendMessageToTab({
       id,
       id,
@@ -51,13 +53,22 @@ export default async function ({ data, id, label }) {
       tabId: this.activeTab.id,
       tabId: this.activeTab.id,
     });
     });
 
 
-    await Promise.all(sources.map((url) => downloadFile(url)));
+    downloadIds = await Promise.all(sources.map((url) => downloadFile(url)));
   } else if (data.type === 'url') {
   } else if (data.type === 'url') {
-    await downloadFile(data.url);
+    downloadIds = await downloadFile(data.url);
+  }
+
+  if (data.saveDownloadIds) {
+    if (data.assignVariable) {
+      this.setVariable(data.variableName, downloadIds);
+    }
+    if (data.saveData) {
+      this.addDataToColumn(data.dataColumn, downloadIds);
+    }
   }
   }
 
 
   return {
   return {
-    data: sources,
+    data: { sources, downloadIds },
     nextBlockId: this.getBlockConnections(id),
     nextBlockId: this.getBlockConnections(id),
   };
   };
 }
 }

+ 2 - 1
src/workflowEngine/index.js

@@ -161,7 +161,8 @@ export function executeWorkflow(workflowData, options) {
   if (!workflowData || workflowData.isDisabled) return;
   if (!workflowData || workflowData.isDisabled) return;
 
 
   const isMV2 = browser.runtime.getManifest().manifest_version === 2;
   const isMV2 = browser.runtime.getManifest().manifest_version === 2;
-  const context = workflowData.settings.execContext;
+  const context = workflowData?.settings?.execContext;
+
   if (isMV2 || context === 'background') {
   if (isMV2 || context === 'background') {
     sendMessage('workflow:execute', { ...workflowData, options }, 'background');
     sendMessage('workflow:execute', { ...workflowData, options }, 'background');
     return;
     return;