Browse Source

fix: `specific day` trigger not working

Ahmad Kholid 3 năm trước cách đây
mục cha
commit
8dc6155c67

+ 36 - 12
src/background/index.js

@@ -1,4 +1,5 @@
 import browser from 'webextension-polyfill';
+import dayjs from '@/lib/dayjs';
 import { MessageListener } from '@/utils/message';
 import { parseJSON, findTriggerBlock } from '@/utils/helper';
 import getFile from '@/utils/getFile';
@@ -342,21 +343,44 @@ browser.runtime.onInstalled.addListener(async ({ reason }) => {
   }
 });
 browser.runtime.onStartup.addListener(async () => {
-  const { onStartupTriggers, workflows } = await browser.storage.local.get([
-    'onStartupTriggers',
-    'workflows',
-  ]);
+  const { workflows } = await browser.storage.local.get('workflows');
 
-  (onStartupTriggers || []).forEach((workflowId, index) => {
-    const findWorkflow = workflows.find(({ id }) => id === workflowId);
+  for (const currWorkflow of workflows) {
+    let triggerBlock = currWorkflow.trigger;
 
-    if (findWorkflow) {
-      workflow.execute(findWorkflow);
-    } else {
-      onStartupTriggers.splice(index, 1);
+    if (!triggerBlock) {
+      const flow =
+        typeof currWorkflow.drawflow === 'string'
+          ? parseJSON(currWorkflow.drawflow, {})
+          : currWorkflow.drawflow;
+
+      triggerBlock = findTriggerBlock(flow);
     }
-  });
-  await browser.storage.local.set({ onStartupTriggers });
+
+    if (triggerBlock) {
+      if (triggerBlock.type === 'specific-day') {
+        const alarm = await browser.alarms.get(currWorkflow.id);
+
+        if (!alarm) await registerSpecificDay(currWorkflow.id, triggerBlock);
+      } else if (triggerBlock.type === 'date' && triggerBlock.date) {
+        const [hour, minute] = triggerBlock.time.split(':');
+        const date = dayjs(triggerBlock.date)
+          .hour(hour)
+          .minute(minute)
+          .second(0);
+
+        const isBefore = dayjs().isBefore(date);
+
+        if (isBefore) {
+          await browser.alarms.create(currWorkflow.id, {
+            when: date.valueOf(),
+          });
+        }
+      } else if (triggerBlock.type === 'on-startup') {
+        workflow.execute(currWorkflow);
+      }
+    }
+  }
 });
 
 const message = new MessageListener('background');

+ 1 - 1
src/newtab/pages/settings/SettingsIndex.vue

@@ -107,7 +107,7 @@ function updateSetting(path, value) {
     userSettings = cloneDeep(userSettings);
   }
 
-  browser.storage.local.set({ settings: userSettings }).catch(console.log);
+  browser.storage.local.set({ settings: userSettings });
 }
 function updateLanguage(value) {
   isLangChange.value = true;

+ 2 - 9
src/utils/workflowTrigger.js

@@ -149,15 +149,8 @@ export async function registerKeyboardShortcut(workflowId, data) {
   }
 }
 
-export async function registerOnStartup(workflowId) {
-  const { onStartupTriggers } = await browser.storage.local.get(
-    'onStartupTriggers'
-  );
-  const startupTriggers = onStartupTriggers || [];
-
-  startupTriggers.push(workflowId);
-
-  await browser.storage.local.set({ onStartupTriggers: startupTriggers });
+export async function registerOnStartup() {
+  // Do nothing
 }
 
 export async function registerWorkflowTrigger(workflowId, { data }) {