From 80471b0ca4b3d3efc9e3db87d434290c9ebc79f6 Mon Sep 17 00:00:00 2001 From: JellyBrick Date: Fri, 27 Dec 2024 01:05:55 +0900 Subject: [PATCH] fix: use networkManager.fetch instead of fetch --- src/plugins/music-together/queue/queue.ts | 25 +++++++++++++++---- .../synced-lyrics/providers/YTMusic.ts | 17 ++++++------- src/renderer.ts | 13 ++-------- src/types/queue.ts | 2 +- src/types/search-box-element.ts | 3 +++ src/types/youtube-music-app-element.ts | 6 +++++ 6 files changed, 40 insertions(+), 26 deletions(-) create mode 100644 src/types/search-box-element.ts create mode 100644 src/types/youtube-music-app-element.ts diff --git a/src/plugins/music-together/queue/queue.ts b/src/plugins/music-together/queue/queue.ts index 8810a600..ef91fe51 100644 --- a/src/plugins/music-together/queue/queue.ts +++ b/src/plugins/music-together/queue/queue.ts @@ -6,7 +6,7 @@ import { t } from '@/i18n'; import type { ConnectionEventUnion } from '@/plugins/music-together/connection'; import type { Profile, VideoData } from '../types'; import type { QueueItem } from '@/types/datahost-get-state'; -import type { QueueElement } from '@/types/queue'; +import type { QueueElement, Store } from '@/types/queue'; const getHeaderPayload = (() => { let payload: { @@ -266,7 +266,8 @@ export class Queue { } if (this.originalDispatch) - this.queue.queue.store.store.dispatch = this.originalDispatch; + this.queue.queue.store.store.dispatch = this + .originalDispatch as Store['dispatch']; } injection() { @@ -295,7 +296,11 @@ export class Queue { videoId: it!.videoId, ownerId: this.owner!.id, }) satisfies VideoData, - event.payload!.items!, + ( + event.payload! as { + items: QueueItem[]; + } + ).items, ); const index = this._videoList.length + videoList.length - 1; @@ -334,7 +339,11 @@ export class Queue { videoId: it!.videoId, ownerId: this.owner!.id, }) satisfies VideoData, - event.payload!.items!, + ( + event.payload! as { + items: QueueItem[]; + } + ).items, ), }, }); @@ -407,7 +416,13 @@ export class Queue { }, }, }; - this.originalDispatch?.call(fakeContext, event); + this.originalDispatch?.call( + fakeContext, + event as { + type: string; + payload?: { items?: QueueItem[] | undefined } | undefined; + }, + ); }; } diff --git a/src/plugins/synced-lyrics/providers/YTMusic.ts b/src/plugins/synced-lyrics/providers/YTMusic.ts index 1a913d10..633a822d 100644 --- a/src/plugins/synced-lyrics/providers/YTMusic.ts +++ b/src/plugins/synced-lyrics/providers/YTMusic.ts @@ -1,4 +1,5 @@ import type { LyricProvider, LyricResult, SearchSongInfo } from '../types'; +import type { YouTubeMusicAppElement } from '@/types/youtube-music-app-element'; const headers = { 'Accept': 'application/json', @@ -102,19 +103,17 @@ export class YTMusic implements LyricProvider { .padStart(2, '0')}.${remaining.toString().padStart(2, '0')}`; } - private ENDPOINT = 'https://youtubei.googleapis.com/youtubei/v1/'; // RATE LIMITED (2 req per sec) private PROXIED_ENDPOINT = 'https://ytmbrowseproxy.zvz.be/'; private fetchNext(videoId: string) { - return fetch(this.ENDPOINT + 'next?prettyPrint=false', { - headers, - method: 'POST', - body: JSON.stringify({ - videoId, - context: { client }, - }), - }).then((res) => res.json()) as Promise; + const app = document.querySelector('ytmusic-app'); + + if (!app) return null; + + return app.networkManager.fetch('/next?prettyPrint=false', { + videoId, + }) as Promise; } private fetchBrowse(browseId: string) { diff --git a/src/renderer.ts b/src/renderer.ts index 3dfbe854..d3cfff83 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -22,6 +22,8 @@ import type { PluginConfig } from '@/types/plugins'; import type { YoutubePlayer } from '@/types/youtube-player'; import type { QueueElement } from '@/types/queue'; import type { QueueResponse } from '@/types/youtube-music-desktop-internal'; +import type { YouTubeMusicAppElement } from '@/types/youtube-music-app-element'; +import type { SearchBoxElement } from '@/types/search-box-element'; let api: (Element & YoutubePlayer) | null = null; let isPluginLoaded = false; @@ -41,17 +43,6 @@ async function listenForApiLoad() { } } -interface YouTubeMusicAppElement extends HTMLElement { - navigate(page: string): void; - networkManager: { - fetch: (url: string, data: unknown) => Promise; - }; -} - -interface SearchBoxElement extends HTMLElement { - getSearchboxStats(): unknown; -} - async function onApiLoaded() { // Workaround for #2459 document diff --git a/src/types/queue.ts b/src/types/queue.ts index 067983d1..d7a4d0e1 100644 --- a/src/types/queue.ts +++ b/src/types/queue.ts @@ -2,7 +2,7 @@ import type { YoutubePlayer } from '@/types/youtube-player'; import type { GetState, QueueItem } from '@/types/datahost-get-state'; type StoreState = GetState; -type Store = { +export type Store = { dispatch: (obj: { type: string; payload?: unknown }) => void; getState: () => StoreState; diff --git a/src/types/search-box-element.ts b/src/types/search-box-element.ts new file mode 100644 index 00000000..6fd3318e --- /dev/null +++ b/src/types/search-box-element.ts @@ -0,0 +1,3 @@ +export interface SearchBoxElement extends HTMLElement { + getSearchboxStats(): unknown; +} diff --git a/src/types/youtube-music-app-element.ts b/src/types/youtube-music-app-element.ts new file mode 100644 index 00000000..700ddc14 --- /dev/null +++ b/src/types/youtube-music-app-element.ts @@ -0,0 +1,6 @@ +export interface YouTubeMusicAppElement extends HTMLElement { + navigate(page: string): void; + networkManager: { + fetch: (url: string, data: unknown) => Promise; + }; +}