Browse Source

feat: add active-tab block

Ahmad Kholid 3 years ago
parent
commit
0a0e87178f

+ 29 - 0
src/background/blocks-handler.js

@@ -73,6 +73,35 @@ export function newTab(block) {
   });
   });
 }
 }
 
 
+export async function activeTab(block) {
+  const nextBlockId = getBlockConnection(block);
+
+  try {
+    const [tab] = await browser.tabs.query({ active: true });
+    const data = {
+      nextBlockId,
+      data: tab.url,
+    };
+
+    if (tab.id === this.tabId) return data;
+
+    await browser.tabs.executeScript(tab.id, {
+      file: './contentScript.bundle.js',
+    });
+
+    this.tabId = tab.id;
+    this._connectTab(tab.id);
+
+    return data;
+  } catch (error) {
+    console.error(error);
+    return {
+      data: '',
+      nextBlockId,
+    };
+  }
+}
+
 export function interactionHandler(block) {
 export function interactionHandler(block) {
   return new Promise((resolve, reject) => {
   return new Promise((resolve, reject) => {
     if (!this._connectedTab) {
     if (!this._connectedTab) {

+ 10 - 3
src/background/index.js

@@ -12,6 +12,8 @@ chrome.runtime.onInstalled.addListener((details) => {
   }
   }
 });
 });
 
 
+const executingWorkflow = {};
+
 function getWorkflow(workflowId) {
 function getWorkflow(workflowId) {
   return new Promise((resolve) => {
   return new Promise((resolve) => {
     browser.storage.local.get('workflows').then(({ workflows }) => {
     browser.storage.local.get('workflows').then(({ workflows }) => {
@@ -23,10 +25,15 @@ function getWorkflow(workflowId) {
 }
 }
 function executeWorkflow(workflow) {
 function executeWorkflow(workflow) {
   try {
   try {
+    console.log(executingWorkflow[workflow.id]);
+    if (executingWorkflow[workflow.id]) return false;
+
     const engine = new WorkflowEngine(workflow);
     const engine = new WorkflowEngine(workflow);
     console.log('execute');
     console.log('execute');
     engine.init();
     engine.init();
 
 
+    executingWorkflow[workflow.id] = engine;
+
     return true;
     return true;
   } catch (error) {
   } catch (error) {
     console.error(error);
     console.error(error);
@@ -36,9 +43,9 @@ function executeWorkflow(workflow) {
 
 
 browser.tabs.onUpdated.addListener(async (tabId, changeInfo, tab) => {
 browser.tabs.onUpdated.addListener(async (tabId, changeInfo, tab) => {
   if (changeInfo.status === 'complete') {
   if (changeInfo.status === 'complete') {
-    const visitWebTriggers =
-      (await browser.storage.local.get('visitWebTriggers'))?.visitWebTriggers ??
-      [];
+    const { visitWebTriggers = [] } = await browser.storage.local.get(
+      'visitWebTriggers'
+    );
     const trigger = visitWebTriggers.find(({ url, isRegex }) => {
     const trigger = visitWebTriggers.find(({ url, isRegex }) => {
       if (url.trim() === '') return false;
       if (url.trim() === '') return false;
 
 

+ 0 - 1
src/background/workflow-engine.js

@@ -165,7 +165,6 @@ class WorkflowEngine {
       this.connectedTab.disconnect();
       this.connectedTab.disconnect();
     }
     }
 
 
-    console.log('===Message Listener===');
     connectedTab.onMessage.addListener(this.tabMessageHandler);
     connectedTab.onMessage.addListener(this.tabMessageHandler);
 
 
     this.connectedTab = connectedTab;
     this.connectedTab = connectedTab;

+ 1 - 0
src/components/block/BlockDelay.vue

@@ -22,6 +22,7 @@
     <input
     <input
       :value="block.data.time"
       :value="block.data.time"
       min="0"
       min="0"
+      title="Delay in millisecond"
       class="px-4 py-2 rounded-lg w-36 bg-input"
       class="px-4 py-2 rounded-lg w-36 bg-input"
       placeholder="(millisecond)"
       placeholder="(millisecond)"
       type="number"
       type="number"

+ 3 - 3
src/newtab/pages/workflows/[id].vue

@@ -102,9 +102,9 @@ function updateWorkflow(data) {
 async function handleWorkflowTrigger({ data }) {
 async function handleWorkflowTrigger({ data }) {
   try {
   try {
     const workflowAlarm = await browser.alarms.get(workflowId);
     const workflowAlarm = await browser.alarms.get(workflowId);
-    const visitWebTriggers =
-      (await browser.storage.local.get('visitWebTriggers')?.visitWebTriggers) ??
-      [];
+    const { visitWebTriggers = [] } = await browser.storage.local.get(
+      'visitWebTriggers'
+    );
     let visitWebTriggerIndex = visitWebTriggers.findIndex(
     let visitWebTriggerIndex = visitWebTriggers.findIndex(
       (item) => item.id === workflowId
       (item) => item.id === workflowId
     );
     );

+ 29 - 17
src/utils/shared.js

@@ -1,5 +1,4 @@
 /* to-do screenshot, assets, tab loaded, opened tab, and close tab block? */
 /* to-do screenshot, assets, tab loaded, opened tab, and close tab block? */
-/* to-do add timeout and trying to exists-element? */
 /* active-tab: execute workflow on active tab */
 /* active-tab: execute workflow on active tab */
 
 
 export const tasks = {
 export const tasks = {
@@ -78,6 +77,35 @@ export const tasks = {
       dataColumn: '',
       dataColumn: '',
     },
     },
   },
   },
+  'active-tab': {
+    name: 'Active tab',
+    description: 'Execute the next block on the current active tab',
+    icon: 'riWindowLine',
+    component: 'BlockBasic',
+    category: 'general',
+    disableEdit: true,
+    inputs: 1,
+    outputs: 1,
+    allowedInputs: true,
+    maxConnection: 1,
+    data: {},
+  },
+  'new-tab': {
+    name: 'New tab',
+    description: 'Create a new tab',
+    icon: 'riGlobalLine',
+    component: 'BlockNewTab',
+    editComponent: 'EditTrigger',
+    category: 'general',
+    inputs: 1,
+    outputs: 1,
+    allowedInputs: true,
+    maxConnection: 1,
+    data: {
+      url: '',
+      active: true,
+    },
+  },
   'export-data': {
   'export-data': {
     name: 'Export data',
     name: 'Export data',
     icon: 'riDownloadLine',
     icon: 'riDownloadLine',
@@ -153,22 +181,6 @@ export const tasks = {
       dataColumn: '',
       dataColumn: '',
     },
     },
   },
   },
-  'new-tab': {
-    name: 'New tab',
-    description: 'Create a new tab',
-    icon: 'riGlobalLine',
-    component: 'BlockNewTab',
-    editComponent: 'EditTrigger',
-    category: 'general',
-    inputs: 1,
-    outputs: 1,
-    allowedInputs: true,
-    maxConnection: 1,
-    data: {
-      url: '',
-      active: true,
-    },
-  },
   forms: {
   forms: {
     name: 'Forms',
     name: 'Forms',
     icon: 'riInputCursorMove',
     icon: 'riInputCursorMove',

+ 1 - 0
tailwind.config.js

@@ -11,6 +11,7 @@ module.exports = {
         secondary: colors.blue['400'],
         secondary: colors.blue['400'],
         accent: colors.gray['900'],
         accent: colors.gray['900'],
         gray: colors.gray,
         gray: colors.gray,
+        orange: colors.orange,
       },
       },
       fontFamily: {
       fontFamily: {
         sans: ['Poppins', 'sans-serif'],
         sans: ['Poppins', 'sans-serif'],