« get me outta code hell

interactive-bgm - Browser extension that adds background music based on the site you're browsing
about summary refs log tree commit diff
path: root/extension/background.js
diff options
context:
space:
mode:
Diffstat (limited to 'extension/background.js')
-rw-r--r--extension/background.js28
1 files changed, 23 insertions, 5 deletions
diff --git a/extension/background.js b/extension/background.js
index c450c9d..3a51809 100644
--- a/extension/background.js
+++ b/extension/background.js
@@ -1,3 +1,5 @@
+import {getRuleScoreOnPage} from './lib.js';
+
 console.log('Start');
 
 const port = browser.runtime.connectNative('interactive_bgm');
@@ -29,8 +31,8 @@ port.onMessage.addListener(({type, trackName}) => {
 
 const delay = ms => new Promise(resolve => setTimeout(resolve, ms));
 
-browser.runtime.onMessage.addListener(async ({hostname, type, base64, trackName}, sender, sendResponse) => {
-    if (hostname) {
+browser.runtime.onMessage.addListener(async ({urlString, music, type, base64, trackName}, sender, sendResponse) => {
+    if (urlString) {
         browser.storage.sync.get(['siteSettings', 'disableEverywhere'])
             .then(({siteSettings, disableEverywhere}) => {
                 if (disableEverywhere) {
@@ -38,12 +40,28 @@ browser.runtime.onMessage.addListener(async ({hostname, type, base64, trackName}
                     return;
                 }
 
-                const mode = siteSettings[hostname];
+                const url = new URL(urlString);
+
+                const allRules = siteSettings;
 
-                if (mode) {
-                    port.postMessage(mode.map(track => ({track, volume: 100})));
+                const rulesOnThisPage = allRules.map(rule => ({
+                    rule,
+                    score: getRuleScoreOnPage(rule, urlString)
+                })).filter(obj => obj.score > 0);
+
+                if (!rulesOnThisPage.length) {
+                    return;
                 }
+
+                rulesOnThisPage.sort((a, b) => b.score - a.score);
+
+                const {rule} = rulesOnThisPage[0];
+                const {music} = rule;
+
+                port.postMessage(music.map(track => ({track, volume: 100})));
             });
+    } else if (music) {
+        port.postMessage(music.map(track => ({track, volume: 100})));
     } else if (type === 'uploadTrack' && trackName && base64) {
         port.postMessage({type: 'uploadTrack', trackName, base64});
         return new Promise(resolve => {