diff --git a/src/background.ts b/src/background.ts index fd414b2..43ec586 100644 --- a/src/background.ts +++ b/src/background.ts @@ -18,7 +18,6 @@ import * as _ from 'lodash/fp'; import * as browser from 'webextension-polyfill'; import { MessageKind, RedirectType } from './types'; -import constants from './constants'; import Preferences from './preferences'; import * as InvidiousAPI from './invidious-api'; import * as PeertubeAPI from './peertube-api'; @@ -33,18 +32,19 @@ const getTitle = async (id: string) => { } /** - * Redirect Youtube without loading it if the video is found and preferences lAHhDKzReKBQKj3R + * Redirect Youtube without loading it if the video is found and preferences * set on automatic redirection. */ const redirectYoutube = async (r) => { const prefs = await Preferences.getPreferences(); if (prefs.redirectYoutube == RedirectType.Auto) { - const query = new URLSearchParams(r.url.substring(r.url.indexOf('?') + 1)); + const isEmbed = r.url.indexOf('embed') >= 0; - const title = await getTitle(query.get('v')); + const query = isEmbed ? r.url.substr(r.url.lastIndexOf('/') + 1, 11) : r.url.substr(r.url.indexOf('?v=') + 3, 11); + const title = await getTitle(query); const video = await searchByName(title); - const url = getPeertubeVideoURL(video, prefs); + const url = await getPeertubeVideoURL(video, prefs, isEmbed); return { redirectUrl: url @@ -69,12 +69,13 @@ const redirectPeertube = async (r) => { if (prefs.redirectPeertube == RedirectType.Auto) { const id = _.last(_.split('/', r.url)); const video: any = await PeertubeAPI.getVideo(id); + const isEmbed = r.url.indexOf('embed') >= 0; if (prefs.openInOriginalInstance && video.account.host === hostname) { return {}; // Don't redirect if original instance } - const url = getPeertubeVideoURL(video, prefs); + const url = getPeertubeVideoURL(video, prefs, isEmbed); return { redirectUrl: url @@ -97,7 +98,7 @@ const searchByName = query => new Promise(async (resolve, reject) => { }); }); -browser.runtime.onMessage.addListener(function(message, sender) { +browser.runtime.onMessage.addListener(function(message) { switch (message.kind) { case MessageKind.SearchByName: return searchByName(message.query); @@ -108,12 +109,12 @@ browser.runtime.onMessage.addListener(function(message, sender) { browser.webRequest.onBeforeRequest.addListener( redirectYoutube, - { urls: ['*://*.youtube.com/watch?v=*'] }, + { urls: ['*://*.youtube.com/watch?v=*', '*://*.youtube.com/embed/*'] }, ['blocking'] ); browser.webRequest.onBeforeRequest.addListener( redirectPeertube, - { urls: ['*://*/videos/watch/*'] }, + { urls: ['*://*/videos/watch/*', '*://*/videos/embed/*'] }, ['blocking'] ); diff --git a/src/peertube.ts b/src/peertube.ts index 726bd2f..250fa04 100644 --- a/src/peertube.ts +++ b/src/peertube.ts @@ -48,7 +48,7 @@ async function peertubeify() { case RedirectType.Show: { searchVideo() .then(async video => { - const link = videoLink(getPeertubeVideoURL(video, prefs), video); + const link = videoLink(getPeertubeVideoURL(video, prefs, false), video); removeVideoLink(); document.querySelector('body').appendChild(link); }).catch(removeVideoLink); diff --git a/src/util.ts b/src/util.ts index 502d097..a669824 100644 --- a/src/util.ts +++ b/src/util.ts @@ -4,8 +4,10 @@ export function htmlToElement(html: string): Element { return template.content.firstElementChild; } -export function getPeertubeVideoURL(video, prefs) { - return `https://${getPeertubeHost(video.account.host, prefs)}/videos/watch/${video.uuid}` +export function getPeertubeVideoURL(video, prefs, isEmbed) { + const endpoint = isEmbed ? 'embed' : 'watch'; + + return `https://${getPeertubeHost(video.account.host, prefs)}/videos/${endpoint}/${video.uuid}`; } export function getPeertubeHost(host, prefs) { diff --git a/src/youtube.ts b/src/youtube.ts index 7fe2f57..9d42e1d 100644 --- a/src/youtube.ts +++ b/src/youtube.ts @@ -39,7 +39,7 @@ async function peertubeify(query: String) { case RedirectType.Show: { searchVideo(query) .then(async video => { - const url = getPeertubeVideoURL(video, prefs) + const url = getPeertubeVideoURL(video, prefs, false) const link = videoLink(url, video); removeVideoLink();