import playbackManager from"./../modules/common/playback/playbackmanager.js";import focusManager from"./../modules/focusmanager.js";import cardBuilder from"./../modules/cardbuilder/cardbuilder.js";import imageLoader from"./../modules/common/imagehelper.js";import dom from"./../modules/dom.js";import browser from"./../modules/browser.js";import globalize from"./../modules/common/globalize.js";import datetime from"./../modules/common/datetime.js";import layoutManager from"./../modules/layoutmanager.js";import itemManager from"./../modules/common/itemmanager/itemmanager.js";import loading from"./../modules/loading/loading.js";import events from"./../modules/emby-apiclient/events.js";import connectionManager from"./../modules/emby-apiclient/connectionmanager.js";import appHeader from"./../modules/appheader/appheader.js";import mediaInfo from"./../modules/mediainfo/mediainfo.js";import backdrop from"./../modules/backdrop/backdrop.js";import OsdPlayQueue from"./playqueue.js";import TvPlayQueue from"./tvplayqueue.js";import LyricsRenderer from"./lyrics.js";import appRouter from"./../modules/approuter.js";import itemContextMenu from"./../modules/itemcontextmenu.js";import itemShortcuts from"./../modules/shortcuts.js";import inputManager from"./../modules/common/inputmanager.js";import userSettings from"./../modules/common/usersettings/usersettings.js";import mouseManager from"./../modules/input/mouse.js";import"./../modules/emby-elements/emby-scroller/emby-scroller.js";import"./../modules/emby-elements/emby-button/paper-icon-button-light.js";import"./../modules/emby-elements/emby-tabs/emby-tabs.js";import"./../modules/emby-elements/emby-slider/emby-slider.js";import appSettings from"./../modules/common/appsettings.js";import{appHost}from"./../modules/common/servicelocator.js";import keyboardManager from"./../modules/input/keyboard.js";import BaseView from"./../modules/viewmanager/baseview.js";import OsdController from"./../modules/playback/osdcontroller.js";import playerSettingsMenu from"./../modules/playback/playersettingsmenu.js";require(["css!videoosd/videoosd.css"]);let useBackdropFilterForBlur=dom.allowBackdropFilter(),headerElement=document.querySelector(".skinHeader"),backdropContainer=document.querySelector(".backdropContainer"),backgroundContainer=document.querySelector(".backgroundContainer"),headerRight=document.querySelector(".headerRight");function showActionSheet(options){return Emby.importModule("./modules/actionsheet/actionsheet.js").then(function(ActionSheet){return ActionSheet.show(options)})}let enableHighResBlur=(()=>{var deviceMemory,platform,cores=navigator.hardwareConcurrency||4;return!(cores<6||(deviceMemory=navigator.deviceMemory||2)<2||(platform=(navigator.platform||"").toLowerCase(),"android"===globalThis.appMode&&(cores<4||deviceMemory<2||platform.includes("armv7"))))})();function allowTabAnimation(){var deviceMemory,platform,cores=navigator.hardwareConcurrency||4;return!(cores<4||(2400<=(screen.width||screen.availWidth||0)||1400<=(screen.height||screen.availHeight||0))&&cores<6||(deviceMemory=navigator.deviceMemory||2)<2||(platform=(navigator.platform||"").toLowerCase(),"android"===globalThis.appMode&&(cores<4||deviceMemory<2||platform.includes("armv7"))))}let enableTabAnimation=allowTabAnimation(),fadeSize="1.5%",fadeDuration=300;function fadeInLeft(elem){var keyframes=[{opacity:"0",transform:"translate3d(-"+fadeSize+", 0, 0)",offset:0},{opacity:"1",transform:"none",offset:1}],timing={duration:fadeDuration,iterations:1,easing:"ease-out"};elem.animate(keyframes,timing)}function fadeInRight(elem){var keyframes=[{opacity:"0",transform:"translate3d("+fadeSize+", 0, 0)",offset:0},{opacity:"1",transform:"none",offset:1}],timing={duration:fadeDuration,iterations:1,easing:"ease-out"};elem.animate(keyframes,timing)}function isPlaying(player,mediaType){return!(!player||!player.isLocalPlayer)&&(!!mediaType||playbackManager.isPlaying(player))}function isDisplayingLocalVideo(player,mediaType){return!(!player||!player.isLocalPlayer)&&("Video"===mediaType||!mediaType&&playbackManager.isPlayingMediaType(["Video"],player))}function getRewindIconLTR(){switch(userSettings.skipBackLength()){case 5e3:return"";case 1e4:return"";case 3e4:return"";default:return""}}function getForwardIconLTR(){switch(userSettings.skipForwardLength()){case 5e3:return"";case 1e4:return"";case 3e4:return"";default:return""}}function setForwardIcon(btnFastForward){btnFastForward.querySelector("i").innerHTML=("rtl"===document.dir?getRewindIconLTR:getForwardIconLTR)()}function setRewindIcon(btnRewind){btnRewind.querySelector("i").innerHTML=("rtl"===document.dir?getForwardIconLTR:getRewindIconLTR)()}function getBaseActionSheetOptions(positionTo,isLocalVideo){isLocalVideo=!(!layoutManager.tv||!isLocalVideo);return{positionTo:positionTo,positionX:isLocalVideo?"right":null,positionY:"above",transformOrigin:isLocalVideo?"right bottom":"center bottom",noTextWrap:!0}}function getCommandOptions(item,user,button,isLocalVideo){return Object.assign(getBaseActionSheetOptions(button,isLocalVideo),{items:[item],open:!1,play:!1,playAllFromHere:!1,queueAllFromHere:!1,cancelTimer:!1,record:!1,deleteItem:!1,shuffle:!1,instantMix:!1,user:user,share:!0,queue:!1,editSubtitles:!1,convert:!1,refreshMetadata:!1,identify:!1})}function showMoreMenu(item,button,isLocalVideo){return connectionManager.getApiClient(item.ServerId).getCurrentUser().then(function(user){return itemContextMenu.show(getCommandOptions(item,user,button,isLocalVideo))})}function focusMainOsdControls(instance){console.log("focusMainOsdControls"),focusManager.focus(instance.nowPlayingPositionSlider)}function hideOrShowAll(instance,elems,hide,focusedElement){let wasFocused;for(let i=0,length=elems.length;i'+text+""}function getSecondaryName(item,enableLinkButton){var title=itemManager.getDisplayName(item,{includeParentInfo:"Program"!==item.Type,includeIndexNumber:"Program"!==item.Type});return enableLinkButton?getTextActionButton(item,title):title}function getAllArtistsHtml(displayItem){var html=[],artistItems=displayItem.ArtistItems;if(artistItems)for(let i=0,length=artistItems.length;i{updateRecordingButton(displayItem,user),updateButtomTabsVisibility(item,displayItem);let primaryNameText,primaryNameHtml,titleElement=(displayItem.EpisodeTitle||displayItem.IsSeries?primaryNameText=displayItem.Name:displayItem.SeriesName?(primaryNameText=displayItem.SeriesName,displayItem.SeriesId&&!displayingLocalVideo&&(primaryNameHtml=getTextActionButton({Id:displayItem.SeriesId,Type:"Series",IsFolder:!0,ServerId:displayItem.ServerId,Name:displayItem.SeriesName,ParentId:displayItem.ParentId}))):displayItem.ArtistItems&&displayItem.ArtistItems.length&&(primaryNameText=displayItem.Name,primaryNameHtml=getAllArtistsHtml(displayItem).join(", ")),primaryNameHtml=primaryNameHtml||primaryNameText,((item,originalItem,title)=>{appHeader.setLogoTitle({items:[item,originalItem],titleText:"",preferredLogoImageTypes:["LogoLightColor","LogoLight","Logo"]}),(originalItem=title||(item?item.Name:null))&&(document.title=originalItem)})(displayItem,item,primaryNameText),((displayItem,item,displayingLocalVideo,mediaType)=>{let backdropItems=[displayItem];if(item.Id!==displayItem.Id&&backdropItems.push(item),displayingLocalVideo)backdrop.setBackdrops(backdropItems),view.classList.add("darkContentContainer","graphicContentContainer"),headerElement.classList.add("headroom-scrolling"),clearBlurFromDocumentElement(self);else{displayItem="Video"===mediaType?"nowPlayingVideoBackgroundStyle":"nowPlayingAudioBackgroundStyle";if("blur"===userSettings[displayItem]()&&(backdropItems=getDetailImageItemsSync().Items,item=backdropItems[0])){displayingLocalVideo=imageLoader.getImageUrl(item,connectionManager.getApiClient(item),{width:100,adjustForPixelRatio:!1}).imgUrl;if(displayingLocalVideo)return backdrop.setBackdrop(displayingLocalVideo),displayingLocalVideo?(view.classList.add("darkContentContainer"),view.classList.remove("graphicContentContainer"),headerElement.classList.remove("headroom-scrolling")):(view.classList.remove("darkContentContainer","graphicContentContainer"),headerElement.classList.remove("headroom-scrolling"),clearBlurFromDocumentElement(self))}backdrop.setBackdrops(backdropItems),clearBlurFromDocumentElement(self),headerElement.classList.remove("headroom-scrolling"),backdrop.hasBackdrop()?view.classList.add("darkContentContainer","graphicContentContainer"):view.classList.remove("darkContentContainer","graphicContentContainer")}})(displayItem,item,displayingLocalVideo,item.MediaType),displayingLocalVideo?setPoster(null):setPoster(displayItem),osdTitle),secondaryName,secondaryMediaInfo=(secondaryName="Audio"===item.MediaType?(secondaryName=getSecondaryName(displayItem,!1),user=primaryNameHtml,primaryNameHtml=secondaryName,user):getSecondaryName(displayItem,!displayingLocalVideo),primaryNameHtml||(primaryNameHtml=secondaryName,secondaryName=null),videoOsdParentTitle.innerHTML=primaryNameHtml,(videoOsdParentTitleLarge.innerHTML=primaryNameHtml)?videoOsdSecondaryText.classList.add("videoOsdSecondaryText-withparentname"):videoOsdSecondaryText.classList.remove("videoOsdSecondaryText-withparentname"),secondaryName||displayItem.Type,(titleElement.innerHTML=secondaryName)?titleElement.classList.remove("hide"):titleElement.classList.add("hide"),videoOsdSecondaryMediaInfo),secondaryMediaInfoHtml,chapters=("Audio"===displayItem.MediaType||"Program"!==displayItem.Type&&!secondaryName?secondaryMediaInfoHtml=mediaInfo.getMediaInfoHtml(displayItem,{runtime:!1,endsAt:!1,container:!displayingLocalVideo,year:"Audio"!==displayItem.MediaType,CommunityRating:!1,criticRating:!1,subtitles:!1,officialRating:!1,mediaInfoIcons:!1}):"Program"!==displayItem.Type&&"Recording"!==displayItem.Type&&(secondaryMediaInfoHtml=mediaInfo.getSecondaryMediaInfoHtml(displayItem,{startDate:!1,programTime:!1})),"Audio"===displayItem.MediaType&&displayItem.Album&&displayItem.AlbumId?(videoOsdThirdTitle.innerHTML=getTextActionButton({Type:"MusicAlbum",Id:displayItem.AlbumId,ServerId:displayItem.ServerId,Name:displayItem.Album}),videoOsdThirdTitle.classList.remove("hide")):videoOsdThirdTitle.classList.add("hide"),(item=>{var mediaStreams=((item=((item=item&&"Audio"!==item.MediaType?null:item)||{}).MediaSources||[])[0]||{}).MediaStreams||[];for(let i=0,length=mediaStreams.length;i=creditsStart&&(creditsStart=null),currentIntroInfo=null!=introStart&&introEnd?{start:introStart,end:introEnd}:null,currentCreditsInfo=null!=creditsStart?{start:creditsStart}:null;var bottomTabControllers=self.bottomTabControllers;for(let i=0,length=bottomTabControllers.length;i{for(let i=0,length=userViews.length;i{var val;return!userSettings.enableVideoUnderUI()&&("true"===(val=userSettings.hideMediaTransportButtons())?1:"false"!==val&&!mouseManager.lastMouseInputTime())})()&&(hideTransportButtons=!0),mainLockButton.classList.add("hide")):mainLockButton.classList.remove("hide"),videoOsdButtomButtonsTopRight.classList.remove("videoOsdBottom-buttons-topright-remotecontrol","videoOsdBottom-buttons-topright-remotecontrol-tv"),tabContainersElem.classList.remove("videoosd-tabcontainers-autosmall"),bottomTabs.classList.remove("videoOsdBottom-tabs-remotecontrol"),videoOsdVolumeControlsBottom.classList.add("hide"),self.topVolumeControls&&self.topVolumeControls.classList.remove("hide"),videoOsdParentTitle.classList.add("hide","osdText-nowrap"),videoOsdParentTitleLarge.classList.add("osdText-nowrap"),videoOsdParentTitleLarge.classList.remove("hide"),state.IsInitialRequest?appRouter.setTransparency(0):appRouter.setTransparency("full"),hideOrShowAll(self,stopButtons,!layoutManager.tv||!userSettings.enableVideoUnderUI(),null),videoOsdText.classList.remove("videoOsdText-remotecontrol","videoOsdText-autosmall","videoOsdText-remotecontrol-tv"),videoOsdBottomButtons.classList.remove("videoOsdBottom-buttons-remotecontrol","videoOsdBottom-buttons-remotecontrol-tv"),osdBottomElement.classList.remove("videoOsdBottom-remotecontrol","videoOsdBottom-safe","padded-top-page","videoOsdBottom-tvnowplaying"),view.classList.remove("justify-content-flex-end"),osdTitle.classList.remove("secondaryText"),osdTitle.classList.add("osdText-nowrap"),videoOsdSecondaryMediaInfo.classList.remove("videoOsdSecondaryMediaInfo-remotecontrol"),videoOsdPositionText.classList.remove("videoOsd-customFont-remotecontrol"),videoOsdDurationText.classList.remove("videoOsd-customFont-remotecontrol"),videoOsdBottomButtons.classList.remove("videoOsd-customFont-remotecontrol","videoOsd-customFont-remotecontrol-buttons"),videoOsdButtomButtonsTopRight.classList.remove("videoOsd-customFont-remotecontrol","videoOsd-customFont-remotecontrol-buttons"),headerElement.classList.remove("videoosd-header-safe"),videoOsdBottomContentbuttons.classList.add("hide"),videoOsdBottomContentbuttons.classList.remove("videoOsd-customFont-remotecontrol-buttons","videoOsd-customFont-remotecontrol","videoOsd-customFont-remotecontrol-buttons","videoOsdBottom-contentbuttons-tv"),videoOsdPositionContainer.classList.remove("videoOsdPositionContainer-limitwidth"),backdropContainer.classList.remove("nowplaying-backdropcontainer-blur","nowplaying-backdropcontainer-blur-high","nowplaying-backdropcontainer-blur-extrasaturation","nowplaying-backdropcontainer-blur-backdropfilter"),backgroundContainer.classList.remove("nowplaying-backgroundcontainer-blur","nowplaying-backgroundcontainer-blur-backdropfilter"),backgroundContainer.classList.remove("nowplaying-backgroundcontainer-brighter"),self.enableStopOnBack=!0,self.enableBackOnStop=!0,btnOsdMoreTitle.classList.add("hide"),btnOsdMoreBottom.classList.add("hide")}else destroyOsdResizeObserver(self),unlockOrientation(),setSystemUIHidden(!1),osdTitle.classList.add("secondaryText"),osdTitle.classList.remove("osdText-nowrap"),osdBottomElement.classList.remove("videoOsdBottom-video","videoOsdBottom-hidden","hide","videoosd-withupnext"),self.showOsd(),"blur"===userSettings["Video"===mediaType?"nowPlayingVideoBackgroundStyle":"nowPlayingAudioBackgroundStyle"]()?(backdropContainer.classList.add("nowplaying-backdropcontainer-blur"),enableHighResBlur&&backdropContainer.classList.add("nowplaying-backdropcontainer-blur-high"),browser.chrome?backdropContainer.classList.add("nowplaying-backdropcontainer-blur-extrasaturation"):backdropContainer.classList.remove("nowplaying-backdropcontainer-blur-extrasaturation"),backgroundContainer.classList.add("nowplaying-backgroundcontainer-blur"),useBackdropFilterForBlur&&(backgroundContainer.classList.add("nowplaying-backgroundcontainer-blur-backdropfilter"),backdropContainer.classList.add("nowplaying-backdropcontainer-blur-backdropfilter")),backgroundContainer.classList.remove("nowplaying-backgroundcontainer-brighter")):(backdropContainer.classList.remove("nowplaying-backdropcontainer-blur","nowplaying-backdropcontainer-blur-high","nowplaying-backdropcontainer-blur-extrasaturation","nowplaying-backdropcontainer-blur-backdropfilter"),backgroundContainer.classList.remove("nowplaying-backgroundcontainer-blur","nowplaying-backgroundcontainer-blur-backdropfilter"),backgroundContainer.classList.add("nowplaying-backgroundcontainer-brighter")),videoOsdParentTitleLarge.classList.remove("osdText-nowrap"),videoOsdParentTitleLarge.classList.add("hide"),videoOsdParentTitle.classList.remove("hide","osdText-nowrap"),videoOsdSecondaryMediaInfo.classList.add("videoOsdSecondaryMediaInfo-remotecontrol"),mainLockButton.classList.add("hide"),headerElement.classList.add("videoosd-header-safe"),layoutManager.tv?(osdBottomElement.classList.add("videoOsdBottom-safe","padded-top-page","videoOsdBottom-tvnowplaying","videoOsdBottom-remotecontrol"),view.classList.remove("justify-content-flex-end"),belowTransportButtonsContainer.classList.remove("videoOsd-belowtransportbuttons-vertical"),videoOsdText.classList.add("videoOsdText-remotecontrol","videoOsdText-remotecontrol-tv"),videoOsdText.classList.remove("videoOsdText-autosmall"),osdPosterContainer.classList.remove("osdPosterContainer-autoexpand"),videoOsdSecondaryText.classList.add("videoOsdSecondaryText-remotecontrol"),videoOsdBottomButtons.classList.remove("videoOsdBottom-buttons-remotecontrol","videoOsd-customFont-remotecontrol","videoOsd-customFont-remotecontrol-buttons"),videoOsdBottomButtons.classList.add("videoOsdBottom-buttons-remotecontrol-tv"),videoOsdBottomMaincontrols.classList.remove("videoOsdBottomMaincontrols-autoexpand"),videoOsdPositionContainer.classList.add("focuscontainer-x"),videoOsdPositionContainer.classList.remove("videoOsdPositionContainer-autosmall"),tabContainersElem.classList.remove("videoosd-tabcontainers-autosmall"),bottomTabs.classList.remove("videoOsdBottom-tabs-remotecontrol"),videoOsdPositionText.classList.remove("videoOsd-customFont-remotecontrol"),videoOsdDurationText.classList.remove("videoOsd-customFont-remotecontrol"),videoOsdBottomContentbuttons.classList.add("videoOsdBottom-contentbuttons-tv"),videoOsdBottomContentbuttons.classList.remove("hide","videoOsd-customFont-remotecontrol-buttons","videoOsd-customFont-remotecontrol","videoOsd-customFont-remotecontrol-buttons"),videoOsdVolumeControlsBottom.classList.add("hide"),self.topVolumeControls&&self.topVolumeControls.classList.remove("hide"),videoOsdButtomButtonsTopRight.classList.remove("videoOsd-customFont-remotecontrol","videoOsd-customFont-remotecontrol-buttons","videoOsdBottom-buttons-topright-remotecontrol"),videoOsdButtomButtonsTopRight.classList.add("videoOsdBottom-buttons-topright-remotecontrol-tv"),btnOsdMoreTitle.classList.add("hide"),btnOsdMoreBottom.classList.remove("hide")):(osdBottomElement.classList.add("videoOsdBottom-remotecontrol","videoOsdBottom-safe","padded-top-page"),view.classList.remove("justify-content-flex-end"),osdPosterContainer.classList.add("osdPosterContainer-autoexpand"),belowTransportButtonsContainer.classList.add("videoOsd-belowtransportbuttons-vertical"),videoOsdText.classList.add("videoOsdText-remotecontrol","videoOsdText-autosmall"),videoOsdText.classList.remove("videoOsdText-remotecontrol-tv"),videoOsdBottomMaincontrols.classList.add("videoOsdBottomMaincontrols-autoexpand"),videoOsdPositionContainer.classList.add("videoOsdPositionContainer-autosmall"),videoOsdPositionContainer.classList.remove("focuscontainer-x"),tabContainersElem.classList.add("videoosd-tabcontainers-autosmall"),bottomTabs.classList.add("videoOsdBottom-tabs-remotecontrol"),videoOsdSecondaryText.classList.add("videoOsdSecondaryText-remotecontrol"),videoOsdBottomButtons.classList.add("videoOsdBottom-buttons-remotecontrol"),videoOsdBottomButtons.classList.remove("videoOsdBottom-buttons-remotecontrol-tv"),videoOsdPositionText.classList.add("videoOsd-customFont-remotecontrol"),videoOsdDurationText.classList.add("videoOsd-customFont-remotecontrol"),videoOsdBottomButtons.classList.add("videoOsd-customFont-remotecontrol","videoOsd-customFont-remotecontrol-buttons"),videoOsdButtomButtonsTopRight.classList.add("videoOsd-customFont-remotecontrol","videoOsd-customFont-remotecontrol-buttons"),videoOsdBottomContentbuttons.classList.remove("hide","videoOsdBottom-contentbuttons-tv"),videoOsdBottomContentbuttons.classList.add("videoOsd-customFont-remotecontrol-buttons","videoOsd-customFont-remotecontrol"),videoOsdVolumeControlsBottom.classList.remove("hide"),self.topVolumeControls&&self.topVolumeControls.classList.add("hide"),videoOsdButtomButtonsTopRight.classList.add("videoOsdBottom-buttons-topright-remotecontrol"),videoOsdButtomButtonsTopRight.classList.remove("videoOsdBottom-buttons-topright-remotecontrol-tv"),videoOsdPositionContainer.classList.add("videoOsdPositionContainer-limitwidth"),btnOsdMoreTitle.classList.remove("hide"),btnOsdMoreBottom.classList.add("hide")),appRouter.setTransparency(0),hideOrShowAll(self,stopButtons,!1,null),self.enableStopOnBack=!1,self.enableBackOnStop=!0;if(hideTransportButtons?(videoOsdBottomButtons.classList.add("hide"),self.bottomTabs.classList.add("videoOsdTabs-margintop")):(videoOsdBottomButtons.classList.remove("hide"),self.bottomTabs.classList.remove("videoOsdTabs-margintop")),isLocalVideo)destroyPlayQueue(self),destroyLyricsRenderer(self);else if(self.lyricsRenderer||(self.lyricsRenderer=new LyricsRenderer({parent:view.querySelector(".lyricsSection")})),!self.playQueue){let osdContentSection=userSettings.osdContentSection()||getDefaultOsdContentSection();layoutManager.tv?(self.playQueue=new TvPlayQueue({parent:view.querySelector(".videoOsdBottom")}),osdContentSection="playqueue"):self.playQueue=new OsdPlayQueue({parent:view.querySelector(".videoOsdBottom")}),setContentSection(osdContentSection="lyrics"===osdContentSection?getDefaultOsdContentSection():osdContentSection,!1)}player=self.btnPause;isLocalVideo&&!layoutManager.tv?(mainTransportButtons.classList.add("videoOsd-centerButtons-autolayout"),player.classList.add("videoOsd-btnPause-autolayout")):(mainTransportButtons.classList.remove("videoOsd-centerButtons-autolayout"),player.classList.remove("videoOsd-btnPause-autolayout"))}function getDetailImageItemsSync(){let item=self.osdController.currentDisplayItem;var items=[];return item&&(item.SeriesPrimaryImageTag&&(item={Id:item.SeriesId,Name:item.SeriesName,ServerId:item.ServerId,ImageTags:{Primary:item.SeriesPrimaryImageTag},IsFolder:!0,PrimaryImageAspectRatio:2/3}),items.push(item)),{Items:items,TotalRecordCount:items.length}}function getDetailImageItems(){return Promise.resolve(getDetailImageItemsSync())}function getDetailImageListOptions(items){let cardClass="osdRemoteControlImageCard";return layoutManager.tv||(cardClass+=" osdRemoteControlImageCard-automargin"),{renderer:cardBuilder,options:{overlayText:!0,fields:[],action:"none",multiSelect:!1,contextMenu:!layoutManager.tv,ratingButton:!layoutManager.tv,playedButton:!1,cardClass:cardClass,cardBoxClass:"osdRemoteControlImageCardBox",cardContentClass:"osdRemoteControlImageCardContent legacyLazyLoadImmediate",defaultIcon:!0,typeIndicator:!1,playedIndicator:!1,syncIndicator:!1,timerIndicator:!1,randomDefaultBackground:!1,staticElement:!0,progress:!1,hoverPlayButton:!1,moreButton:!1,enableUserData:!layoutManager.tv,shape:"auto"},virtualScrollLayout:"vertical-grid"}}function onStateChanged(event,state){state.NowPlayingItem&&(isEnabled=!0,((event,player,state)=>{var playState=(self.lastPlayerState=state).PlayState||{},supportedCommands=(updatePlayPauseState(playState.IsPaused,state.IsInitialRequest),playbackManager.getSupportedCommands(player));currentPlayerSupportedCommands=supportedCommands,updatePlayerVolumeState(0,playState.IsMuted,playState.VolumeLevel,supportedCommands),updatePlayerBrightnessState(player),self.osdController.updatePlayerState(event,player,state);for(let i=0,length=fastForwardButtons.length;i{if(!state.NowPlayingItem){currentIntroInfo=null,currentCreditsInfo=null,ratingTextNeedsUpdate=!0,setPoster(null),updateRecordingButton(null),appHeader.setTitle(""),self.nowPlayingVolumeSlider.disabled=!0;for(let i=0,length=fastForwardButtons.length;i{var introInfo=currentIntroInfo;introInfo&&enableSkipIntro&¤tTime>=introInfo.start&¤tTime{var item;ratingTextNeedsUpdate&&(item=self.osdController.currentDisplayItem)&&(ratingTextNeedsUpdate=!1,item.OfficialRating&&"Trailer"!==item.Type&&"Video"===item.MediaType&&userSettings.enableRatingInfoOnPlaybackStart()?(ratingTextElement.innerHTML=globalize.translate("RatedValue",item.OfficialRating),ratingInfoContainer.classList.add("hide"),ratingInfoContainer.offsetWidth,ratingInfoContainer.classList.remove("hide")):ratingInfoContainer.classList.add("hide"))})(),updateTimeDisplay(currentTime,currentRuntimeTicks,playbackManager.getSeekableRanges(this)),((player,item)=>{if("TvChannel"===item.Type){item=item.CurrentProgram;if(item&&item.EndDate)try{var state,endDate=datetime.parseISO8601Date(item.EndDate);Date.now()>=endDate.getTime()&&(console.log("program info needs to be refreshed"),state=playbackManager.getPlayerState(player),onStateChanged.call(player,{type:"updatemetadata"},state))}catch(e){console.log("Error parsing date: "+item.EndDate)}}})(this,item))}let fiftyMinuteTicks=3e10,fortyMinuteTicks=24e9;function showComingUpNextIfNeeded(player,currentItem,currentTimeTicks,runtimeTicks,isStopped,creditsInfo){if((runtimeTicks&¤tTimeTicks||isStopped)&&"Episode"===currentItem.Type&&self.hasNextTrack){currentItem=runtimeTicks-currentTimeTicks;if((!comingUpNextDisplayed||isStopped)&&(creditsInfo=((runtimeTicks,creditsInfo)=>(creditsInfo=creditsInfo?.start||0)&&creditsInfo=fiftyMinuteTicks?40:runtimeTicks>=fortyMinuteTicks?35:30)*1e4)(runtimeTicks,creditsInfo),isStopped||creditsInfo<=currentTimeTicks&&3e9<=runtimeTicks&&2e8<=currentItem&&userSettings.enableNextVideoInfoOverlay())&&(isStopped&&btnHideUpNext.classList.add("hide"),showHideUpNext(comingUpNextDisplayed=!0,currentItem)),self.upNextContainer._visible){creditsInfo=self.upNextContainer._timeRemainingTicks;if(creditsInfo){let pct=isStopped?1:(creditsInfo-currentItem+15e6)/creditsInfo;pct*=100,pct=(pct=Math.min(pct,100)).toFixed(2),btnPlayNextFromUpNextProgress.style.transform="scaleX("+pct+"%)"}}}}function updatePlayPauseState(isPaused,isInitialRequest){let title;var btnPause=self.btnPause,btnPause=(title=isPaused?(btnPause.querySelector("i").innerHTML="",globalize.translate("Play")):(btnPause.querySelector("i").innerHTML="",globalize.translate("Pause")),btnPause.title=title,btnPause.setAttribute("aria-label",title),btnPause.disabled=!0===isInitialRequest,self.playQueue);btnPause&&btnPause.setPausedState(isPaused)}function hideButton(btn,focusedElement){focusedElement=btn===focusedElement;btn.classList.add("hide"),focusedElement&&focusMainOsdControls(self)}function updatePlaylistButtons(playlistIndex,playlistLength,focusedElement){playlistIndex?btnPreviousTrack.classList.remove("hide"):hideButton(btnPreviousTrack,focusedElement),null!=playlistIndex&&playlistLength&&playlistIndex{slider.waitForCustomElementUpgrade().then(function(){slider.setValue(value)})})(slider,value)}function updatePlayerBrightnessState(player){var showSlider=!layoutManager.tv&¤tPlayerSupportedCommands.includes("SetBrightness");brightnessSlider&&(showSlider?(brightnessSliderContainer.classList.remove("hide"),brightnessSlider.dragging||setSliderValue(brightnessSlider,playbackManager.getBrightness(player))):brightnessSliderContainer.classList.add("hide"))}function setMuteButtonStatus(button,isMuted,showMuteButton){isMuted?(button.setAttribute("title",globalize.translate("Unmute")),button.querySelector("i").innerHTML=""):(button.setAttribute("title",globalize.translate("Mute")),button.querySelector("i").innerHTML=""),showMuteButton?button.classList.remove("hide"):button.classList.add("hide")}function setVolumeContainerVisibility(container,slider,showVolumeSlider,volumeLevel,isMuted){(showVolumeSlider=layoutManager.tv&&appHost.supports("physicalvolumecontrol")?!1:showVolumeSlider)?container.classList.remove("osdForceHide"):container.classList.add("osdForceHide"),slider.dragging||setSliderValue(slider,isMuted?0:volumeLevel)}function updatePlayerVolumeState(player,isMuted,volumeLevel,supportedCommands){let showMuteButton=!0,showVolumeSlider=!0;supportedCommands.includes("Mute")||(showMuteButton=!1),supportedCommands.includes("SetVolume")||(showVolumeSlider=!1),setMuteButtonStatus(buttonMute,isMuted,showMuteButton),self.topMuteButton&&setMuteButtonStatus(self.topMuteButton,isMuted,showMuteButton);supportedCommands=self.nowPlayingVolumeSlider;supportedCommands&&setVolumeContainerVisibility(videoOsdVolumeControlsBottom,supportedCommands,showVolumeSlider,volumeLevel,isMuted),self.topVolumeControls&&setVolumeContainerVisibility(self.topVolumeControls,self.topVolumeSlider,showVolumeSlider,volumeLevel,isMuted)}function onSettingsButtonClick(e){var mediaType,player=self.currentPlayer;player&&(mediaType=self.osdController.currentItem.MediaType,playerSettingsMenu.show(Object.assign(getBaseActionSheetOptions(this,isDisplayingLocalVideo(player)),{player:player,stats:!0,onOption:onSettingsOption,mediaType:mediaType,speed:"Video"!==mediaType||layoutManager.tv})).then(self.boundShowOsdDefaultParams,self.boundShowOsdDefaultParams))}function onSettingsOption(selectedOption){"stats"===selectedOption?toggleStats(self):"subtitleoffset"===selectedOption&&showSubtitleOffset()}function showSubtitleOffset(){require(["subtitleOffsetOverlay"],function(SubtitleOffsetOverlay){var positionTo,player=self.currentPlayer;player&&!self.subtitleOffsetOverlay&&(positionTo=btnSubtitles,self.subtitleOffsetOverlay=new SubtitleOffsetOverlay(Object.assign(getBaseActionSheetOptions(positionTo,!0),{player:player})),SubtitleOffsetOverlay=function(){self.subtitleOffsetOverlay?.destroy(),self.subtitleOffsetOverlay=null},self.subtitleOffsetOverlay.show().then(SubtitleOffsetOverlay,SubtitleOffsetOverlay))})}let lastPointerEvent=0;function onStop(){playbackManager.stop(self.currentPlayer)}dom.addEventListener(view,window.PointerEvent&&!dom.supportsPointerTypeInClickEvent()?"pointerup":"click",function(e){var isEnoughTimeSinceLastTap,pointerType=e.pointerType||DefaultPointerType;"touch"===(lastPointerUpType=pointerType)?e.target.closest("BUTTON,INPUT,.videoosd-tabcontainers,.videoosd-tabsslider")?self.showOsd():!(isEnoughTimeSinceLastTap=300<(pointerType=Date.now())-lastPointerEvent)&&"click"!==e.type||(lastPointerEvent=pointerType,self.currentVisibleMenu?setTimeout(self.boundHideOsd,10):(self.currentVisibleMenu,isEnoughTimeSinceLastTap&&setTimeout(self.boundShowOsdDefaultParams,100))):onOsdClick(e,self,null,!0)},{passive:!0}),dom.addEventListener(view,"dblclick",function(e){e.target.closest("BUTTON,input")||"mouse"===lastPointerUpType&&playbackManager.toggleFullscreen(self.currentPlayer)},{passive:!0}),dom.addEventListener(buttonMute,"click",onMuteButtonClick.bind(self),{passive:!0}),dom.addEventListener(brightnessSlider,"change",function(){playbackManager.setBrightness(parseFloat(this.value),self.currentPlayer),self.showOsd()},{passive:!0}),dom.addEventListener(brightnessSlider,"input",function(){playbackManager.setBrightness(parseFloat(this.value),self.currentPlayer),self.showOsd()},{passive:!0}),dom.addEventListener(self.nowPlayingVolumeSlider,"change",onVolumeSliderInputOrChange.bind(self),{passive:!0}),dom.addEventListener(self.nowPlayingVolumeSlider,"input",onVolumeSliderInputOrChange.bind(self),{passive:!0}),self.nowPlayingPositionSlider.getBubbleHtml=function(value){return self.showOsd(),self.osdController.getPositionBubbleHtml(value,currentRuntimeTicks)},dom.addEventListener(self.osdBottomElement,transitionEndEventName,function(e){var elem=e.currentTarget;elem===e.target&&elem.classList.contains("videoOsdBottom-hidden")&&(elem.classList.add("hide"),headerElement.classList.add("hide"),setBottomTabIndex(self,-1),onTabTransitionEnd.call(tabContainersElem,{target:tabContainersElem,currentTarget:tabContainersElem}),2===self.currentLockState&&self.setLockState(1),view.dispatchEvent(new CustomEvent("video-osd-hide",{bubbles:!0})))},{passive:!0}),dom.addEventListener(btnPreviousTrack,"click",function(){playbackManager.previousTrack(self.currentPlayer)},{passive:!0});for(let i=0,length=stopButtons.length;i{let tabResumeOptions=getTabOnItemUpdatedData(self),bottomTabControllers=(tabResumeOptions.refresh=forceRefresh,5===index?document.documentElement.classList.add("osd-tab-guide"):document.documentElement.classList.remove("osd-tab-guide"),self.bottomTabControllers);if(bottomTabControllers[index])return bottomTabControllers[index].onResume(tabResumeOptions);Emby.importModule(["./videoosd/infotab.js","./videoosd/chapterstab.js","./videoosd/peopletab.js","./videoosd/playqueuetab.js","./videoosd/onnowtab.js","./videoosd/guidetab.js"][index]).then(function(ControllerFactory){ControllerFactory=new ControllerFactory(tabContainers[index]);return bottomTabControllers[index]=ControllerFactory,tabResumeOptions.refresh=!0,events.on(ControllerFactory,"closerequested",onCloseRequestedFromTab),ControllerFactory.onResume(tabResumeOptions)})})(index),newPanel.classList.add("videoosd-activetab"),tabContainersElem.classList.remove("hide"),tabContainersElem.offsetWidth,tabContainersElem.classList.remove("videoosd-tabcontainers-hidden"),self.osdBottomElement.classList.add("videoosd-bottom-with-opentab"),layoutManager.tv?btnCloseTabContent.classList.add("hide"):btnCloseTabContent.classList.remove("hide"),null!=e&&enableTabAnimation&&newPanel.animate&&5!==index&&5!==e&&(index
`,instance.topVolumeControls=elem.querySelector(".videoOsdVolumeControls"),instance.topVolumeSlider=elem.querySelector(".videoOsdVolumeSlider"),instance.topMuteButton=elem.querySelector(".buttonMute"),instance.topMuteButton.addEventListener("click",onMuteButtonClick.bind(instance)),dom.addEventListener(instance.topVolumeSlider,"change",onVolumeSliderInputOrChange.bind(instance),{passive:!0}),dom.addEventListener(instance.topVolumeSlider,"input",onVolumeSliderInputOrChange.bind(instance),{passive:!0})),elem.classList.remove("hide")}function destroyHeaderRightContent(instance){instance.headerRightContainer?.remove(),instance.headerRightContainer=null,instance.topVolumeControls=null,instance.topVolumeSlider=null,instance.topMuteButton=null}Object.assign(VideoOsd.prototype,BaseView.prototype),VideoOsd.prototype.enableWindowInputCommands=function(){return!0},VideoOsd.prototype.onWindowInputCommand=function(e){switch(e.detail.command){case"back":var upNextContainer=e.target.closest(".upNextContainer");return upNextContainer?(e.preventDefault(),void upNextContainer.querySelector(".btnHideUpNext").click()):void(!layoutManager.tv||focusManager.hasExclusiveFocusScope()||(upNextContainer=e.detail.originalEvent?.target)&&headerElement.contains(upNextContainer)||(isDisplayingLocalVideo(this.currentPlayer)?this.currentVisibleMenu&&!this.upNextContainer._visible&&(e.preventDefault(),this.hideOsd()):!this.currentVisibleMenu&&isPlaying(this.currentPlayer)&&(e.preventDefault(),this.showOsd())));case"left":return e.target.closest(".skipIntroContainer,.upNextContainer")?void 0:void("rtl"===document.dir?onFastForwardInputCommand:onRewindInputCommand)(e,this);case"rewind":return e.preventDefault(),void onRewindInputCommand(e,this);case"right":return e.target.closest(".skipIntroContainer,.upNextContainer")?void 0:void("rtl"===document.dir?onRewindInputCommand:onFastForwardInputCommand)(e,this);case"fastforward":return e.preventDefault(),void onFastForwardInputCommand(e,this);case"pageup":return void playbackManager.nextChapter(this.currentPlayer);case"pagedown":return void playbackManager.previousChapter(this.currentPlayer);case"playpause":e.preventDefault(),e.stopPropagation();upNextContainer=this.currentPlayer?.paused();return playbackManager.playPause(this.currentPlayer),void((this.currentVisibleMenu||shouldOsdBeShown(this)&&!upNextContainer)&&this.showOsd());case"play":{e.preventDefault(),e.stopPropagation();let isPaused=this.currentPlayer?.paused();return playbackManager.unpause(this.currentPlayer),void((this.currentVisibleMenu||shouldOsdBeShown(this)&&!isPaused)&&this.showOsd())}case"select":return void(onOsdClick(e,this,null,shouldOsdBeShown(this))&&e.preventDefault());case"up":return this.currentVisibleMenu,this.currentVisibleMenu,void(shouldOsdBeShown(this)&&this.showOsd());case"down":return void(shouldOsdBeShown(this)&&(this.currentVisibleMenu||e.preventDefault(),this.showOsd()));case"menu":case"pause":case"nowplaying":return void(shouldOsdBeShown(this)&&this.showOsd());case"record":return shouldOsdBeShown(this)&&this.showOsd(),void onRecordingCommand(this);case"togglestats":return void toggleStats(this);case"movies":case"music":case"tv":case"settings":case"search":case"favorites":return void e.preventDefault();case"info":return setBottomTabIndex(this,0),void e.preventDefault();case"livetv":return setBottomTabIndex(this,4),void e.preventDefault();case"guide":return setBottomTabIndex(this,5),void e.preventDefault()}BaseView.prototype.onWindowInputCommand.apply(this,arguments)},VideoOsd.prototype.setLockState=function(lockState){((this.currentLockState=lockState)?(headerElement.classList.add("videoOsdHeader-locked"),this.osdBottomElement.classList.add("videoosd-bottom-locked"),this.view.querySelector(".videoOsdUnlockControls").classList.remove("hide"),1===lockState?(this.view.querySelector(".videoOsd-btnUnlock1").classList.remove("hide"),this.view.querySelector(".videoOsd-btnUnlock2").classList.add("hide")):(this.view.querySelector(".videoOsd-btnUnlock1").classList.add("hide"),this.view.querySelector(".videoOsd-btnUnlock2").classList.remove("hide")),lockOrientation):(headerElement.classList.remove("videoOsdHeader-locked"),this.osdBottomElement.classList.remove("videoosd-bottom-locked"),this.view.querySelector(".videoOsdUnlockControls").classList.add("hide"),this.view.querySelector(".videoOsd-btnUnlock1").classList.add("hide"),this.view.querySelector(".videoOsd-btnUnlock2").classList.add("hide"),unlockOrientation))()},VideoOsd.prototype.showOsd=function(timeoutMs,elementToFocus){this.paused||(headerElement.classList.remove("hide"),headerElement.offsetWidth,headerElement.classList.remove("videoOsdHeader-hidden"),showMainOsdControls(this,elementToFocus),startOsdHideTimer(this,timeoutMs))},VideoOsd.prototype.hideOsd=function(){var lyricsRenderer;isDisplayingLocalVideo(this.currentPlayer)&&(headerElement.classList.add("videoOsdHeader-hidden"),hideMainOsdControls(this),lyricsRenderer=this.lyricsRenderer)&&!lyricsRenderer.paused&&layoutManager.tv&&lyricsRenderer.focus()},VideoOsd.prototype.exit=function(){appRouter.back()},VideoOsd.prototype.onResume=function(options){BaseView.prototype.onResume.apply(this,arguments),headerElement.classList.add("videoOsdHeader"),fillHeaderRightContent(this);let boundOnPlayerChange=this.boundOnPlayerChange;boundOnPlayerChange=boundOnPlayerChange||(this.boundOnPlayerChange=onPlayerChange.bind(this)),events.on(playbackManager,"playerchange",boundOnPlayerChange),this.bindToPlayer(playbackManager.getCurrentPlayer(),!0);var isLocalVideo,player=this.currentPlayer,player=(player&&!options.refresh&&(isLocalVideo=isDisplayingLocalVideo(player,options=this.osdController.currentItem?.MediaType),this.updateTransparency(player,this.lastPlayerState||{},options,isLocalVideo)),this.view);let boundPointerMove=this.boundPointerMove,boundPointerEnter=(boundPointerMove=boundPointerMove||(this.boundPointerMove=onPointerMove.bind(this)),dom.addEventListener(document,window.PointerEvent?"pointermove":"mousemove",boundPointerMove,{passive:!0}),this.boundPointerEnter),boundPointerLeave=(boundPointerEnter=boundPointerEnter||(this.boundPointerEnter=onPointerEnter.bind(this)),dom.addEventListener(player,window.PointerEvent?"pointerenter":"mouseenter",boundPointerEnter,{passive:!0,capture:!0}),this.boundPointerLeave),boundWindowKeyDown=(boundPointerLeave=boundPointerLeave||(this.boundPointerLeave=onPointerLeave.bind(this)),dom.addEventListener(player,window.PointerEvent?"pointerleave":"mouseleave",boundPointerLeave,{passive:!0,capture:!0}),blurElementFromPreviousView(player),this.boundWindowKeyDown);boundWindowKeyDown=boundWindowKeyDown||(this.boundWindowKeyDown=onWindowKeyDown.bind(this)),dom.addEventListener(window,"keydown",boundWindowKeyDown,{}),mouseManager.requestMouseListening("videoosd")},VideoOsd.prototype.onPause=function(options){BaseView.prototype.onPause.apply(this,arguments),destroyOsdResizeObserver(this);var statsOverlay=this.statsOverlay,statsOverlay=(statsOverlay&&statsOverlay.enabled(!1),destroySubtitleOffsetOverlay(this),closeOsdDialogs(this),this.boundWindowKeyDown),statsOverlay=(statsOverlay&&dom.removeEventListener(window,"keydown",statsOverlay,{}),destroyHeaderRightContent(this),headerElement.classList.remove("videoOsdHeader","videoosd-header-safe","videoOsdHeader-hidden","videoOsdHeader-locked","hide","videoOsd-customFont-remotecontrol"),backdropContainer.classList.remove("nowplaying-backdropcontainer-blur","nowplaying-backdropcontainer-blur-high","nowplaying-backdropcontainer-blur-extrasaturation","nowplaying-backdropcontainer-blur-backdropfilter"),backgroundContainer.classList.remove("nowplaying-backgroundcontainer-blur","nowplaying-backgroundcontainer-brighter","nowplaying-backgroundcontainer-blur-backdropfilter"),clearBlurFromDocumentElement(this),this.boundPointerMove),statsOverlay=(statsOverlay&&dom.removeEventListener(document,window.PointerEvent?"pointermove":"mousemove",statsOverlay,{passive:!0}),this.boundOnPlayerChange),bottomTabControllers=(statsOverlay&&events.off(playbackManager,"playerchange",statsOverlay),this.bottomTabControllers);for(let i=0,length=bottomTabControllers.length;i