Procházet zdrojové kódy

[chad-magnets] Initial version

Innokentiy Enikeev před 4 roky
rodič
revize
ce79a6cdc6

+ 16 - 0
chad-magnets/background.js

@@ -0,0 +1,16 @@
+browser.browserAction.onClicked.addListener(()=>browser.runtime.openOptionsPage());
+
+async function handleMessage(request) {
+  if (request.magnet) {
+    const opts = await browser.storage.local.get();
+    if (!opts.enabled) return new Promise((r,e) => e(new Error("Extension is not enabled")));
+    return fetch(opts.url, {
+      method: 'POST',
+      body: JSON.stringify({url: request.magnet})
+    }).then(res => res.text()).then(text => {
+      if (text === 'OK') return text;
+      return new Promise((r,e) => e(new Error(text)));
+    });
+  }
+}
+browser.runtime.onMessage.addListener(handleMessage);

+ 56 - 0
chad-magnets/chadify.js

@@ -0,0 +1,56 @@
+function handleChadClick(e, magnet) {
+  e.preventDefault(true);
+  const a = e.target;
+  if (a.processing) return;
+
+  a.processing = true;
+  a.style.borderBottom = 'dotted yellow';
+  a.title = 'Processing';
+
+  browser.runtime.sendMessage({magnet}).then((response) => {
+    a.style.borderBottom = 'dotted green';
+    a.title = 'Added';
+  }, (error) => {
+    console.log(`Error: ${error}`);
+    a.style.borderBottom = 'dotted red';
+    a.title = `${error}`;
+    a.processing = false;
+  });
+}
+
+async function processMagnets(el) {
+  const opts = await browser.storage.local.get("enabled");
+  if (!opts.enabled) return;
+
+  const magnets = el.querySelectorAll("a[href^='magnet:?']")
+  for (let magnet of magnets) {
+    if (magnet.getAttribute('data-chadded')) continue;
+
+    const img = document.createElement('img');
+    img.src = browser.runtime.getURL("logo256.png");
+    img.style = `width: auto; height: 1.2em; vertical-align: text-bottom; padding-right: 0.3em;`;
+    const a = document.createElement('a');
+    a.style = 'text-decoration: none;';
+    a.appendChild(img);
+    a.insertAdjacentText('beforeend', 'Add to Chad Music');
+    a.addEventListener("click", (e) => handleChadClick(e, magnet.href));
+
+    magnet.insertAdjacentElement('afterend', a);
+    magnet.setAttribute('data-chadded', 1);
+  }
+}
+
+// Process page
+processMagnets(document.body);
+
+// Now monitor the DOM for additions and substitute emoji into new nodes.
+// @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver.
+const observer = new MutationObserver((mutations) => {
+  mutations.forEach((mutation) => {
+    if (mutation.addedNodes) mutation.addedNodes.forEach(processMagnets);
+  });
+});
+observer.observe(document.body, {
+  childList: true,
+  subtree: true
+});

binární
chad-magnets/logo256.png


+ 47 - 0
chad-magnets/manifest.json

@@ -0,0 +1,47 @@
+{
+  "manifest_version": 2,
+  "name": "Chad-music magnets",
+  "version": "1.0",
+
+  "description": "Adds button to torrent magnet links to upload to chad-music",
+
+  "icons": {
+    "256": "logo256.png"
+  },
+
+  "browser_action": {
+    "default_icon": "logo256.png",
+    "default_title": "Chad Music"
+  },
+
+  "options_ui": {
+    "page": "options.html",
+    "browser_style": true,
+    "chrome_style": true
+  },
+
+  "background": {
+    "scripts": ["background.js"]
+  },
+
+  "content_scripts": [
+    {
+      "matches": ["<all_urls>"],
+      "js": ["chadify.js"]
+    }
+  ],
+
+  "web_accessible_resources": [
+    "logo256.png"
+  ],
+
+  "permissions": ["storage",
+                  "https://chatikbot.chad-partners.com/*"],
+
+  "browser_specific_settings": {
+    "gecko": {
+      "id": "music@chad-partners.com",
+      "strict_min_version": "42.0"
+    }
+  }
+}

+ 21 - 0
chad-magnets/options.html

@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+  </head>
+
+  <body>
+    <form>
+      <div class="browser-style">
+        <label for="enabled">Enabled:</label>
+        <input type="checkbox" id="enabled" />
+      </div>
+      <div class="browser-style">
+        <label for="url">Submit url:</label>
+        <input type="text" placeholder="https://chatikbot.chad-partners.com/..." id="url" size="70" />
+      </div>
+      <button class="browser-style" type="submit">Confirm</button>
+    </form>
+    <script src="options.js"></script>
+  </body>
+</html>

+ 23 - 0
chad-magnets/options.js

@@ -0,0 +1,23 @@
+function saveOptions(e) {
+  e.preventDefault();
+  browser.storage.local.set({
+    url: document.querySelector("#url").value,
+    enabled: document.querySelector("#enabled").checked
+  });
+}
+
+function restoreOptions() {
+  function setCurrentChoice(result) {
+    document.querySelector("#enabled").checked = result.enabled;
+    document.querySelector("#url").value = result.url || 'https://';
+  }
+  function onError(error) {
+    console.log(`Error: ${error}`);
+  }
+
+  let getting = browser.storage.local.get();
+  getting.then(setCurrentChoice, onError);
+}
+
+document.addEventListener("DOMContentLoaded", restoreOptions);
+document.querySelector("form").addEventListener("submit", saveOptions);