108 lines
3.2 KiB
JavaScript
108 lines
3.2 KiB
JavaScript
// '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",
|
|
targetUrlPatterns: [
|
|
'https://www.youtube.com/*',
|
|
'https://m.youtube.com/*',
|
|
'https://youtu.be/*'
|
|
],
|
|
contexts: ['link'],
|
|
});
|
|
});
|
|
|
|
function sendVideoUrlToMetube(videoUrl, metubeUrl, format, callback) {
|
|
console.log("Sending videoUrl=" + videoUrl + " to metubeUrl=" + metubeUrl);
|
|
|
|
if (typeof callback !== 'function') {
|
|
callback = function () {
|
|
};
|
|
}
|
|
|
|
fetch(metubeUrl + "/add", {
|
|
method: 'POST',
|
|
headers: {
|
|
'Accept': 'application/json',
|
|
'Content-Type': 'application/json'
|
|
},
|
|
body: JSON.stringify({
|
|
"quality": "best",
|
|
"format": format,
|
|
"url": videoUrl
|
|
})
|
|
})
|
|
.then(response => response.json())
|
|
.then(function (response) {
|
|
if (response.status === 'ok') {
|
|
callback();
|
|
}
|
|
})
|
|
.catch(e => console.log("Ran into an unexpected error: " + e));
|
|
}
|
|
|
|
chrome.contextMenus.onClicked.addListener(function (item, tab) {
|
|
chrome.storage.sync.get(['metube', 'contextMenuClickBehavior', 'defaultFormat'], function (data) {
|
|
if (data === undefined || !data.hasOwnProperty('metube') || data.metube === "") {
|
|
openTab(chrome.runtime.getURL('options.html'), tab);
|
|
return
|
|
}
|
|
|
|
let needToSwitch = (data.contextMenuClickBehavior === 'context-menu-send-current-url-and-switch');
|
|
|
|
sendVideoUrlToMetube(item.linkUrl, data.metube, data.defaultFormat, function () {
|
|
if (needToSwitch) {
|
|
openTab(data.metube, tab);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
chrome.action.onClicked.addListener(function (tab) {
|
|
chrome.storage.sync.get(['metube', 'clickBehavior', 'defaultFormat'], function (data) {
|
|
if (data === undefined || !data.hasOwnProperty('metube') || data.metube === "") {
|
|
openTab(chrome.runtime.getURL('options.html'), tab);
|
|
return
|
|
}
|
|
|
|
if (data.clickBehavior === 'go-to-metube') {
|
|
openTab(data.metube, tab);
|
|
return;
|
|
}
|
|
|
|
let needToSwitch = (data.clickBehavior === 'send-current-url-and-switch');
|
|
|
|
chrome.tabs.query({
|
|
active: true,
|
|
lastFocusedWindow: true
|
|
}, function (tabs) {
|
|
// use this tab to get the youtube video URL
|
|
let videoUrl = tabs[0].url;
|
|
sendVideoUrlToMetube(videoUrl, data.metube, data.defaultFormat, function () {
|
|
if (!needToSwitch) {
|
|
openTab(data.metube, tab);
|
|
}
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
function openTab(url, currentTab) {
|
|
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: currentTab.index + 1
|
|
});
|
|
}
|
|
});
|
|
}
|