From 5161ebf36861fa4aa8440ea385ace37df3cdd26c Mon Sep 17 00:00:00 2001 From: ThaUnknown <6506529+ThaUnknown@users.noreply.github.com> Date: Sun, 27 Apr 2025 23:38:23 +0200 Subject: [PATCH] fix: thumbnailer crashing feat: hide to tray --- src/app.d.ts | 7 +++---- src/lib/components/ui/player/thumbnailer.ts | 7 ++++--- src/lib/modules/native.ts | 1 + src/lib/modules/settings/defaults.ts | 1 + src/lib/modules/settings/settings.ts | 1 + 5 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/app.d.ts b/src/app.d.ts index befa8fe..982e567 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -99,30 +99,29 @@ export interface Native { updateSettings: (settings: TorrentSettings) => Promise updateProgress: (cb: (progress: number) => void) => Promise spawnPlayer: (url: string) => Promise + setHideToTray: (enabled: boolean) => Promise isApp: boolean version: () => Promise } declare global { - // eslint-disable-next-line no-unused-vars + namespace App { // interface Error {} // interface Locals {} // interface PageData {} - // eslint-disable-next-line no-unused-vars + interface PageState { search?: VariablesOf } // interface Platform {} } - // eslint-disable-next-line no-unused-vars interface HTMLMediaElement { videoTracks?: Track[] audioTracks?: Track[] } - // eslint-disable-next-line no-unused-vars interface ScreenOrientation { lock: (orientation: 'any' | 'natural' | 'landscape' | 'portrait' | 'portrait-primary' | 'portrait-secondary' | 'landscape-primary' | 'landscape-secondary') => Promise } diff --git a/src/lib/components/ui/player/thumbnailer.ts b/src/lib/components/ui/player/thumbnailer.ts index 593ee77..ae5c500 100644 --- a/src/lib/components/ui/player/thumbnailer.ts +++ b/src/lib/components/ui/player/thumbnailer.ts @@ -1,7 +1,7 @@ interface RenderItem { index: number run: () => void - promise: Promise + promise: Promise } export default class Thumbnailer { @@ -35,7 +35,7 @@ export default class Thumbnailer { } _createTask (index: number): RenderItem { - const { promise, resolve } = Promise.withResolvers() + const { promise, resolve } = Promise.withResolvers() const run = () => { this.video.requestVideoFrameCallback((_now, meta) => { @@ -79,6 +79,7 @@ export default class Thumbnailer { // generate and store the thumbnail async _paintThumbnail (video: HTMLVideoElement, index: number, width = video.videoWidth, height = video.videoHeight) { if (this.thumbnails[index]) return this.thumbnails[index] + if (!width || !height) return undefined this.canvas.width = this.size this.canvas.height = height / width * this.size this.ctx.drawImage(video, 0, 0, this.canvas.width, this.canvas.height) @@ -86,7 +87,7 @@ export default class Thumbnailer { return this.thumbnails[index] } - async getThumbnail (index: number): Promise { + async getThumbnail (index: number): Promise { const thumbnail = this.thumbnails[index] if (thumbnail) return thumbnail diff --git a/src/lib/modules/native.ts b/src/lib/modules/native.ts index a5f419e..509563f 100644 --- a/src/lib/modules/native.ts +++ b/src/lib/modules/native.ts @@ -82,6 +82,7 @@ export default Object.assign>({ setDOH: async () => undefined, cachedTorrents: async () => ['40a9047de61859035659e449d7b84286934486b0'], spawnPlayer: () => sleep(rnd(100_000)), + setHideToTray: async () => undefined, updateProgress: async (cb: (progress: number) => void) => undefined, torrentStats: async (): Promise => ({ peers: rnd(), seeders: rnd(), leechers: rnd(), progress: Math.random(), down: rnd(100000000), up: rnd(100000000), name: 'Amebku.webm', downloaded: rnd(100000), hash: '1234567890abcdef', size: 1234567890, eta: rnd() }), torrents: async (): Promise => [{ peers: rnd(), seeders: rnd(), leechers: rnd(), progress: Math.random(), down: rnd(100000000), up: rnd(100000000), name: 'Amebku.webm', downloaded: rnd(100000), hash: '1234567890abcdef', size: 1234567890, eta: rnd() }] diff --git a/src/lib/modules/settings/defaults.ts b/src/lib/modules/settings/defaults.ts index da4b16c..d978b93 100644 --- a/src/lib/modules/settings/defaults.ts +++ b/src/lib/modules/settings/defaults.ts @@ -27,6 +27,7 @@ export default { subtitleLanguage: 'eng' as keyof typeof languageCodes, audioLanguage: 'jpn' as keyof typeof languageCodes, enableDoH: true, + hideToTray: false, doHURL: 'https://cloudflare-dns.com/dns-query', disableSubtitleBlur: SUPPORTS.isAndroid, showDetailsInRPC: true, diff --git a/src/lib/modules/settings/settings.ts b/src/lib/modules/settings/settings.ts index 9b9f795..5f2a70c 100644 --- a/src/lib/modules/settings/settings.ts +++ b/src/lib/modules/settings/settings.ts @@ -9,5 +9,6 @@ export const settings = persisted('settings', defaults, { beforeRead: value => ( settings.subscribe(settings => { const { torrentPersist, torrentDHT, torrentStreamedDownload, torrentSpeed, maxConns, torrentPort, dhtPort, torrentPeX } = settings native.updateSettings({ torrentPersist, torrentDHT, torrentStreamedDownload, torrentSpeed, maxConns, torrentPort, dhtPort, torrentPeX }) + native.setHideToTray(settings.hideToTray) if (settings.enableDoH) native.setDOH(settings.doHURL) })