fix(synced-lyric): fix timestamp

- Close #2323
- Close #2379
This commit is contained in:
JellyBrick
2024-09-07 19:06:52 +09:00
parent 5b004eedff
commit a4992bafb2

View File

@ -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());