mirror of
https://github.com/LBRYFoundation/Watch-on-LBRY.git
synced 2025-08-23 17:47:26 +00:00
🍙 Refactor, moved many backend stuff to content
This commit is contained in:
parent
b750c86b88
commit
1e7293826a
2 changed files with 33 additions and 48 deletions
|
@ -40,35 +40,3 @@ async function ctxFromURL(href: string): Promise<UpdateContext | void> {
|
||||||
delete ctxFromURLOnGoingPromise[descriptor.id]
|
delete ctxFromURLOnGoingPromise[descriptor.id]
|
||||||
return await promise
|
return await promise
|
||||||
}
|
}
|
||||||
|
|
||||||
// handles lbry.tv -> lbry app redirect
|
|
||||||
chrome.tabs.onUpdated.addListener(async (tabId, changeInfo, { url: tabUrl }) => {
|
|
||||||
const { redirect, targetPlatform } = await getExtensionSettingsAsync('redirect', 'targetPlatform');
|
|
||||||
if (!redirect || targetPlatform !== 'app' || !changeInfo.url || !tabUrl?.startsWith('https://odysee.com/')) return;
|
|
||||||
|
|
||||||
const url = appRedirectUrl(tabUrl, { encode: true });
|
|
||||||
if (!url) return;
|
|
||||||
chrome.tabs.update(tabId, { url });
|
|
||||||
alert('Opened link in LBRY App!'); // Better for UX since sometimes LBRY App doesn't take focus, if that is fixed, this can be removed
|
|
||||||
chrome.tabs.executeScript(tabId, {
|
|
||||||
code: `if (window.history.length === 1) {
|
|
||||||
window.close();
|
|
||||||
} else {
|
|
||||||
window.history.back();
|
|
||||||
}
|
|
||||||
document.querySelectorAll('video').forEach(v => v.pause());
|
|
||||||
`
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
chrome.runtime.onMessage.addListener(({ url }: { url: string }, sender, sendResponse) => {
|
|
||||||
ctxFromURL(url).then(ctx => {
|
|
||||||
sendResponse(ctx);
|
|
||||||
})
|
|
||||||
return true;
|
|
||||||
})
|
|
||||||
|
|
||||||
// relay youtube link changes to the content script
|
|
||||||
chrome.tabs.onUpdated.addListener((tabId, changeInfo, { url }) => {
|
|
||||||
if (url) ctxFromURL(url).then(ctx => chrome.tabs.sendMessage(tabId, ctx));
|
|
||||||
});
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import { getSourcePlatfromSettingsFromHostname, TargetPlatformName, targetPlatformSettings } from '../common/settings'
|
import { ExtensionSettings, getExtensionSettingsAsync, getSourcePlatfromSettingsFromHostname, TargetPlatformName, targetPlatformSettings } from '../common/settings'
|
||||||
import type { UpdateContext } from '../scripts/tabOnUpdated'
|
import type { UpdateContext } from '../scripts/tabOnUpdated'
|
||||||
import { h, JSX, render } from 'preact'
|
import { h, JSX, render } from 'preact'
|
||||||
|
import { YtIdResolverDescriptor, ytService } from '../common/yt'
|
||||||
|
|
||||||
const sleep = (t: number) => new Promise(resolve => setTimeout(resolve, t));
|
const sleep = (t: number) => new Promise(resolve => setTimeout(resolve, t));
|
||||||
|
|
||||||
|
@ -159,21 +160,37 @@ function redirectTo({ targetPlatform, lbryPathname }: UpdateContext): void {
|
||||||
findButtonMountPoint().then(() => updateButton(ctxCache))
|
findButtonMountPoint().then(() => updateButton(ctxCache))
|
||||||
findVideoElement().then(() => updateButton(ctxCache))
|
findVideoElement().then(() => updateButton(ctxCache))
|
||||||
|
|
||||||
|
async function onPageLoad()
|
||||||
|
{
|
||||||
|
// Listen History.pushState
|
||||||
|
{
|
||||||
|
const originalPushState = history.pushState
|
||||||
|
history.pushState = function(...params) { onPushState(); return originalPushState(...params) }
|
||||||
|
}
|
||||||
|
|
||||||
/** Request UpdateContext from background */
|
const settings = await getExtensionSettingsAsync('redirect', 'targetPlatform', 'urlResolver')
|
||||||
const requestCtxFromUrl = async (url: string) => await new Promise<UpdateContext | null>((resolve) => chrome.runtime.sendMessage({ url }, resolve))
|
|
||||||
|
|
||||||
/** Handle the location on load of the page */
|
// Listen Settings Change
|
||||||
requestCtxFromUrl(location.href).then((ctx) => handleURLChange(ctx))
|
chrome.storage.onChanged.addListener(async (changes, areaName) => {
|
||||||
|
if (areaName !== 'local') return;
|
||||||
|
Object.assign(settings, changes)
|
||||||
|
});
|
||||||
|
|
||||||
/*
|
async function updateByURL(url: URL)
|
||||||
* Gets messages from background script which relays tab update events. This is because there's no sensible way to detect
|
{
|
||||||
* history.pushState changes from a content script
|
if (url.pathname !== '/watch') return
|
||||||
*/
|
const videoId = url.searchParams.get('v')
|
||||||
chrome.runtime.onMessage.addListener(async (ctx: UpdateContext) => handleURLChange(ctx));
|
if (!videoId) return
|
||||||
|
const descriptor: YtIdResolverDescriptor = { id: videoId, type: 'video' }
|
||||||
|
const lbryPathname = (await ytService.resolveById([descriptor]))[0]
|
||||||
|
if (!lbryPathname) return
|
||||||
|
updateButton({ descriptor, lbryPathname, redirect: settings.redirect, targetPlatform: settings.targetPlatform })
|
||||||
|
}
|
||||||
|
|
||||||
/** On settings change */
|
async function onPushState()
|
||||||
chrome.storage.onChanged.addListener(async (changes, areaName) => {
|
{
|
||||||
if (areaName !== 'local') return;
|
await updateByURL(new URL(location.href))
|
||||||
if (changes.targetPlatform) handleURLChange(await requestCtxFromUrl(location.href))
|
}
|
||||||
});
|
|
||||||
|
await updateByURL(new URL(location.href))
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue