Ahmad Kholid 3 years ago
parent
commit
e3345a2891

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "automa",
   "name": "automa",
-  "version": "1.3.0",
+  "version": "1.4.0",
   "description": "An extension for automating your browser by connecting blocks",
   "description": "An extension for automating your browser by connecting blocks",
   "license": "MIT",
   "license": "MIT",
   "repository": {
   "repository": {

+ 0 - 1
src/background/index.js

@@ -355,7 +355,6 @@ message.on('set:active-tab', (tabId) => {
 
 
 message.on('debugger:send-command', ({ tabId, method, params }) => {
 message.on('debugger:send-command', ({ tabId, method, params }) => {
   return new Promise((resolve) => {
   return new Promise((resolve) => {
-    console.log(tabId, method, params);
     chrome.debugger.sendCommand({ tabId }, method, params, resolve);
     chrome.debugger.sendCommand({ tabId }, method, params, resolve);
   });
   });
 });
 });

+ 18 - 5
src/background/workflow-engine/blocks-handler/handler-loop-data.js

@@ -49,13 +49,22 @@ async function loopData({ data, id, outputs }) {
       };
       };
 
 
       const currLoopData = await getLoopData[data.loopThrough]();
       const currLoopData = await getLoopData[data.loopThrough]();
+      let index = 0;
 
 
-      if (data.loopThrough !== 'numbers' && !Array.isArray(currLoopData)) {
-        throw new Error('invalid-loop-data');
+      if (data.loopThrough !== 'numbers') {
+        if (!Array.isArray(currLoopData)) {
+          throw new Error('invalid-loop-data');
+        }
+
+        if (data.resumeLastWorkflow) {
+          index = JSON.parse(localStorage.getItem(`index:${id}`)) || 0;
+        } else if (data.startIndex > 0) {
+          index = data.startIndex;
+        }
       }
       }
 
 
       this.loopList[data.loopId] = {
       this.loopList[data.loopId] = {
-        index: 0,
+        index,
         blockId: id,
         blockId: id,
         id: data.loopId,
         id: data.loopId,
         data: currLoopData,
         data: currLoopData,
@@ -68,11 +77,15 @@ async function loopData({ data, id, outputs }) {
       /* eslint-disable-next-line */
       /* eslint-disable-next-line */
       this.referenceData.loopData[data.loopId] = {
       this.referenceData.loopData[data.loopId] = {
         data:
         data:
-          data.loopThrough === 'numbers' ? data.fromNumber : currLoopData[0],
-        $index: 0,
+          data.loopThrough === 'numbers'
+            ? data.fromNumber
+            : currLoopData[index],
+        $index: index,
       };
       };
     }
     }
 
 
+    localStorage.setItem(`index:${id}`, this.loopList[data.loopId].index);
+
     return {
     return {
       nextBlockId,
       nextBlockId,
       data: this.referenceData.loopData[data.loopId],
       data: this.referenceData.loopData[data.loopId],

+ 6 - 9
src/background/workflow-engine/blocks-handler/handler-new-tab.js

@@ -4,7 +4,7 @@ import {
   attachDebugger,
   attachDebugger,
   sendDebugCommand,
   sendDebugCommand,
 } from '../helper';
 } from '../helper';
-import { isWhitespace } from '@/utils/helper';
+import { isWhitespace, sleep } from '@/utils/helper';
 
 
 async function newTab(block) {
 async function newTab(block) {
   if (this.windowId) {
   if (this.windowId) {
@@ -49,14 +49,11 @@ async function newTab(block) {
         await attachDebugger(tab.id, this.activeTab.id);
         await attachDebugger(tab.id, this.activeTab.id);
 
 
         if (customUserAgent) {
         if (customUserAgent) {
-          const res = await sendDebugCommand(
-            tab.id,
-            'Network.setUserAgentOverride',
-            {
-              userAgent,
-            }
-          );
-          console.log('agent:', res);
+          await sendDebugCommand(tab.id, 'Network.setUserAgentOverride', {
+            userAgent,
+          });
+          await browser.tabs.reload(tab.id);
+          await sleep(1000);
         }
         }
       }
       }
 
 

+ 10 - 5
src/background/workflow-engine/engine.js

@@ -41,12 +41,17 @@ class WorkflowEngine {
     this.eventListeners = {};
     this.eventListeners = {};
     this.columns = { column: { index: 0, type: 'any' } };
     this.columns = { column: { index: 0, type: 'any' } };
 
 
-    const globalData = options?.data?.globalData || workflow.globalData;
-    const variables = isObject(options?.data?.variables)
-      ? options?.data.variables
-      : {};
+    let variables = {};
+    let globalData = {};
 
 
-    options.data = { globalData, variables };
+    if (options && options?.data) {
+      globalData = options.data.globalData || workflow.globalData;
+      variables = isObject(options.data.variables)
+        ? options?.data.variables
+        : {};
+
+      options.data = { globalData, variables };
+    }
     this.options = options;
     this.options = options;
 
 
     this.activeTab = {
     this.activeTab = {

+ 0 - 1
src/components/newtab/workflow/WorkflowDataTable.vue

@@ -105,7 +105,6 @@ function addColumn() {
 watch(
 watch(
   () => state.columns,
   () => state.columns,
   debounce((newValue) => {
   debounce((newValue) => {
-    console.log(newValue);
     emit('update', { table: newValue });
     emit('update', { table: newValue });
   }, 250),
   }, 250),
   { deep: true }
   { deep: true }

+ 28 - 10
src/components/newtab/workflow/edit/EditLoopData.vue

@@ -86,16 +86,34 @@
         "
         "
       />
       />
     </div>
     </div>
-    <ui-input
-      v-if="data.loopThrough !== 'numbers'"
-      :model-value="data.maxLoop"
-      :label="t('workflow.blocks.loop-data.maxLoop.label')"
-      :title="t('workflow.blocks.loop-data.maxLoop.title')"
-      class="w-full mt-2"
-      min="0"
-      type="number"
-      @change="updateData({ maxLoop: +$event || 0 })"
-    />
+    <template v-if="data.loopThrough !== 'numbers'">
+      <ui-input
+        :model-value="data.maxLoop"
+        :label="t('workflow.blocks.loop-data.maxLoop.label')"
+        :title="t('workflow.blocks.loop-data.maxLoop.title')"
+        class="w-full mt-2"
+        min="0"
+        type="number"
+        @change="updateData({ maxLoop: +$event || 0 })"
+      />
+      <ui-input
+        v-if="!data.resumeLastWorkflow"
+        :model-value="data.startIndex"
+        :label="t('workflow.blocks.loop-data.startIndex')"
+        placeholder="0"
+        class="w-full mt-2"
+        min="0"
+        type="number"
+        @change="updateData({ startIndex: +$event || 0 })"
+      />
+      <ui-checkbox
+        :model-value="data.resumeLastWorkflow"
+        class="mt-1"
+        @change="updateData({ resumeLastWorkflow: $event })"
+      >
+        {{ t('workflow.blocks.loop-data.resumeLastWorkflow') }}
+      </ui-checkbox>
+    </template>
     <ui-modal
     <ui-modal
       v-model="state.showDataModal"
       v-model="state.showDataModal"
       title="Data"
       title="Data"

+ 0 - 1
src/components/newtab/workflow/edit/EditNewTab.vue

@@ -36,7 +36,6 @@
       {{ t('workflow.blocks.new-tab.tabToGroup') }}
       {{ t('workflow.blocks.new-tab.tabToGroup') }}
     </ui-checkbox>
     </ui-checkbox>
     <ui-checkbox
     <ui-checkbox
-      v-if="false"
       :model-value="data.customUserAgent"
       :model-value="data.customUserAgent"
       block
       block
       class="mt-2"
       class="mt-2"

+ 1 - 1
src/content/handle-selector.js

@@ -92,7 +92,7 @@ export default async function (
 
 
     if (data.multiple && selectorType === 'cssSelector') {
     if (data.multiple && selectorType === 'cssSelector') {
       await Promise.allSettled(
       await Promise.allSettled(
-        element.map((el) => {
+        Array.from(element).map((el) => {
           markElement(el, { id, data });
           markElement(el, { id, data });
           return onSelected(el);
           return onSelected(el);
         })
         })

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

@@ -145,7 +145,7 @@
           }
           }
         },
         },
         "refKey": {
         "refKey": {
-          "label": "Reference key",
+          "label": "Reference key (optional)",
           "placeholder": "Key name"
           "placeholder": "Key name"
         },
         },
         "spreadsheetId": {
         "spreadsheetId": {
@@ -406,6 +406,8 @@
         "description": "Iterate through table or your custom data",
         "description": "Iterate through table or your custom data",
         "loopId": "Loop id",
         "loopId": "Loop id",
         "refKey": "Reference key",
         "refKey": "Reference key",
+        "startIndex": "Start from index",
+        "resumeLastWorkflow": "Resume last workflow",
         "modal": {
         "modal": {
           "fileTooLarge": "File too large to edit",
           "fileTooLarge": "File too large to edit",
           "maxFile": "Max file size is 1MB",
           "maxFile": "Max file size is 1MB",

+ 3 - 2
src/utils/shared.js

@@ -608,14 +608,15 @@ export const tasks = {
     data: {
     data: {
       loopId: '',
       loopId: '',
       maxLoop: 0,
       maxLoop: 0,
-      fromNumber: 1,
       toNumber: 10,
       toNumber: 10,
+      fromNumber: 1,
+      startIndex: 0,
       loopData: '[]',
       loopData: '[]',
       description: '',
       description: '',
       variableName: '',
       variableName: '',
       referenceKey: '',
       referenceKey: '',
       elementSelector: '',
       elementSelector: '',
-      specificRowAndCol: false,
+      resumeLastWorkflow: false,
       loopThrough: 'data-columns',
       loopThrough: 'data-columns',
     },
     },
   },
   },