From 0eaecf6fd3456515cbe68bf72438b34a22f357e1 Mon Sep 17 00:00:00 2001 From: SrGooglo Date: Wed, 21 May 2025 19:03:08 +0000 Subject: [PATCH] Refactor player internals and sync Replace `TrackInstance` with direct `TrackManifest` usage in the player core. Introduce a `SyncRoom` class and related hooks (`useSyncRoom`, `useLyrics`, etc.) for real-time state synchronization and shared lyrics display. Enhance player indicators to show detailed audio format metadata (codec, sample rate, bit depth). Relocate the Indicators component and update the Lyrics page to utilize these new features and components. --- .../src/components/Player/Actions/index.jsx | 26 +- .../src/components/Player/Actions/index.less | 2 +- .../src/components/Player/Controls/index.jsx | 19 +- .../components/Player/Indicators/index.jsx | 84 +++++ packages/app/src/components/Player/index.jsx | 57 +--- packages/app/src/components/Player/index.less | 9 + .../app/src/cores/player/classes/AudioBase.js | 315 +++++++++++++++--- .../src/cores/player/classes/PlayerState.js | 66 ++-- .../app/src/cores/player/classes/Services.js | 96 +++--- .../app/src/cores/player/classes/SyncRoom.js | 202 +++++++++++ .../src/cores/player/classes/TrackInstance.js | 100 ------ .../src/cores/player/classes/TrackManifest.js | 38 ++- .../player/helpers/findInitializationChunk.js | 81 +++++ .../helpers/handleInlineDashManifest.js | 15 + .../helpers/parseSourceFormatMetadata.js | 12 + packages/app/src/cores/player/player.core.js | 132 ++++---- packages/app/src/hooks/index.js | 2 - .../app/src/hooks/useCoverAnalysis/index.js | 43 +++ packages/app/src/hooks/useFullScreen/index.js | 47 +++ packages/app/src/hooks/useLyrics/index.js | 69 ++++ packages/app/src/hooks/useSyncRoom/index.js | 60 ++++ .../app/src/hooks/useTrackManifest/index.js | 19 ++ .../components/@mobile/bottomBar/index.jsx | 4 +- .../pages/lyrics/components/Background.jsx | 22 ++ .../lyrics/components/controller/index.jsx | 107 +----- .../pages/lyrics/components/text/index.jsx | 29 +- packages/app/src/pages/lyrics/index.jsx | 186 +++-------- packages/app/src/pages/lyrics/index.less | 52 ++- 28 files changed, 1266 insertions(+), 628 deletions(-) create mode 100644 packages/app/src/components/Player/Indicators/index.jsx create mode 100644 packages/app/src/cores/player/classes/SyncRoom.js delete mode 100644 packages/app/src/cores/player/classes/TrackInstance.js create mode 100644 packages/app/src/cores/player/helpers/findInitializationChunk.js create mode 100644 packages/app/src/cores/player/helpers/handleInlineDashManifest.js create mode 100644 packages/app/src/cores/player/helpers/parseSourceFormatMetadata.js delete mode 100755 packages/app/src/hooks/index.js create mode 100644 packages/app/src/hooks/useCoverAnalysis/index.js create mode 100644 packages/app/src/hooks/useFullScreen/index.js create mode 100644 packages/app/src/hooks/useLyrics/index.js create mode 100644 packages/app/src/hooks/useSyncRoom/index.js create mode 100644 packages/app/src/hooks/useTrackManifest/index.js create mode 100644 packages/app/src/pages/lyrics/components/Background.jsx diff --git a/packages/app/src/components/Player/Actions/index.jsx b/packages/app/src/components/Player/Actions/index.jsx index a70b2976..b996fc4b 100755 --- a/packages/app/src/components/Player/Actions/index.jsx +++ b/packages/app/src/components/Player/Actions/index.jsx @@ -9,28 +9,25 @@ import { usePlayerStateContext } from "@contexts/WithPlayerContext" import "./index.less" const ExtraActions = (props) => { - const [trackInstance, setTrackInstance] = React.useState({}) + const [track, setTrack] = React.useState({}) const onPlayerStateChange = React.useCallback((state) => { - const instance = app.cores.player.track() + const track = app.cores.player.track() - if (instance) { - setTrackInstance(instance) + if (track) { + setTrack(track) } }, []) - const [playerState] = usePlayerStateContext(onPlayerStateChange) + usePlayerStateContext(onPlayerStateChange) const handleClickLike = async () => { - if (!trackInstance) { + if (!track) { console.error("Cannot like a track if nothing is playing") return false } - await trackInstance.manifest.serviceOperations.toggleItemFavorite( - "tracks", - trackInstance.manifest._id, - ) + await track.serviceOperations.toggleItemFavorite("tracks", track._id) } return ( @@ -39,18 +36,15 @@ const ExtraActions = (props) => {