From d9bb55a2a9ffc71b677b5cc9bdd90018560d7bef Mon Sep 17 00:00:00 2001 From: Bill Thornton Date: Sat, 1 Oct 2022 02:39:12 -0400 Subject: [PATCH] Move SyncPlay initialization to plugin --- .../syncPlay/core/players/PlayerFactory.js | 4 +- src/config.json | 3 +- src/index.jsx | 31 +----------- src/plugins/syncPlay/plugin.ts | 49 +++++++++++++++++++ 4 files changed, 54 insertions(+), 33 deletions(-) create mode 100644 src/plugins/syncPlay/plugin.ts diff --git a/src/components/syncPlay/core/players/PlayerFactory.js b/src/components/syncPlay/core/players/PlayerFactory.js index 1de9aa5126..ab4170c9e7 100644 --- a/src/components/syncPlay/core/players/PlayerFactory.js +++ b/src/components/syncPlay/core/players/PlayerFactory.js @@ -16,7 +16,7 @@ class PlayerFactory { /** * Registers a wrapper to the list of players that can be managed. - * @param {GenericPlayer} wrapperClass The wrapper to register. + * @param {typeof GenericPlayer} wrapperClass The wrapper to register. */ registerWrapper(wrapperClass) { console.debug('SyncPlay WrapperFactory registerWrapper:', wrapperClass.type); @@ -25,7 +25,7 @@ class PlayerFactory { /** * Sets the default player wrapper. - * @param {GenericPlayer} wrapperClass The wrapper. + * @param {typeof GenericPlayer} wrapperClass The wrapper. */ setDefaultWrapper(wrapperClass) { console.debug('SyncPlay WrapperFactory setDefaultWrapper:', wrapperClass.type); diff --git a/src/config.json b/src/config.json index 5b24006a48..3d80b1efec 100644 --- a/src/config.json +++ b/src/config.json @@ -44,6 +44,7 @@ "pdfPlayer/plugin", "logoScreensaver/plugin", "sessionPlayer/plugin", - "chromecastPlayer/plugin" + "chromecastPlayer/plugin", + "syncPlay/plugin" ] } diff --git a/src/index.jsx b/src/index.jsx index 7ca4b92a24..e177a281e1 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -35,11 +35,6 @@ import './legacy/domParserTextHtml'; import './legacy/focusPreventScroll'; import './legacy/htmlMediaElement'; import './legacy/vendorStyles'; -import SyncPlay from './components/syncPlay/core'; -import { playbackManager } from './components/playback/playbackmanager'; -import SyncPlayNoActivePlayer from './components/syncPlay/ui/players/NoActivePlayer'; -import SyncPlayHtmlVideoPlayer from './components/syncPlay/ui/players/HtmlVideoPlayer'; -import SyncPlayHtmlAudioPlayer from './components/syncPlay/ui/players/HtmlAudioPlayer'; import { currentSettings } from './scripts/settings/userSettings'; import taskButton from './scripts/taskbutton'; import { HistoryRouter } from './components/HistoryRouter.tsx'; @@ -102,10 +97,7 @@ function onGlobalizeInit() { import('./assets/css/librarybrowser.scss'); - loadPlugins().then(function () { - initSyncPlay(); - onAppReady(); - }); + loadPlugins().then(onAppReady); } function loadPlugins() { @@ -137,27 +129,6 @@ function loadPlugins() { }); } -function initSyncPlay() { - // Register player wrappers. - SyncPlay.PlayerFactory.setDefaultWrapper(SyncPlayNoActivePlayer); - SyncPlay.PlayerFactory.registerWrapper(SyncPlayHtmlVideoPlayer); - SyncPlay.PlayerFactory.registerWrapper(SyncPlayHtmlAudioPlayer); - - // Listen for player changes. - Events.on(playbackManager, 'playerchange', (event, newPlayer, newTarget, oldPlayer) => { - SyncPlay.Manager.onPlayerChange(newPlayer, newTarget, oldPlayer); - }); - - // Start SyncPlay. - const apiClient = ServerConnections.currentApiClient(); - if (apiClient) SyncPlay.Manager.init(apiClient); - - // FIXME: Multiple apiClients? - Events.on(ServerConnections, 'apiclientcreated', (e, newApiClient) => SyncPlay.Manager.init(newApiClient)); - Events.on(ServerConnections, 'localusersignedin', () => SyncPlay.Manager.updateApiClient(ServerConnections.currentApiClient())); - Events.on(ServerConnections, 'localusersignedout', () => SyncPlay.Manager.updateApiClient(ServerConnections.currentApiClient())); -} - async function onAppReady() { console.debug('begin onAppReady'); diff --git a/src/plugins/syncPlay/plugin.ts b/src/plugins/syncPlay/plugin.ts new file mode 100644 index 0000000000..f4cd78a3c5 --- /dev/null +++ b/src/plugins/syncPlay/plugin.ts @@ -0,0 +1,49 @@ +import { Events } from 'jellyfin-apiclient'; + +import { playbackManager } from '../../components/playback/playbackmanager'; +import ServerConnections from '../../components/ServerConnections'; +import SyncPlay from '../../components/syncPlay/core'; +import SyncPlayNoActivePlayer from '../../components/syncPlay/ui/players/NoActivePlayer'; +import SyncPlayHtmlVideoPlayer from '../../components/syncPlay/ui/players/HtmlVideoPlayer'; +import SyncPlayHtmlAudioPlayer from '../../components/syncPlay/ui/players/HtmlAudioPlayer'; + +class SyncPlayPlugin { + name: string; + id: string; + type: string; + priority: number; + + constructor() { + this.name = 'SyncPlay Plugin'; + this.id = 'syncplay'; + // NOTE: This should probably be a "mediaplayer" so the playback manager can handle playback logic, but + // SyncPlay needs refactored so it does not have an independent playback manager. + this.type = 'syncplay'; + this.priority = 1; + + this.init(); + } + + init() { + // Register player wrappers. + SyncPlay.PlayerFactory.setDefaultWrapper(SyncPlayNoActivePlayer); + SyncPlay.PlayerFactory.registerWrapper(SyncPlayHtmlVideoPlayer); + SyncPlay.PlayerFactory.registerWrapper(SyncPlayHtmlAudioPlayer); + + // Listen for player changes. + Events.on(playbackManager, 'playerchange', (_, newPlayer) => { + SyncPlay.Manager.onPlayerChange(newPlayer); + }); + + // Start SyncPlay. + const apiClient = ServerConnections.currentApiClient(); + if (apiClient) SyncPlay.Manager.init(apiClient); + + // FIXME: Multiple apiClients? + Events.on(ServerConnections, 'apiclientcreated', (_, newApiClient) => SyncPlay.Manager.init(newApiClient)); + Events.on(ServerConnections, 'localusersignedin', () => SyncPlay.Manager.updateApiClient(ServerConnections.currentApiClient())); + Events.on(ServerConnections, 'localusersignedout', () => SyncPlay.Manager.updateApiClient(ServerConnections.currentApiClient())); + } +} + +export default SyncPlayPlugin;