returnvalidatePlaybackInfoResult(self,playbackInfoResult)?getOptimalMediaSource(apiClient,item,playbackInfoResult.MediaSources).then(function(mediaSource){returnmediaSource?mediaSource.RequiresOpening&&!mediaSource.LiveStreamId?getLiveStream(player,apiClient,item,playbackInfoResult.PlaySessionId,deviceProfile,maxBitrate,startPosition,mediaSource,null,null).then(function(openLiveStreamResult){returnsupportsDirectPlay(apiClient,item,openLiveStreamResult.MediaSource).then(function(result){returnopenLiveStreamResult.MediaSource.enableDirectPlay=result,openLiveStreamResult.MediaSource})}):mediaSource:(showPlaybackInfoErrorMessage(self,"NoCompatibleStream"),Promise.reject())}):Promise.reject()})}functiongetPlayer(item,playOptions,forceLocalPlayers){varserverItem=isServerItem(item);returngetAutomaticPlayers(self,forceLocalPlayers).filter(function(p){if(p.canPlayMediaType(item.MediaType)){if(serverItem)return!p.canPlayItem||p.canPlayItem(item,playOptions);if(item.Url&&p.canPlayUrl)returnp.canPlayUrl(item.Url)}return!1})[0]}functionqueue(options,mode,player){if(!(player=player||self._currentPlayer))returnself.play(options);if(options.items)returntranslateItemsForPlayback(options.items,options).then(function(items){queueAll(items,mode,player)});if(!options.serverId)thrownewError("serverId required!");returngetItemsForPlayback(options.serverId,{Ids:options.ids.join(",")}).then(function(result){returntranslateItemsForPlayback(result.Items,options).then(function(items){queueAll(items,mode,player)})})}functionqueueAll(items,mode,player){if(items.length){if(!player.isLocalPlayer)returnvoid("next"===mode?player.queueNext({items:items}):player.queue({items:items}));if(player&&!enableLocalPlaylistManagement(player)){varapiClient=connectionManager.getApiClient(items[0].ServerId);returnvoidplayer.getDeviceProfile(items[0]).then(function(profile){setStreamUrls(items,profile,self.getMaxStreamingBitrate(player),apiClient,0).then(function(){"next"===mode?player.queueNext(items):player.queue(items)})})}"next"===mode?self._playQueueManager.queueNext(items):self._playQueueManager.queue(items)}}functiononPlayerProgressInterval(){sendProgressUpdate(this,"timeupdate")}functionstartPlaybackProgressTimer(player){stopPlaybackProgressTimer(player),player._progressInterval=setInterval(onPlayerProgressInterval.bind(player),1e4)}functionstopPlaybackProgressTimer(player){player._progressInterval&&(clearInterval(player._progressInterval),player._progressInterval=null)}functiononPlaybackStarted(player,playOptions,streamInfo,mediaSource){if(!player)thrownewError("player cannot be null");setCurrentPlayerInternal(player);varplayerData=getPlayerData(player);playerData.streamInfo=streamInfo,streamInfo.playbackStartTimeTicks=1e4*(newDate).getTime(),mediaSource?(playerData.audioStreamIndex=mediaSource.DefaultAudioStreamIndex,playerData.subtitleStreamIndex=mediaSource.DefaultSubtitleStreamIndex):(playerData.audioStreamIndex=null,playerData.subtitleStreamIndex=null),self._playNextAfterEnded=!0;varisFirstItem=playOptions.isFirstItem,fullscreen=playOptions.fullscreen,state=self.getPlayerState(player,streamInfo.item,streamInfo.mediaSource);reportPlayback(self,state,player,!0,state.NowPlayingItem.ServerId,"reportPlaybackStart"),state.IsFirstItem=isFirstItem,state.IsFullscreen=fullscreen,events.trigger(player,"playbackstart",[state]),events.trigger(self,"playbackstart",[player,state]),streamInfo.started=!0,startPlaybackProgressTimer(player)}functiononPlaybackStartedFromSelfManagingPlayer(e,item,mediaSource){varplayer=this;setCurrentPlayerInternal(player);varplayOptions=item.playOptions||{},isFirstItem=playOptions.isFirstItem,fullscreen=playOptions.fullscreen;playOptions.isFirstItem=!1;varplayerData=getPlayerData(player);playerData.streamInfo={};varstreamInfo=playerData.streamInfo;streamInfo.playbackStartTimeTicks=1e4*(newDate).getTime();varstate=self.getPlayerState(player,item,mediaSource);reportPlayback(self,state,player,!0,state.NowPlayingItem.ServerId,"reportPlaybackStart"),state.IsFirstItem=isFirstItem,state.IsFullscreen=fullscreen,e
;varnewItemInfo=self._playQueueManager.getNextItemInfo();if(newItemInfo){console.log("playing next track");varnewItemPlayOptions=newItemInfo.item.playOptions||{};playInternal(newItemInfo.item,newItemPlayOptions,function(){setPlaylistState(newItemInfo.item.PlaylistItemId,newItemInfo.index)})}},self.previousTrack=function(player){if((player=player||self._currentPlayer)&&!enableLocalPlaylistManagement(player))returnplayer.previousTrack();varnewIndex=self.getCurrentPlaylistIndex(player)-1;if(newIndex>=0){varplaylist=self._playQueueManager.getPlaylist(),newItem=playlist[newIndex];if(newItem){varnewItemPlayOptions=newItem.playOptions||{};newItemPlayOptions.startPositionTicks=0,playInternal(newItem,newItemPlayOptions,function(){setPlaylistState(newItem.PlaylistItemId,newIndex)})}}},self.queue=function(options,player){queue(options,"",player)},self.queueNext=function(options,player){queue(options,"next",player)},events.on(pluginManager,"registered",function(e,plugin){"mediaplayer"===plugin.type&&initMediaPlayer(plugin)}),pluginManager.ofType("mediaplayer").map(initMediaPlayer),self.onAppClose=function(){varplayer=this._currentPlayer;player&&this.isPlaying(player)&&(this._playNextAfterEnded=!1,onPlaybackStopped.call(player))},self.playbackStartTime=function(player){if((player=player||this._currentPlayer)&&!enableLocalPlaylistManagement(player)&&!player.isLocalPlayer)returnplayer.playbackStartTime();varstreamInfo=getPlayerData(player).streamInfo;returnstreamInfo?streamInfo.playbackStartTimeTicks:null},apphost.supports("remotecontrol")&&require(["serverNotifications"],function(serverNotifications){events.on(serverNotifications,"ServerShuttingDown",self.setDefaultPlayerActive.bind(self)),events.on(serverNotifications,"ServerRestarting",self.setDefaultPlayerActive.bind(self))})}varstartingPlaySession=(newDate).getTime();returnPlaybackManager.prototype.getCurrentPlayer=function(){returnthis._currentPlayer},PlaybackManager.prototype.currentTime=function(player){returnplayer=player||this._currentPlayer,!player||enableLocalPlaylistManagement(player)||player.isLocalPlayer?this.getCurrentTicks(player):player.currentTime()},PlaybackManager.prototype.nextItem=function(player){if((player=player||this._currentPlayer)&&!enableLocalPlaylistManagement(player))returnplayer.nextItem();varnextItem=this._playQueueManager.getNextItemInfo();if(!nextItem||!nextItem.item)returnPromise.reject();varapiClient=connectionManager.getApiClient(nextItem.item.ServerId);returnapiClient.getItem(apiClient.getCurrentUserId(),nextItem.item.Id)},PlaybackManager.prototype.canQueue=function(item){return"MusicAlbum"===item.Type||"MusicArtist"===item.Type||"MusicGenre"===item.Type?this.canQueueMediaType("Audio"):this.canQueueMediaType(item.MediaType)},PlaybackManager.prototype.canQueueMediaType=function(mediaType){return!!this._currentPlayer&&this._currentPlayer.canPlayMediaType(mediaType)},PlaybackManager.prototype.isMuted=function(player){return!!(player=player||this._currentPlayer)&&player.isMuted()},PlaybackManager.prototype.setMute=function(mute,player){(player=player||this._currentPlayer)&&player.setMute(mute)},PlaybackManager.prototype.toggleMute=function(mute,player){(player=player||this._currentPlayer)&&(player.toggleMute?player.toggleMute():player.setMute(!player.isMuted()))},PlaybackManager.prototype.toggleDisplayMirroring=function(){this.enableDisplayMirroring(!this.enableDisplayMirroring())},PlaybackManager.prototype.enableDisplayMirroring=function(enabled){if(null!=enabled){varval=enabled?"1":"0";returnvoidappSettings.set("displaymirror",val)}return"0"!==(appSettings.get("displaymirror")||"")},PlaybackManager.prototype.nextChapter=function(player){player=player||this._currentPlayer;varitem=this.currentItem(player),ticks=this.getCurrentTicks(player),nextChapter=(item.Chapters||[]).filter(function(i){returni.StartPositionTicks>ticks})[0];nextChapter?this.seek(nextChapter.StartPositionTicks,player):this.nextTrack(player)},PlaybackManager.prototype.previousChapter=function(player){player=player||this._currentPlayer;varitem=this.currentI