mirror of
https://github.com/th-ch/youtube-music.git
synced 2026-01-11 10:31:47 +00:00
@ -16,10 +16,9 @@ export let _ytAPI: YoutubePlayer | null = null;
|
|||||||
|
|
||||||
export const renderer = createRenderer<{
|
export const renderer = createRenderer<{
|
||||||
observerCallback: MutationCallback;
|
observerCallback: MutationCallback;
|
||||||
hasAddedEvents: boolean;
|
|
||||||
observer?: MutationObserver;
|
observer?: MutationObserver;
|
||||||
videoDataChange: () => Promise<void>;
|
videoDataChange: () => Promise<void>;
|
||||||
progressCallback: (evt: Event) => void;
|
updateTimestampInterval?: NodeJS.Timeout | string | number;
|
||||||
}, SyncedLyricsPluginConfig>({
|
}, SyncedLyricsPluginConfig>({
|
||||||
onConfigChange(newConfig) {
|
onConfigChange(newConfig) {
|
||||||
setConfig(newConfig);
|
setConfig(newConfig);
|
||||||
@ -50,15 +49,12 @@ export const renderer = createRenderer<{
|
|||||||
await this.videoDataChange();
|
await this.videoDataChange();
|
||||||
},
|
},
|
||||||
|
|
||||||
hasAddedEvents: false,
|
|
||||||
|
|
||||||
async videoDataChange() {
|
async videoDataChange() {
|
||||||
if (!this.hasAddedEvents) {
|
if (!this.updateTimestampInterval) {
|
||||||
const video = document.querySelector('video');
|
this.updateTimestampInterval = setInterval(
|
||||||
|
() => setCurrentTime((_ytAPI?.getCurrentTime() ?? 0) * 1000),
|
||||||
video?.addEventListener('timeupdate', this.progressCallback);
|
100,
|
||||||
|
);
|
||||||
if (video) this.hasAddedEvents = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this.observer ??= new MutationObserver(
|
this.observer ??= new MutationObserver(
|
||||||
@ -73,16 +69,6 @@ export const renderer = createRenderer<{
|
|||||||
header.removeAttribute('disabled');
|
header.removeAttribute('disabled');
|
||||||
},
|
},
|
||||||
|
|
||||||
progressCallback(evt: Event) {
|
|
||||||
switch (evt.type) {
|
|
||||||
case 'timeupdate': {
|
|
||||||
const video = evt.target as HTMLVideoElement;
|
|
||||||
setCurrentTime(video.currentTime * 1000);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
async start(ctx: RendererContext<SyncedLyricsPluginConfig>) {
|
async start(ctx: RendererContext<SyncedLyricsPluginConfig>) {
|
||||||
setConfig(await ctx.getConfig());
|
setConfig(await ctx.getConfig());
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user