Browse Source

feat: add on browser startup trigger

Ahmad Kholid 3 years ago
parent
commit
cb61f91d86

+ 2 - 1
package.json

@@ -1,6 +1,6 @@
 {
 {
   "name": "automa",
   "name": "automa",
-  "version": "0.16.3",
+  "version": "0.16.2",
   "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": {
@@ -29,6 +29,7 @@
     "@medv/finder": "^2.1.0",
     "@medv/finder": "^2.1.0",
     "@vuex-orm/core": "^0.36.4",
     "@vuex-orm/core": "^0.36.4",
     "compare-versions": "^4.1.2",
     "compare-versions": "^4.1.2",
+    "crypto-js": "^4.1.1",
     "dayjs": "^1.10.7",
     "dayjs": "^1.10.7",
     "defu": "^5.0.1",
     "defu": "^5.0.1",
     "drawflow": "^0.0.51",
     "drawflow": "^0.0.51",

+ 19 - 2
src/background/index.js

@@ -136,6 +136,23 @@ chrome.runtime.onInstalled.addListener((details) => {
       });
       });
   }
   }
 });
 });
+chrome.runtime.onStartup.addListener(async () => {
+  const { onStartupTriggers, workflows } = await browser.storage.local.get([
+    'onStartupTriggers',
+    'workflows',
+  ]);
+
+  (onStartupTriggers || []).forEach((workflowId, index) => {
+    const findWorkflow = workflows.find(({ id }) => id === workflowId);
+
+    if (findWorkflow) {
+      workflow.execute(findWorkflow);
+    } else {
+      onStartupTriggers.splice(index, 1);
+    }
+  });
+  await browser.storage.local.set({ onStartupTriggers });
+});
 
 
 const message = new MessageListener('background');
 const message = new MessageListener('background');
 
 
@@ -218,8 +235,8 @@ message.on('collection:execute', (collection) => {
   engine.init();
   engine.init();
 });
 });
 
 
-message.on('workflow:execute', (param) => {
-  workflow.execute(param);
+message.on('workflow:execute', (workflowData) => {
+  workflow.execute(workflowData);
 });
 });
 message.on('workflow:stop', async (id) => {
 message.on('workflow:stop', async (id) => {
   await workflow.states.stop(id);
   await workflow.states.stop(id);

+ 8 - 1
src/components/newtab/workflow/edit/EditTrigger.vue

@@ -164,7 +164,13 @@
             :placeholder="t('workflow.blocks.trigger.forms.shortcut')"
             :placeholder="t('workflow.blocks.trigger.forms.shortcut')"
           />
           />
           <ui-button
           <ui-button
-            v-tooltip="t('workflow.blocks.trigger.shortcut.tooltip')"
+            v-tooltip="
+              t(
+                `workflow.blocks.trigger.shortcut.${
+                  recordKeys.isRecording ? 'stopRecord' : 'tooltip'
+                }`
+              )
+            "
             icon
             icon
             @click="toggleRecordKeys"
             @click="toggleRecordKeys"
           >
           >
@@ -213,6 +219,7 @@ const triggers = [
   'interval',
   'interval',
   'date',
   'date',
   'specific-day',
   'specific-day',
+  'on-startup',
   'visit-web',
   'visit-web',
   'keyboard-shortcut',
   'keyboard-shortcut',
 ];
 ];

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

@@ -66,6 +66,7 @@
         "useRegex": "Use regex",
         "useRegex": "Use regex",
         "shortcut": {
         "shortcut": {
           "tooltip": "Record shortcut",
           "tooltip": "Record shortcut",
+          "stopRecord": "Stop record",
           "checkboxTitle": "Execute shortcut even when you're in an input element",
           "checkboxTitle": "Execute shortcut even when you're in an input element",
           "checkbox": "Active while in input",
           "checkbox": "Active while in input",
           "note": "Note: keyboard shortcut only working when you're on a webpage"
           "note": "Note: keyboard shortcut only working when you're on a webpage"
@@ -85,6 +86,7 @@
           "date": "On a specific date",
           "date": "On a specific date",
           "specific-day": "On a specific day",
           "specific-day": "On a specific day",
           "visit-web": "When visit a website",
           "visit-web": "When visit a website",
+          "on-startup": "On browser startup",
           "keyboard-shortcut": "Keyboard shortcut"
           "keyboard-shortcut": "Keyboard shortcut"
         }
         }
       },
       },

+ 27 - 5
src/utils/workflow-trigger.js

@@ -6,14 +6,22 @@ export async function cleanWorkflowTriggers(workflowId) {
   try {
   try {
     await browser.alarms.clear(workflowId);
     await browser.alarms.clear(workflowId);
 
 
-    const { visitWebTriggers, shortcuts } = await browser.storage.local.get([
-      'visitWebTriggers',
-      'shortcuts',
-    ]);
+    const { visitWebTriggers, onStartupTriggers, shortcuts } =
+      await browser.storage.local.get([
+        'shortcuts',
+        'visitWebTriggers',
+        'onStartupTriggers',
+      ]);
 
 
     const keyboardShortcuts = Array.isArray(shortcuts) ? {} : shortcuts || {};
     const keyboardShortcuts = Array.isArray(shortcuts) ? {} : shortcuts || {};
     delete keyboardShortcuts[workflowId];
     delete keyboardShortcuts[workflowId];
 
 
+    const startupTriggers = onStartupTriggers || [];
+    const startupTriggerIndex = startupTriggers.indexOf(workflowId);
+    if (startupTriggerIndex !== -1) {
+      startupTriggers.splice(startupTriggerIndex, 1);
+    }
+
     const visitWebTriggerIndex = visitWebTriggers.findIndex(
     const visitWebTriggerIndex = visitWebTriggers.findIndex(
       (item) => item.id === workflowId
       (item) => item.id === workflowId
     );
     );
@@ -24,6 +32,7 @@ export async function cleanWorkflowTriggers(workflowId) {
     await browser.storage.local.set({
     await browser.storage.local.set({
       visitWebTriggers,
       visitWebTriggers,
       shortcuts: keyboardShortcuts,
       shortcuts: keyboardShortcuts,
+      onStartupTriggers: startupTriggers,
     });
     });
   } catch (error) {
   } catch (error) {
     console.error(error);
     console.error(error);
@@ -126,14 +135,27 @@ 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);
+  console.log(startupTriggers);
+
+  await browser.storage.local.set({ onStartupTriggers: startupTriggers });
+}
+
 export async function registerWorkflowTrigger(workflowId, { data }) {
 export async function registerWorkflowTrigger(workflowId, { data }) {
   try {
   try {
     await cleanWorkflowTriggers(workflowId);
     await cleanWorkflowTriggers(workflowId);
 
 
     const triggersHandler = {
     const triggersHandler = {
-      date: registerSpecificDate,
       interval: registerInterval,
       interval: registerInterval,
+      date: registerSpecificDate,
       'visit-web': registerVisitWeb,
       'visit-web': registerVisitWeb,
+      'on-startup': registerOnStartup,
       'specific-day': registerSpecificDay,
       'specific-day': registerSpecificDay,
       'keyboard-shortcut': registerKeyboardShortcut,
       'keyboard-shortcut': registerKeyboardShortcut,
     };
     };

+ 0 - 3
webpack.config.js

@@ -199,9 +199,6 @@ if (env.NODE_ENV === 'development') {
         extractComments: false,
         extractComments: false,
       }),
       }),
     ],
     ],
-    splitChunks: {
-      chunks: ({ name }) => ['elementSelector', 'newtab'].includes(name),
-    },
   };
   };
 }
 }
 
 

+ 5 - 0
yarn.lock

@@ -2659,6 +2659,11 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3:
     shebang-command "^2.0.0"
     shebang-command "^2.0.0"
     which "^2.0.1"
     which "^2.0.1"
 
 
+crypto-js@^4.1.1:
+  version "4.1.1"
+  resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-4.1.1.tgz#9e485bcf03521041bd85844786b83fb7619736cf"
+  integrity sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==
+
 css-loader@5.2.7:
 css-loader@5.2.7:
   version "5.2.7"
   version "5.2.7"
   resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.7.tgz#9b9f111edf6fb2be5dc62525644cbc9c232064ae"
   resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-5.2.7.tgz#9b9f111edf6fb2be5dc62525644cbc9c232064ae"