🍙 Refactor, moved many backend stuff to content

This commit is contained in:
Shiba 2022-01-09 18:41:30 +00:00
parent b750c86b88
commit 1e7293826a
2 changed files with 33 additions and 48 deletions

View file

@ -39,36 +39,4 @@ async function ctxFromURL(href: string): Promise<UpdateContext | void> {
await promise
delete ctxFromURLOnGoingPromise[descriptor.id]
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));
});
}

View file

@ -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 { h, JSX, render } from 'preact'
import { YtIdResolverDescriptor, ytService } from '../common/yt'
const sleep = (t: number) => new Promise(resolve => setTimeout(resolve, t));
@ -159,21 +160,37 @@ function redirectTo({ targetPlatform, lbryPathname }: UpdateContext): void {
findButtonMountPoint().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 requestCtxFromUrl = async (url: string) => await new Promise<UpdateContext | null>((resolve) => chrome.runtime.sendMessage({ url }, resolve))
const settings = await getExtensionSettingsAsync('redirect', 'targetPlatform', 'urlResolver')
// Listen Settings Change
chrome.storage.onChanged.addListener(async (changes, areaName) => {
if (areaName !== 'local') return;
Object.assign(settings, changes)
});
/** Handle the location on load of the page */
requestCtxFromUrl(location.href).then((ctx) => handleURLChange(ctx))
async function updateByURL(url: URL)
{
if (url.pathname !== '/watch') return
const videoId = url.searchParams.get('v')
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 })
}
/*
* 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
*/
chrome.runtime.onMessage.addListener(async (ctx: UpdateContext) => handleURLChange(ctx));
async function onPushState()
{
await updateByURL(new URL(location.href))
}
/** On settings change */
chrome.storage.onChanged.addListener(async (changes, areaName) => {
if (areaName !== 'local') return;
if (changes.targetPlatform) handleURLChange(await requestCtxFromUrl(location.href))
});
await updateByURL(new URL(location.href))
}