فهرست منبع

fix: on startup trigger not working

Ahmad Kholid 2 سال پیش
والد
کامیت
515eda256e
1فایلهای تغییر یافته به همراه44 افزوده شده و 30 حذف شده
  1. 44 30
      src/background/index.js

+ 44 - 30
src/background/index.js

@@ -528,43 +528,57 @@ browser.runtime.onInstalled.addListener(async ({ reason }) => {
   }
 });
 browser.runtime.onStartup.addListener(async () => {
-  const { workflows, workflowHosts, teamWorkflows } =
-    await browser.storage.local.get([
-      'workflows',
-      'workflowHosts',
-      'teamWorkflows',
-    ]);
-  const convertToArr = (value) =>
-    Array.isArray(value) ? value : Object.values(value);
-
-  const workflowsArr = convertToArr(workflows);
+  try {
+    const { workflows, workflowHosts, teamWorkflows } =
+      await browser.storage.local.get([
+        'workflows',
+        'workflowHosts',
+        'teamWorkflows',
+      ]);
+    const convertToArr = (value) =>
+      Array.isArray(value) ? value : Object.values(value);
+
+    const workflowsArr = convertToArr(workflows);
+
+    if (workflowHosts) {
+      workflowsArr.push(...convertToArr(workflowHosts));
+    }
+    if (teamWorkflows) {
+      workflowsArr.push(...flattenTeamWorkflows(teamWorkflows));
+    }
 
-  if (workflowHosts) {
-    workflowsArr.push(...convertToArr(workflowHosts));
-  }
-  if (teamWorkflows) {
-    workflowsArr.push(...flattenTeamWorkflows(teamWorkflows));
-  }
+    for (const currWorkflow of workflowsArr) {
+      let triggerBlock = currWorkflow.trigger;
 
-  for (const currWorkflow of workflowsArr) {
-    let triggerBlock = currWorkflow.trigger;
+      if (!triggerBlock) {
+        const flow =
+          typeof currWorkflow.drawflow === 'string'
+            ? parseJSON(currWorkflow.drawflow, {})
+            : currWorkflow.drawflow;
 
-    if (!triggerBlock) {
-      const flow =
-        typeof currWorkflow.drawflow === 'string'
-          ? parseJSON(currWorkflow.drawflow, {})
-          : currWorkflow.drawflow;
+        triggerBlock = findTriggerBlock(flow)?.data;
+      }
 
-      triggerBlock = findTriggerBlock(flow)?.data;
-    }
+      const executeWorkflow = async (trigger, triggerData) => {
+        if (trigger.type === 'on-startup') {
+          workflow.execute(currWorkflow);
+        } else {
+          await registerWorkflowTrigger(currWorkflow.id, triggerData);
+        }
+      };
 
-    if (triggerBlock) {
-      if (triggerBlock.type === 'on-startup') {
-        workflow.execute(currWorkflow);
-      } else {
-        await registerWorkflowTrigger(currWorkflow.id, { data: triggerBlock });
+      if (triggerBlock) {
+        if (triggerBlock.triggers) {
+          for (const trigger of triggerBlock.triggers) {
+            await executeWorkflow(trigger, trigger);
+          }
+        } else {
+          await executeWorkflow(triggerBlock, { data: triggerBlock });
+        }
       }
     }
+  } catch (error) {
+    console.error(error);
   }
 });