From 3363dc199c6ad3e06ed79af6533f0507575812bb Mon Sep 17 00:00:00 2001 From: joerkig <44418429+joerkig@users.noreply.github.com> Date: Tue, 11 Aug 2026 19:29:00 +0200 Subject: [PATCH] fix(Disney+):fix time & resolve deprecation --- websites/D/Disney+/metadata.json | 2 +- websites/D/Disney+/presence.ts | 27 ++++++++++++++------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/websites/D/Disney+/metadata.json b/websites/D/Disney+/metadata.json index ba463dba2234..10a0b539464e 100644 --- a/websites/D/Disney+/metadata.json +++ b/websites/D/Disney+/metadata.json @@ -33,7 +33,7 @@ }, "url": "www.disneyplus.com", "regExp": "^https?[:][/][/]([a-z0-9-]+[.])*(disneyplus|hotstar)[.]com[/]", - "version": "1.10.3", + "version": "1.11.0", "logo": "https://cdn.rcd.gg/PreMiD/websites/D/Disney%2B/assets/logo.png", "thumbnail": "https://cdn.rcd.gg/PreMiD/websites/D/Disney%2B/assets/thumbnail.png", "color": "#233778", diff --git a/websites/D/Disney+/presence.ts b/websites/D/Disney+/presence.ts index f622e48e098b..bfbc331e2443 100644 --- a/websites/D/Disney+/presence.ts +++ b/websites/D/Disney+/presence.ts @@ -1,21 +1,25 @@ -import { ActivityType, Assets, getTimestamps, getTimestampsFromMedia, StatusDisplayType, timestampFromFormat } from 'premid' +import { ActivityType, Assets, getTimestamps, getTimestampsFromMedia, StatusDisplayType } from 'premid' //* I think this is a browser bug because the custom element does not have any properties when accessing it directly... let imageId: string | undefined let title: string | undefined let subtitle: string | undefined +let playheadPositionMs: number | undefined +let programDurationMs: number | undefined window.addEventListener('message', (e) => { if (e.data.type === 'pmd-receive-data') - ({ imageId, title, subtitle } = e.data as { imageId?: string, title?: string, subtitle?: string }) + ({ imageId, title, subtitle, playheadPositionMs, programDurationMs } = e.data as { imageId?: string, title?: string, subtitle?: string, playheadPositionMs?: number, programDurationMs?: number }) }) const script = document.createElement('script') script.textContent = ` setInterval(() => { -const metadata = document.querySelector("disney-web-player")?.mediaPlayer?.mediaPlaybackCriteria?.metadata; +const mediaPlayer = document.querySelector("disney-web-player")?.mediaPlayer; +const metadata = mediaPlayer?.mediaPlaybackCriteria?.metadata; const images = metadata?.images_experience?.standard?.tile; if (!images) return; +const timelineInfo = mediaPlayer?.timeline?.info; const ratios = Object.keys(images); const goal = 100; @@ -23,7 +27,7 @@ const closest = ratios.reduce(function(prev, curr) { return (Math.abs((100 / curr) - goal) < Math.abs((100 / prev) - goal) ? curr : prev); }); -window.postMessage({ type: "pmd-receive-data", imageId: images?.[closest]?.imageId, title: metadata?.title?.text, subtitle: metadata?.subtitle?.text }, "*"); +window.postMessage({ type: "pmd-receive-data", imageId: images?.[closest]?.imageId, title: metadata?.title?.text, subtitle: metadata?.subtitle?.text, playheadPositionMs: timelineInfo?.playheadPositionMs, programDurationMs: timelineInfo?.programDurationMs }, "*"); }, 1000); ` document.head.appendChild(script) @@ -91,14 +95,11 @@ presence.on('UpdateData', async () => { const { paused } = video if (!paused) { - const allTime = document.querySelector('#app_body_content disney-web-player-ui progress-bar')?.shadowRoot?.querySelector('div[role="slider"]')?.getAttribute('aria-valuetext')?.split('of')[1]?.trim() - const remainingTime = document.querySelector('#app_body_content disney-web-player-ui time-remaining-indicator')?.shadowRoot?.querySelector('.time-remaining-indicator')?.textContent?.trim() - const timestamps = getTimestamps( - Number(timestampFromFormat(allTime ?? '') - timestampFromFormat(remainingTime ?? '')) ?? '00:00', - timestampFromFormat(allTime ?? '00:00'), - ) - presenceData.startTimestamp = timestamps[0] - presenceData.endTimestamp = timestamps[1] + if (playheadPositionMs && programDurationMs) { + const timestamps = getTimestamps(playheadPositionMs / 1000, programDurationMs / 1000) + presenceData.startTimestamp = timestamps[0] + presenceData.endTimestamp = timestamps[1] + } } else { presenceData.smallImageKey = Assets.Pause @@ -299,5 +300,5 @@ presence.on('UpdateData', async () => { if (presenceData.details) presence.setActivity(presenceData) - else presence.setActivity() + else presence.clearActivity() })