diff --git a/src/components/syncPlay/core/controller.js b/src/components/syncPlay/core/Controller.js similarity index 96% rename from src/components/syncPlay/core/controller.js rename to src/components/syncPlay/core/Controller.js index 9920b0bf8b..f4a1753a71 100644 --- a/src/components/syncPlay/core/controller.js +++ b/src/components/syncPlay/core/Controller.js @@ -1,21 +1,21 @@ /** * Module that exposes SyncPlay calls to external modules. - * @module components/syncPlay/core/controller + * @module components/syncPlay/core/Controller */ -import * as Helper from './helper'; +import * as Helper from './Helper'; /** * Class that exposes SyncPlay calls to external modules. */ -class SyncPlayController { +class Controller { constructor() { this.manager = null; } /** * Initializes the controller. - * @param {SyncPlayManager} syncPlayManager The SyncPlay manager. + * @param {Manager} syncPlayManager The SyncPlay manager. */ init(syncPlayManager) { this.manager = syncPlayManager; @@ -218,4 +218,4 @@ class SyncPlayController { } } -export default SyncPlayController; +export default Controller; diff --git a/src/components/syncPlay/core/helper.js b/src/components/syncPlay/core/Helper.js similarity index 98% rename from src/components/syncPlay/core/helper.js rename to src/components/syncPlay/core/Helper.js index f1724a5e6a..53b47c47dd 100644 --- a/src/components/syncPlay/core/helper.js +++ b/src/components/syncPlay/core/Helper.js @@ -1,6 +1,6 @@ /** * Module that offers some utility functions. - * @module components/syncPlay/core/helper + * @module components/syncPlay/core/Helper */ import { Events } from 'jellyfin-apiclient'; @@ -156,9 +156,7 @@ export function translateItemsForPlayback(apiClient, items, options) { SortBy: options.shuffle ? 'Random' : 'SortName', MediaTypes: 'Photo,Video' }).then(function (result) { - const items = result.Items; - - let index = items.map(function (i) { + let index = result.Items.map(function (i) { return i.Id; }).indexOf(firstItem.Id); diff --git a/src/components/syncPlay/core/manager.js b/src/components/syncPlay/core/Manager.js similarity index 93% rename from src/components/syncPlay/core/manager.js rename to src/components/syncPlay/core/Manager.js index b3ca1d4b21..18f4844bae 100644 --- a/src/components/syncPlay/core/manager.js +++ b/src/components/syncPlay/core/Manager.js @@ -1,27 +1,31 @@ /** * Module that manages the SyncPlay feature. - * @module components/syncPlay/core/manager + * @module components/syncPlay/core/Manager */ import { Events } from 'jellyfin-apiclient'; -import * as Helper from './helper'; -import PlayerFactory from './players/factory'; -import TimeSyncCore from './timeSync/core'; -import SyncPlayPlaybackCore from './playbackCore'; -import SyncPlayQueueCore from './queueCore'; -import SyncPlayController from './controller'; +import * as Helper from './Helper'; +import TimeSyncCore from './timeSync/TimeSyncCore'; +import PlaybackCore from './PlaybackCore'; +import QueueCore from './QueueCore'; +import Controller from './Controller'; /** * Class that manages the SyncPlay feature. */ -class SyncPlayManager { - constructor() { +class Manager { + /** + * Creates an instance of SyncPlay Manager. + * @param {PlayerFactory} playerFactory The PlayerFactory instance. + */ + constructor(playerFactory) { + this.playerFactory = playerFactory; this.apiClient = null; this.timeSyncCore = new TimeSyncCore(); - this.playbackCore = new SyncPlayPlaybackCore(); - this.queueCore = new SyncPlayQueueCore(); - this.controller = new SyncPlayController(); + this.playbackCore = new PlaybackCore(); + this.queueCore = new QueueCore(); + this.controller = new Controller(); this.syncMethod = 'None'; // Used for stats. @@ -49,7 +53,7 @@ class SyncPlayManager { this.apiClient = apiClient; // Get default player wrapper. - this.playerWrapper = PlayerFactory.getDefaultWrapper(this); + this.playerWrapper = this.playerFactory.getDefaultWrapper(this); // Initialize components. this.timeSyncCore.init(this); @@ -77,7 +81,7 @@ class SyncPlayManager { /** * Gets the playback core. - * @returns {SyncPlayPlaybackCore} The playback core. + * @returns {PlaybackCore} The playback core. */ getPlaybackCore() { return this.playbackCore; @@ -85,7 +89,7 @@ class SyncPlayManager { /** * Gets the queue core. - * @returns {SyncPlayQueueCore} The queue core. + * @returns {QueueCore} The queue core. */ getQueueCore() { return this.queueCore; @@ -93,7 +97,7 @@ class SyncPlayManager { /** * Gets the controller used to manage SyncPlay playback. - * @returns {SyncPlayController} The controller. + * @returns {Controller} The controller. */ getController() { return this.controller; @@ -144,7 +148,7 @@ class SyncPlayManager { this.playerWrapper.unbindFromPlayer(); this.currentPlayer = player; - this.playerWrapper = PlayerFactory.getWrapper(player, this); + this.playerWrapper = this.playerFactory.getWrapper(player, this); if (this.isSyncPlayEnabled()) { this.playerWrapper.bindToPlayer(); @@ -160,7 +164,7 @@ class SyncPlayManager { this.currentPlayer = null; this.playerWrapper.unbindFromPlayer(); - this.playerWrapper = PlayerFactory.getDefaultWrapper(this); + this.playerWrapper = this.playerFactory.getDefaultWrapper(this); if (this.isSyncPlayEnabled()) { this.playerWrapper.bindToPlayer(); } @@ -474,6 +478,4 @@ class SyncPlayManager { } } -/** SyncPlayManager singleton. */ -const syncPlayManager = new SyncPlayManager(); -export default syncPlayManager; +export default Manager; diff --git a/src/components/syncPlay/core/playbackCore.js b/src/components/syncPlay/core/PlaybackCore.js similarity index 99% rename from src/components/syncPlay/core/playbackCore.js rename to src/components/syncPlay/core/PlaybackCore.js index 3d0ffed594..b1bc6c106d 100644 --- a/src/components/syncPlay/core/playbackCore.js +++ b/src/components/syncPlay/core/PlaybackCore.js @@ -1,15 +1,15 @@ /** * Module that manages the playback of SyncPlay. - * @module components/syncPlay/core/playbackCore + * @module components/syncPlay/core/PlaybackCore */ import { Events } from 'jellyfin-apiclient'; -import * as Helper from './helper'; +import * as Helper from './Helper'; /** * Class that manages the playback of SyncPlay. */ -class SyncPlayPlaybackCore { +class PlaybackCore { constructor() { this.manager = null; this.timeSyncCore = null; @@ -29,7 +29,7 @@ class SyncPlayPlaybackCore { /** * Initializes the core. - * @param {SyncPlayManager} syncPlayManager The SyncPlay manager. + * @param {Manager} syncPlayManager The SyncPlay manager. */ init(syncPlayManager) { this.manager = syncPlayManager; @@ -574,4 +574,4 @@ class SyncPlayPlaybackCore { } } -export default SyncPlayPlaybackCore; +export default PlaybackCore; diff --git a/src/components/syncPlay/core/queueCore.js b/src/components/syncPlay/core/QueueCore.js similarity index 98% rename from src/components/syncPlay/core/queueCore.js rename to src/components/syncPlay/core/QueueCore.js index f31013026c..b9362b839e 100644 --- a/src/components/syncPlay/core/queueCore.js +++ b/src/components/syncPlay/core/QueueCore.js @@ -1,14 +1,14 @@ /** * Module that manages the queue of SyncPlay. - * @module components/syncPlay/core/queueCore + * @module components/syncPlay/core/QueueCore */ -import * as Helper from './helper'; +import * as Helper from './Helper'; /** * Class that manages the queue of SyncPlay. */ -class SyncPlayQueueCore { +class QueueCore { constructor() { this.manager = null; this.lastPlayQueueUpdate = null; @@ -17,7 +17,7 @@ class SyncPlayQueueCore { /** * Initializes the core. - * @param {SyncPlayManager} syncPlayManager The SyncPlay manager. + * @param {Manager} syncPlayManager The SyncPlay manager. */ init(syncPlayManager) { this.manager = syncPlayManager; @@ -369,4 +369,4 @@ class SyncPlayQueueCore { } } -export default SyncPlayQueueCore; +export default QueueCore; diff --git a/src/components/syncPlay/core/index.js b/src/components/syncPlay/core/index.js index 2d2f3f1777..ca07e9b361 100644 --- a/src/components/syncPlay/core/index.js +++ b/src/components/syncPlay/core/index.js @@ -1,7 +1,10 @@ -import * as Helper from './helper'; -import Manager from './manager'; -import PlayerFactory from './players/factory'; -import GenericPlayer from './players/genericPlayer'; +import * as Helper from './Helper'; +import ManagerClass from './Manager'; +import PlayerFactoryClass from './players/PlayerFactory'; +import GenericPlayer from './players/GenericPlayer'; + +const PlayerFactory = new PlayerFactoryClass(); +const Manager = new ManagerClass(PlayerFactory); export default { Helper, diff --git a/src/components/syncPlay/core/players/genericPlayer.js b/src/components/syncPlay/core/players/GenericPlayer.js similarity index 97% rename from src/components/syncPlay/core/players/genericPlayer.js rename to src/components/syncPlay/core/players/GenericPlayer.js index 3dd0e79fca..056f37dab2 100644 --- a/src/components/syncPlay/core/players/genericPlayer.js +++ b/src/components/syncPlay/core/players/GenericPlayer.js @@ -1,6 +1,6 @@ /** * Module that translates events from a player to SyncPlay events. - * @module components/syncPlay/core/players/genericPlayer + * @module components/syncPlay/core/players/GenericPlayer */ import { Events } from 'jellyfin-apiclient'; @@ -8,7 +8,7 @@ import { Events } from 'jellyfin-apiclient'; /** * Class that translates events from a player to SyncPlay events. */ -class SyncPlayGenericPlayer { +class GenericPlayer { static type = 'generic'; constructor(player, syncPlayManager) { @@ -302,4 +302,4 @@ class SyncPlayGenericPlayer { } } -export default SyncPlayGenericPlayer; +export default GenericPlayer; diff --git a/src/components/syncPlay/core/players/factory.js b/src/components/syncPlay/core/players/PlayerFactory.js similarity index 81% rename from src/components/syncPlay/core/players/factory.js rename to src/components/syncPlay/core/players/PlayerFactory.js index f24ab6ae71..709680cf63 100644 --- a/src/components/syncPlay/core/players/factory.js +++ b/src/components/syncPlay/core/players/PlayerFactory.js @@ -1,22 +1,22 @@ /** * Module that creates wrappers for known players. - * @module components/syncPlay/core/players/factory + * @module components/syncPlay/core/players/PlayerFactory */ -import SyncPlayGenericPlayer from './genericPlayer'; +import GenericPlayer from './GenericPlayer'; /** * Class that creates wrappers for known players. */ -class SyncPlayPlayerFactory { +class PlayerFactory { constructor() { this.wrappers = {}; - this.DefaultWrapper = SyncPlayGenericPlayer; + this.DefaultWrapper = GenericPlayer; } /** * Registers a wrapper to the list of players that can be managed. - * @param {SyncPlayGenericPlayer} wrapperClass The wrapper to register. + * @param {GenericPlayer} wrapperClass The wrapper to register. */ registerWrapper(wrapperClass) { console.debug('SyncPlay WrapperFactory registerWrapper:', wrapperClass.type); @@ -25,7 +25,7 @@ class SyncPlayPlayerFactory { /** * Sets the default player wrapper. - * @param {SyncPlayGenericPlayer} wrapperClass The wrapper. + * @param {GenericPlayer} wrapperClass The wrapper. */ setDefaultWrapper(wrapperClass) { console.debug('SyncPlay WrapperFactory setDefaultWrapper:', wrapperClass.type); @@ -68,6 +68,4 @@ class SyncPlayPlayerFactory { } } -/** SyncPlayPlayerFactory singleton. */ -const playerFactory = new SyncPlayPlayerFactory(); -export default playerFactory; +export default PlayerFactory; diff --git a/src/components/syncPlay/core/timeSync/timeSync.js b/src/components/syncPlay/core/timeSync/TimeSync.js similarity index 99% rename from src/components/syncPlay/core/timeSync/timeSync.js rename to src/components/syncPlay/core/timeSync/TimeSync.js index 374e4eab00..8c07986de1 100644 --- a/src/components/syncPlay/core/timeSync/timeSync.js +++ b/src/components/syncPlay/core/timeSync/TimeSync.js @@ -1,6 +1,6 @@ /** * Module that manages time syncing with another device. - * @module components/syncPlay/core/timeSync/timeSync + * @module components/syncPlay/core/timeSync/TimeSync */ import { Events } from 'jellyfin-apiclient'; diff --git a/src/components/syncPlay/core/timeSync/core.js b/src/components/syncPlay/core/timeSync/TimeSyncCore.js similarity index 94% rename from src/components/syncPlay/core/timeSync/core.js rename to src/components/syncPlay/core/timeSync/TimeSyncCore.js index 0605202a15..a67752648d 100644 --- a/src/components/syncPlay/core/timeSync/core.js +++ b/src/components/syncPlay/core/timeSync/TimeSyncCore.js @@ -1,10 +1,10 @@ /** * Module that manages time syncing with several devices. - * @module components/syncPlay/core/timeSync/core + * @module components/syncPlay/core/timeSync/TimeSyncCore */ import { Events } from 'jellyfin-apiclient'; -import TimeSyncServer from './server'; +import TimeSyncServer from './TimeSyncServer'; /** * Class that manages time syncing with several devices. diff --git a/src/components/syncPlay/core/timeSync/server.js b/src/components/syncPlay/core/timeSync/TimeSyncServer.js similarity index 91% rename from src/components/syncPlay/core/timeSync/server.js rename to src/components/syncPlay/core/timeSync/TimeSyncServer.js index e8aab0482c..734763c07d 100644 --- a/src/components/syncPlay/core/timeSync/server.js +++ b/src/components/syncPlay/core/timeSync/TimeSyncServer.js @@ -1,9 +1,9 @@ /** * Module that manages time syncing with server. - * @module components/syncPlay/core/timeSync/server + * @module components/syncPlay/core/timeSync/TimeSyncServer */ -import TimeSync from './timeSync'; +import TimeSync from './TimeSync'; /** * Class that manages time syncing with server. diff --git a/src/components/syncPlay/ui/players/htmlAudioPlayer.js b/src/components/syncPlay/ui/players/HtmlAudioPlayer.js similarity index 54% rename from src/components/syncPlay/ui/players/htmlAudioPlayer.js rename to src/components/syncPlay/ui/players/HtmlAudioPlayer.js index 5045f3b34d..89929eb688 100644 --- a/src/components/syncPlay/ui/players/htmlAudioPlayer.js +++ b/src/components/syncPlay/ui/players/HtmlAudioPlayer.js @@ -1,14 +1,14 @@ /** * Module that manages the HtmlAudioPlayer for SyncPlay. - * @module components/syncPlay/players/htmlAudioPlayer + * @module components/syncPlay/ui/players/HtmlAudioPlayer */ -import SyncPlayHtmlVideoPlayer from './htmlVideoPlayer'; +import HtmlVideoPlayer from './HtmlVideoPlayer'; /** * Class that manages the HtmlAudioPlayer for SyncPlay. */ -class SyncPlayHtmlAudioPlayer extends SyncPlayHtmlVideoPlayer { +class HtmlAudioPlayer extends HtmlVideoPlayer { static type = 'htmlaudioplayer'; constructor(player, syncPlayManager) { @@ -16,4 +16,4 @@ class SyncPlayHtmlAudioPlayer extends SyncPlayHtmlVideoPlayer { } } -export default SyncPlayHtmlAudioPlayer; +export default HtmlAudioPlayer; diff --git a/src/components/syncPlay/ui/players/htmlVideoPlayer.js b/src/components/syncPlay/ui/players/HtmlVideoPlayer.js similarity index 95% rename from src/components/syncPlay/ui/players/htmlVideoPlayer.js rename to src/components/syncPlay/ui/players/HtmlVideoPlayer.js index aa09a97820..cc045d4954 100644 --- a/src/components/syncPlay/ui/players/htmlVideoPlayer.js +++ b/src/components/syncPlay/ui/players/HtmlVideoPlayer.js @@ -1,15 +1,15 @@ /** * Module that manages the HtmlVideoPlayer for SyncPlay. - * @module components/syncPlay/players/htmlVideoPlayer + * @module components/syncPlay/ui/players/HtmlVideoPlayer */ import { Events } from 'jellyfin-apiclient'; -import SyncPlayNoActivePlayer from './noActivePlayer'; +import NoActivePlayer from './NoActivePlayer'; /** * Class that manages the HtmlVideoPlayer for SyncPlay. */ -class SyncPlayHtmlVideoPlayer extends SyncPlayNoActivePlayer { +class HtmlVideoPlayer extends NoActivePlayer { static type = 'htmlvideoplayer'; constructor(player, syncPlayManager) { @@ -152,4 +152,4 @@ class SyncPlayHtmlVideoPlayer extends SyncPlayNoActivePlayer { } } -export default SyncPlayHtmlVideoPlayer; +export default HtmlVideoPlayer; diff --git a/src/components/syncPlay/ui/players/noActivePlayer.js b/src/components/syncPlay/ui/players/NoActivePlayer.js similarity index 93% rename from src/components/syncPlay/ui/players/noActivePlayer.js rename to src/components/syncPlay/ui/players/NoActivePlayer.js index 5b541fc8f0..b3bd6c3456 100644 --- a/src/components/syncPlay/ui/players/noActivePlayer.js +++ b/src/components/syncPlay/ui/players/NoActivePlayer.js @@ -1,18 +1,18 @@ /** * Module that manages the PlaybackManager when there's no active player. - * @module components/syncPlay/players/genericPlayer + * @module components/syncPlay/ui/players/NoActivePlayer */ import { playbackManager } from '../../../playback/playbackmanager'; import SyncPlay from 'SyncPlay'; -import QueueManager from './queueManager'; +import QueueManager from './QueueManager'; let syncPlayManager; /** * Class that manages the PlaybackManager when there's no active player. */ -class SyncPlayNoActivePlayer extends SyncPlay.Players.GenericPlayer { +class NoActivePlayer extends SyncPlay.Players.GenericPlayer { static type = 'default'; constructor(player, _syncPlayManager) { @@ -143,25 +143,25 @@ class SyncPlayNoActivePlayer extends SyncPlay.Players.GenericPlayer { /** * Overrides PlaybackManager's sendCommand method. */ - sendCommandRequest(cmd, player) { - console.debug('SyncPlay sendCommand:', cmd.Name, cmd); + sendCommandRequest(command, player) { + console.debug('SyncPlay sendCommand:', command.Name, command); const controller = syncPlayManager.getController(); const playerWrapper = syncPlayManager.getPlayerWrapper(); - const defaultAction = (command, player) => { - playerWrapper.localSendCommand(command); + const defaultAction = (_command, _player) => { + playerWrapper.localSendCommand(_command); }; - const ignoreCallback = (command, player) => { + const ignoreCallback = (_command, _player) => { // Do nothing. }; - const SetRepeatModeCallback = (command, player) => { - controller.setRepeatMode(command.Arguments.RepeatMode); + const SetRepeatModeCallback = (_command, _player) => { + controller.setRepeatMode(_command.Arguments.RepeatMode); }; - const SetShuffleQueueCallback = (command, player) => { - controller.setShuffleMode(command.Arguments.ShuffleMode); + const SetShuffleQueueCallback = (_command, _player) => { + controller.setShuffleMode(_command.Arguments.ShuffleMode); }; // Commands to override. @@ -172,11 +172,11 @@ class SyncPlayNoActivePlayer extends SyncPlay.Players.GenericPlayer { }; // Handle command. - const commandHandler = overrideCommands[cmd.Name]; + const commandHandler = overrideCommands[command.Name]; if (typeof commandHandler === 'function') { - commandHandler(cmd, player); + commandHandler(command, player); } else { - defaultAction(cmd, player); + defaultAction(command, player); } } @@ -441,4 +441,4 @@ class SyncPlayNoActivePlayer extends SyncPlay.Players.GenericPlayer { } } -export default SyncPlayNoActivePlayer; +export default NoActivePlayer; diff --git a/src/components/syncPlay/ui/players/queueManager.js b/src/components/syncPlay/ui/players/QueueManager.js similarity index 98% rename from src/components/syncPlay/ui/players/queueManager.js rename to src/components/syncPlay/ui/players/QueueManager.js index aefd924d94..bcc6c1c2b3 100644 --- a/src/components/syncPlay/ui/players/queueManager.js +++ b/src/components/syncPlay/ui/players/QueueManager.js @@ -1,6 +1,6 @@ /** * Module that replaces the PlaybackManager's queue. - * @module components/syncPlay/players/queueManager + * @module components/syncPlay/ui/players/QueueManager */ /** diff --git a/src/scripts/site.js b/src/scripts/site.js index 8f99cce251..45ecdf5a7a 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -33,9 +33,9 @@ import '../components/playback/playerSelectionMenu'; import SyncPlay from 'SyncPlay'; import { playbackManager } from '../components/playback/playbackmanager'; import SyncPlayToasts from '../components/syncPlay/ui/syncPlayToasts'; -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 SyncPlayNoActivePlayer from '../components/syncPlay/ui/players/NoActivePlayer'; +import SyncPlayHtmlVideoPlayer from '../components/syncPlay/ui/players/HtmlVideoPlayer'; +import SyncPlayHtmlAudioPlayer from '../components/syncPlay/ui/players/HtmlAudioPlayer'; // TODO: Move this elsewhere window.getWindowLocationSearch = function(win) {