🚀 first release

This commit is contained in:
Rpsl 2021-01-26 16:22:56 +03:00
commit b313bc85f3
10 changed files with 158 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.idea/
*.mov

22
README.md Normal file
View File

@ -0,0 +1,22 @@
Chrome MeTube Downloader
=======
![example]()
Use the context menu to send youtube video into [MeTube](https://github.com/alexta69/metube)
Installation from store
-----
- ~~Google Chrome~~ not available at now. Possible later
Installation from sources
-----
- Download this repository
- Open "[Extensions](chrome://extensions/)" tab
- Turn On "developer mode" in top right corner
- Click "Load unpacked extension"
- Choose folder with sources of repository

BIN
attach/metube-dowloader.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 MiB

46
background.js Normal file
View File

@ -0,0 +1,46 @@
'use strict';
chrome.runtime.onInstalled.addListener(function () {
// https://stackoverflow.com/questions/19377262/regex-for-youtube-url
chrome.contextMenus.create({
id: 'metube',
title: "Send to MeTube",
documentUrlPatterns: [
'https://www.youtube.com/*',
'https://m.youtube.com/*',
'https://youtu.be/*'
],
contexts: ['link'],
});
});
chrome.contextMenus.onClicked.addListener(function (item, tab) {
chrome.storage.sync.get(['metube'], function (data) {
if(data === undefined || !data.hasOwnProperty('metube') ){
// todo notify user about settings
return
}
let url = data.metube;
let xhr = new XMLHttpRequest();
xhr.open("POST", url + "/add", true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.onreadystatechange = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
let json = JSON.parse(xhr.responseText);
if (json.status === "ok") {
chrome.tabs.query({url: url + "/*"}, function (tabs) {
if (tabs.length !== 0) {
chrome.tabs.update(tabs[0].id, {'active': true}, () => {});
} else {
chrome.tabs.create({url: url, index: tab.index + 1});
}
});
} else {
alert("error :: " + json);
}
}
};
xhr.send(JSON.stringify({"quality": "best", "url": item.linkUrl}));
});
});

BIN
icon128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

BIN
icon16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 783 B

BIN
icon48.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

25
manifest.json Normal file
View File

@ -0,0 +1,25 @@
{
"name": "MeTube Downloader",
"description": "Use the context menu to send video into MeTube application",
"version": "1.0",
"manifest_version": 2,
"permissions": ["contextMenus", "storage", "tabs"],
"background": {
"scripts": [
"background.js"
],
"persistent": false
},
"options_ui": {
"page": "options.html",
"browser_style": true
},
"browser_action": {
"default_popup": "options.html"
},
"icons": {
"16": "icon16.png",
"48": "icon48.png",
"128": "icon128.png"
}
}

35
options.html Normal file
View File

@ -0,0 +1,35 @@
<!DOCTYPE html>
<html lang="English">
<head>
<title>MeTube Downloader</title>
<style>
body {
padding: 0 20px 20px 20px;
min-width: 400px;
font-size: 15px;
}
input {
margin: 5px;
outline: none;
}
.hidden {
display: none;
}
</style>
</head>
<body>
<h3>About</h3>
<p>This extension is context menu button for sending links of youtube videos into you own instance of MeTube</p>
<p>This extension won't work without installed MeTube. For additional instructions see <a href="https://github.com/alexta69/metube" target="_blank">github page of MeTube</a>.</p>
<p>If you have some throubles with extension you can open issue on github page of extension.</p>
<p>&nbsp;</p>
<h3>Settings</h3>
<form id="form">
<label for="metube">Url of MeTube</label><input type="url" placeholder="http://0.0.0.0:8081/" name="metube" id="metube">
<button type='submit'>Save</button>
<p id="saved" class="hidden">Settings saved!</p>
</form>
</body>
<script src="options.js"></script>
</html>

28
options.js Normal file
View File

@ -0,0 +1,28 @@
async function saveOptions() {
let url = document.getElementById("metube").value;
if (url.endsWith('/')) {
url = url.slice(0, -1)
}
chrome.storage.sync.set({"metube": url}, function () {
document.getElementById("saved").classList.remove('hidden');
setTimeout(function () {
document.getElementById("saved").classList.add('hidden');
}, 1000 * 10)
});
}
async function restoreOptions() {
chrome.storage.sync.get(['metube'], function (data) {
document.getElementById("metube").value = data.metube;
});
}
window.addEventListener("DOMContentLoaded", restoreOptions, {passive: true});
document.querySelector("form").addEventListener("submit", (e) => {
e.preventDefault();
saveOptions();
}, {passive: false});