From e36d15eccf5308df5132b9323f6f73dc83989935 Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Tue, 21 Apr 2026 00:26:52 +0300 Subject: [PATCH 1/6] feat: add hdr badge --- src/routes/Player/HdrBadge/HdrBadge.less | 19 ++++++++++++++ src/routes/Player/HdrBadge/HdrBadge.tsx | 33 ++++++++++++++++++++++++ src/routes/Player/Player.js | 5 ++++ src/routes/Player/styles.less | 7 +++++ src/routes/Player/useVideo.js | 1 + 5 files changed, 65 insertions(+) create mode 100644 src/routes/Player/HdrBadge/HdrBadge.less create mode 100644 src/routes/Player/HdrBadge/HdrBadge.tsx diff --git a/src/routes/Player/HdrBadge/HdrBadge.less b/src/routes/Player/HdrBadge/HdrBadge.less new file mode 100644 index 000000000..a373df267 --- /dev/null +++ b/src/routes/Player/HdrBadge/HdrBadge.less @@ -0,0 +1,19 @@ +.hdr-badge-container { + position: absolute; + display: flex; + align-items: center; + justify-content: center; + user-select: none; + + .hdr-badge { + flex: none; + padding: 0.4rem 0.8rem; + border-radius: 0.4rem; + font-size: 1.2rem; + font-weight: bold; + letter-spacing: 0.05rem; + color: var(--primary-foreground-color); + background-color: var(--modal-background-color); + border: 0.1rem solid var(--primary-foreground-color); + } +} diff --git a/src/routes/Player/HdrBadge/HdrBadge.tsx b/src/routes/Player/HdrBadge/HdrBadge.tsx new file mode 100644 index 000000000..e7ca2f2b5 --- /dev/null +++ b/src/routes/Player/HdrBadge/HdrBadge.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import classNames from 'classnames'; +import styles from './HdrBadge.less'; + +type HdrInfo = { + gamma?: string | null, + primaries?: string | null, +}; + +type Props = { + className?: string, + hdrInfo: HdrInfo | null, +}; + +const labelFor = (hdrInfo: HdrInfo | null): string | null => { + const gamma = hdrInfo?.gamma?.toLowerCase(); + if (gamma === 'pq') return 'HDR10'; + if (gamma === 'hlg') return 'HLG'; + return null; +}; + +const HdrBadge = ({ className, hdrInfo }: Props) => { + const label = labelFor(hdrInfo); + if (!label) return null; + + return ( +
+
{label}
+
+ ); +}; + +export default HdrBadge; diff --git a/src/routes/Player/Player.js b/src/routes/Player/Player.js index 662717b70..4d56d3366 100644 --- a/src/routes/Player/Player.js +++ b/src/routes/Player/Player.js @@ -28,6 +28,7 @@ const useVideo = require('./useVideo'); const styles = require('./styles'); const Video = require('./Video'); const { default: Indicator } = require('./Indicator/Indicator'); +const { default: HdrBadge } = require('./HdrBadge/HdrBadge'); const findTrackByLang = (tracks, lang) => tracks.find((track) => track.lang === lang || langs.where('1', track.lang)?.[2] === lang); const findTrackById = (tracks, id) => tracks.find((track) => track.id === id); @@ -1010,6 +1011,10 @@ const Player = ({ urlParams, queryParams }) => { videoState={video.state} disabled={subtitlesMenuOpen} /> + { nextVideoPopupOpen ? { muted: null, playbackSpeed: null, videoParams: null, + hdrInfo: null, audioTracks: [], selectedAudioTrackId: null, subtitlesTracks: [], From c8592d56106b8165aa5d6fb072e8c36b85e8000f Mon Sep 17 00:00:00 2001 From: "Timothy Z." Date: Tue, 21 Apr 2026 13:22:35 +0300 Subject: [PATCH 2/6] feat: use an icon for hdr badge --- .../HorizontalNavBar/HorizontalNavBar.js | 15 +++++++-- .../NavBar/HorizontalNavBar/styles.less | 20 +++++++++++ src/routes/Player/HdrBadge/HdrBadge.less | 19 ----------- src/routes/Player/HdrBadge/HdrBadge.tsx | 33 ------------------- src/routes/Player/Player.js | 6 +--- src/routes/Player/styles.less | 7 ---- 6 files changed, 34 insertions(+), 66 deletions(-) delete mode 100644 src/routes/Player/HdrBadge/HdrBadge.less delete mode 100644 src/routes/Player/HdrBadge/HdrBadge.tsx diff --git a/src/components/NavBar/HorizontalNavBar/HorizontalNavBar.js b/src/components/NavBar/HorizontalNavBar/HorizontalNavBar.js index 65bf30c94..6fed91c8a 100644 --- a/src/components/NavBar/HorizontalNavBar/HorizontalNavBar.js +++ b/src/components/NavBar/HorizontalNavBar/HorizontalNavBar.js @@ -12,7 +12,7 @@ const NavMenu = require('./NavMenu'); const styles = require('./styles'); const { t } = require('i18next'); -const HorizontalNavBar = React.memo(({ className, route, query, title, backButton, searchBar, fullscreenButton, navMenu, ...props }) => { +const HorizontalNavBar = React.memo(({ className, route, query, title, backButton, searchBar, fullscreenButton, navMenu, hdrInfo, ...props }) => { const backButtonOnClick = React.useCallback(() => { window.history.back(); }, []); @@ -53,6 +53,14 @@ const HorizontalNavBar = React.memo(({ className, route, query, title, backButto null }
+ { + hdrInfo && (hdrInfo.gamma === 'pq' || hdrInfo.gamma === 'hlg') ? +
+ +
+ : + null + } { !isIOSPWA && fullscreenButton ?