define([ "exports", "./../modules/common/playback/playbackmanager.js", "./../modules/focusmanager.js", "./../modules/cardbuilder/cardbuilder.js", "./../modules/imageloader/imageloader.js", "./../modules/dom.js", "./../modules/browser.js", "./../modules/common/globalize.js", "./../modules/common/datetime.js", "./../modules/layoutmanager.js", "./../modules/common/itemmanager/itemmanager.js", "./../modules/loading/loading.js", "./../modules/emby-apiclient/events.js", "./../modules/emby-apiclient/connectionmanager.js", "./../modules/appheader/appheader.js", "./../modules/mediainfo/mediainfo.js", "./../modules/backdrop/backdrop.js", "./playqueue.js", "./tvplayqueue.js", "./lyrics.js", "./../modules/approuter.js", "./../modules/itemcontextmenu.js", "./../modules/shortcuts.js", "./../modules/common/inputmanager.js", "./../modules/common/usersettings/usersettings.js", "./../modules/input/mouse.js", "./../modules/emby-elements/emby-scroller/emby-scroller.js", "./../modules/emby-elements/emby-button/paper-icon-button-light.js", "./../modules/emby-elements/emby-tabs/emby-tabs.js", "./../modules/emby-elements/emby-slider/emby-slider.js", "./../modules/common/appsettings.js", "./../modules/common/servicelocator.js", "./../modules/input/keyboard.js", "./../modules/viewmanager/baseview.js", ], function ( _exports, _playbackmanager, _focusmanager, _cardbuilder, _imageloader, _dom, _browser, _globalize, _datetime, _layoutmanager, _itemmanager, _loading, _events, _connectionmanager, _appheader, _mediainfo, _backdrop, _playqueue, _tvplayqueue, _lyrics, _approuter, _itemcontextmenu, _shortcuts, _inputmanager, _usersettings, _mouse, _embyScroller, _paperIconButtonLight, _embyTabs, _embySlider, _appsettings, _servicelocator, _keyboard, _baseview, ) { Object.defineProperty(_exports, "__esModule", { value: !0 }), (_exports.default = void 0), require(["css!videoosd/videoosd.css"]); var useBackdropFilterForBlur = _dom.default.allowBackdropFilter(), headerElement = document.querySelector(".skinHeader"), backdropContainer = document.querySelector(".backdropContainer"), backgroundContainer = document.querySelector(".backgroundContainer"); function showActionSheet(options) { return Emby.importModule("./modules/actionsheet/actionsheet.js").then( function (ActionSheet) { return ActionSheet.show(options); }, ); } var deviceMemory, platform, cores, enableHighResBlur = !( (cores = navigator.hardwareConcurrency || 4) < 6 || (deviceMemory = navigator.deviceMemory || 2) < 2 || ((platform = (navigator.platform || "").toLowerCase()), "android" === globalThis.appMode && (cores < 4 || deviceMemory < 2 || platform.includes("armv7"))) ); function isDisplayingLocalVideo(player, mediaType) { return ( !(!player || !player.isLocalPlayer) && ("Video" === mediaType || (!mediaType && _playbackmanager.default.isPlayingMediaType(["Video"], player))) ); } function getRewindIconLTR() { switch (_usersettings.default.skipBackLength()) { case 5e3: return ""; case 1e4: return ""; case 3e4: return ""; default: return ""; } } function getForwardIconLTR() { switch (_usersettings.default.skipForwardLength()) { case 5e3: return ""; case 1e4: return ""; case 3e4: return ""; default: return ""; } } function showMoreMenu(item, button) { _connectionmanager.default .getApiClient(item.ServerId) .getCurrentUser() .then(function (user) { return _itemcontextmenu.default.show( (function (item, user, button) { return { items: [item], open: !1, play: !1, playAllFromHere: !1, queueAllFromHere: !1, positionTo: button, cancelTimer: !1, record: !1, deleteItem: !1, shuffle: !1, instantMix: !1, user: user, share: !0, queue: !1, editSubtitles: !1, positionY: "above", transformOrigin: "center bottom", convert: !1, refreshMetadata: !1, identify: !1, autoTvLayout: !1, }; })(item, user, button), ); }); } function focusMainOsdControls(instance) { _focusmanager.default.focus(instance.nowPlayingPositionSlider); } function hideOrShowAll(instance, elems, hide, focusedElement) { for (var wasFocused, i = 0, length = elems.length; i < length; i++) { var elem = elems[i]; hide ? (focusedElement && focusedElement === elem && (wasFocused = !0), elem.classList.add("hide")) : elem.classList.remove("hide"); } wasFocused && focusMainOsdControls(instance); } function getTextActionButton(item, text) { return ( (text = text || _itemmanager.default.getDisplayName(item, {})), _layoutmanager.default.tv ? text : "" ); } function getSecondaryName(item, enableLinkButton) { var title = _itemmanager.default.getDisplayName(item, { includeParentInfo: "Program" !== item.Type, includeIndexNumber: "Program" !== item.Type, }); return enableLinkButton ? getTextActionButton(item, title) : title; } function getDefaultOsdContentSection() { return _layoutmanager.default.tv || 1056 <= _dom.default.getWindowSize().innerWidth ? "playqueue" : null; } function destroyPlayQueue(instance) { var playQueue = instance.playQueue; playQueue && (playQueue.destroy(), (instance.playQueue = null)); } function destroyLyricsRenderer(instance) { var lyricsRenderer = instance.lyricsRenderer; lyricsRenderer && (lyricsRenderer.destroy(), (instance.lyricsRenderer = null)); } function destroyStats(instance) { var statsOverlay = instance.statsOverlay; statsOverlay && (statsOverlay.destroy(), (instance.statsOverlay = null)); } function destroySubtitleOffsetOverlay(instance) { var subtitleOffsetOverlay = instance.subtitleOffsetOverlay; subtitleOffsetOverlay && (subtitleOffsetOverlay.destroy(), (instance.subtitleOffsetOverlay = null)); } function clearBlurFromDocumentElement() { document.documentElement.classList.remove("doc-nowplaying-blur"), (document.documentElement.style.backgroundImage = null), backgroundContainer && (backgroundContainer.style.backgroundImage = null); } function shouldOsdBeShown(instance) { return ( !_layoutmanager.default.tv || !!instance.currentVisibleMenu || !(instance = instance.currentPlayer) || isDisplayingLocalVideo(instance) ); } var supportsTouchEvent = "ontouchstart" in document.documentElement; function rewind(instance, animate) { var player = instance.currentPlayer; animate && (((animate = instance.view.querySelector( ".osd-rew-animationtext", )).innerHTML = "-" + parseInt(_usersettings.default.skipBackLength() / 1e3)), fadeInAndOut(animate)), _playbackmanager.default.rewind(player); } function fadeInAndOut(elem) { if (elem.animate) try { elem.animate( [ { opacity: "1", offset: 0.5 }, { opacity: "0", transform: "none", offset: 1 }, ], { duration: 600, iterations: 1, easing: "ease-out" }, ); } catch (err) { console.log("error animating element: " + err); } } function fastForward(instance, animate) { var player = instance.currentPlayer; animate && (((animate = instance.view.querySelector( ".osd-ff-animationtext", )).innerHTML = "+" + parseInt(_usersettings.default.skipForwardLength() / 1e3)), fadeInAndOut(animate)), _playbackmanager.default.fastForward(player); } function onOsdClick(e, instance, elementToFocusIfShowing, showOsdIfNoEvent) { var target = e.target; if (target.closest(".videoOsdBottom")) showOsdIfNoEvent && instance.showOsd(); else if (!target.closest("button")) return ( (target = instance.currentPlayer), !e.button && target && isDisplayingLocalVideo(target) ? (instance.showOsd(null, elementToFocusIfShowing), _playbackmanager.default.playPause(target)) : showOsdIfNoEvent && instance.showOsd(), 1 ); } function toggleStats(instance) { require(["playerStats"], function (PlayerStats) { var player = instance.currentPlayer; player && (instance.statsOverlay ? instance.statsOverlay.toggle() : ((instance.statsOverlay = new PlayerStats({ player: player, view: instance.view, })), _events.default.on( instance.statsOverlay, "close", function () { this.currentVisibleMenu && !this.upNextContainer._visible && _focusmanager.default.focus(this.btnVideoOsdSettingsRight); }.bind(instance), ))); }); } function setBottomTabIndex(instance, index) { var bottomTabButtons, bottomTabs = instance.bottomTabs; -1 === index ? bottomTabs.selectedIndex(index) : ((bottomTabButtons = instance.bottomTabButtons), instance.showOsd(null, bottomTabButtons[index]), bottomTabs.selectedIndex(index), _focusmanager.default.focus(bottomTabButtons[index])); } function onRewindInputCommand(e, instance) { instance.currentVisibleMenu || e.detail.repeat || (rewind(instance), e.preventDefault()), shouldOsdBeShown(instance) && instance.showOsd(); } function onFastForwardInputCommand(e, instance) { instance.currentVisibleMenu || e.detail.repeat || (fastForward(instance), e.preventDefault()), shouldOsdBeShown(instance) && instance.showOsd(); } function startOsdHideTimer(instance, timeoutMs) { var isLocalVideo; stopOsdHideTimer(instance), instance.paused || !(isLocalVideo = isDisplayingLocalVideo(instance.currentPlayer)) || 0 === timeoutMs || _focusmanager.default.hasExclusiveFocusScope() || (instance.osdHideTimeout = setTimeout( instance.boundOnOsdHideTimeout, timeoutMs || (isLocalVideo ? 4e3 : 1e4), )); } function stopOsdHideTimer(instance) { var osdHideTimeout = instance.osdHideTimeout; osdHideTimeout && (clearTimeout(osdHideTimeout), (instance.osdHideTimeout = null)); } var systemUIHidden, orientationLocked = !1; function onOrientationChangeSuccess() { orientationLocked = !0; } function onOrientationChangeError(err) { (orientationLocked = !0), console.log("error locking orientation: " + err); } function setSystemUIHidden(hidden) { if ( systemUIHidden !== hidden && ((systemUIHidden = hidden), _servicelocator.appHost.setSystemUIHidden) ) try { _servicelocator.appHost.setSystemUIHidden(hidden); } catch (err) { console.log("Error in setSystemUIHidden: " + err); } } var enableOrientationLock = !_browser.default.tv; function lockOrientation(type) { var _screen$orientation; enableOrientationLock && !(function (orientation) { var promise; try { return (promise = screen.orientation && screen.orientation.lock ? screen.orientation.lock(orientation) : promise) && promise.then ? promise : Promise.resolve(); } catch (err) { return Promise.reject(err); } })( (type = type || (null == (_screen$orientation = screen.orientation) ? void 0 : _screen$orientation.type) || "landscape"), ).then(onOrientationChangeSuccess, onOrientationChangeError); } function unlockOrientation() { if ( enableOrientationLock && orientationLocked && screen.orientation && screen.orientation.unlock ) { try { screen.orientation.unlock(); } catch (err) { console.log("error unlocking orientation: " + err); } orientationLocked = !1; } } function VideoOsd(view, params) { _baseview.default.apply(this, arguments); var comingUpNextDisplayed, isEnabled, currentDisplayItem, currentDisplayChapters, currentIntroInfo, currentCreditsInfo, currentMediaSource, currentItemThumbnails, currentItemThumbnailsPromise, enableProgressByTimeOfDay, skipIntroValidated, enableAutoSkipIntro, lastPointerUpType, currentOsdContentSectionName, self = this, currentPlayerSupportedCommands = [], currentRuntimeTicks = 0, lastUpdateTime = 0, ratingTextNeedsUpdate = !0, programStartDateMs = 0, programEndDateMs = 0, playbackStartTimeTicks = 0, nowPlayingVolumeSlider = ((this.currentLockState = 0), view.querySelector(".videoOsdVolumeSlider")), videoOsdVolumeSliderWrapper = view.querySelector( ".videoOsdVolumeSliderWrapper", ), brightnessSlider = view.querySelector(".videoOsdBrightnessSlider"), brightnessSliderContainer = view.querySelector( ".brightnessSliderContainer", ), videoOsdPositionText = ((this.nowPlayingPositionSlider = view.querySelector( ".videoOsdPositionSlider", )), view.querySelector(".videoOsdPositionText")), videoOsdDurationText = view.querySelector(".videoOsdDurationText"), rewindButtons = view.querySelectorAll(".btnRewind"), fastForwardButtons = view.querySelectorAll(".btnOsdFastForward"), stopButtons = ((this.btnPause = view.querySelector(".videoOsd-btnPause")), view.querySelectorAll(".btnVideoOsd-stop")), btnRepeatMode = view.querySelector(".btnOsdRepeatMode"), btnOsdMoreBottom = view.querySelector(".btnOsdMore-bottom"), btnOsdMoreTitle = view.querySelector(".btnOsdMore-title"), transitionEndEventName = _dom.default.whichTransitionEvent(), btnPreviousTrack = ((this.osdBottomElement = view.querySelector(".videoOsdBottom")), view.querySelector(".btnPreviousTrack")), btnNextTrack = view.querySelector(".btnNextTrack"), buttonMute = view.querySelector(".buttonMute"), btnSubtitles = view.querySelector(".btnSubtitles"), btnAudio = view.querySelector(".btnAudio"), btnFullscreen = view.querySelector(".btnFullscreen"), videoOsdSecondaryText = view.querySelector(".videoOsdSecondaryText"), videoOsdBottomButtons = ((this.videoOsdText = view.querySelector(".videoOsdText")), view.querySelector(".videoOsdBottom-buttons")), mainTransportButtons = view.querySelector( ".videoOsd-maintransportbuttons", ), videoOsdPositionContainer = view.querySelector( ".videoOsdPositionContainer", ), osdTitle = view.querySelector(".videoOsdTitle"), videoOsdThirdTitle = view.querySelector(".videoOsdThirdTitle"), videoOsdParentTitle = view.querySelector(".videoOsdParentTitle-small"), videoOsdParentTitleLarge = view.querySelector( ".videoOsdParentTitle-large", ), osdPosterContainer = view.querySelector(".osdPosterContainer"), videoOsdSecondaryMediaInfo = view.querySelector( ".videoOsdSecondaryMediaInfo", ), videoOsdAudioInfo = view.querySelector(".videoOsd-audioInfo"), mainLockButton = view.querySelector(".videoOsd-btnLock"), tabContainers = ((this.bottomTabs = view.querySelector(".videoOsdBottom-tabs")), (this.bottomTabButtons = view.querySelectorAll(".videoosd-tab-button")), view.querySelectorAll(".videoosd-tab")), btnCloseTabContent = ((this.bottomTabControllers = []), (this.bottomTabControllers.length = tabContainers.length), view.querySelector(".btnCloseTabContent")), tabContainersElem = view.querySelector(".videoosd-tabcontainers"), videoOsdBottomContentbuttons = view.querySelector( ".videoOsdBottom-contentbuttons", ), videoOsdBottomMaincontrols = ((this.upNextContainer = view.querySelector(".upNextContainer")), view.querySelector(".videoOsdBottom-maincontrols")), videoOsdVolumeControls = view.querySelector(".videoOsdVolumeControls"), videoOsdButtomButtonsTopRight = view.querySelector( ".videoOsdBottom-buttons-topright", ), ratingInfoContainer = view.querySelector(".videoOsd-ratingInfo"), ratingTextElement = view.querySelector(".videoOsd-ratingText"), btnSkipIntro = view.querySelector(".btnSkipIntro"), skipIntroContainer = view.querySelector(".skipIntroContainer"), btnLyrics = view.querySelector(".btnLyrics"), btnVideoOsdSettingsTransportButton = ((this.btnRecord = view.querySelector(".btnRecord")), (this.btnVideoOsdSettingsRight = view.querySelector( ".btnVideoOsdSettings-right", )), view.querySelector(".btnVideoOsdSettings-transport")), btnPlayNextFromUpNextProgress = view.querySelector( ".btnPlayNextFromUpNext-progress", ), btnHideUpNext = view.querySelector(".btnHideUpNext"), enableSkipIntro = !0; _layoutmanager.default.tv ? videoOsdBottomButtons.classList.add("videoOsdBottom-buttons-tv") : (videoOsdPositionText.classList.add("videoOsd-customFont-x0"), videoOsdDurationText.classList.add("videoOsd-customFont-x0"), ratingTextElement.classList.add("videoOsd-customFont-x2"), videoOsdBottomButtons.classList.add("videoOsd-customFont-x2"), videoOsdButtomButtonsTopRight.classList.add("videoOsd-customFont-x2"), skipIntroContainer.classList.add("videoOsd-customFont-x2"), this.upNextContainer.classList.add("videoOsd-customFont-x2"), this.osdBottomElement.classList.add("videoOsd-nobuttonmargin")); for (var i = 0, length = fastForwardButtons.length; i < length; i++) { icon = btnFastForward = void 0; var btnFastForward = fastForwardButtons[i], icon = btnFastForward.querySelector("i"); switch ( ((icon.innerHTML = ( "rtl" === document.dir ? getRewindIconLTR : getForwardIconLTR )()), _usersettings.default.skipForwardLength()) ) { case 5e3: case 1e4: case 3e4: break; default: icon.classList.add("videoOsd-forwardIcon-flipped"); } } for (var _i = 0, _length = rewindButtons.length; _i < _length; _i++) rewindButtons[_i].querySelector("i").innerHTML = ( "rtl" === document.dir ? getForwardIconLTR : getRewindIconLTR )(); function updateRecordingButton(item, user) { item && "Program" === item.Type ? user.Policy.EnableLiveTvManagement && require(["recordingButton"], function (RecordingButton) { var recordingButtonManager = self.recordingButtonManager; recordingButtonManager ? recordingButtonManager.refreshItem(item) : ((recordingButtonManager = self.recordingButtonManager = new RecordingButton({ item: item, button: self.btnRecord })), self.btnRecord.classList.remove("hide")); }) : ((user = self.recordingButtonManager) && (user.destroy(), (self.recordingButtonManager = null)), self.btnRecord.classList.add("hide")); } function updateButtomTabsVisibility(state, item, displayItem) { var apiClient; item ? ((apiClient = _connectionmanager.default.getApiClient(item)), ("Video" === item.MediaType ? apiClient.getUserViews({}, apiClient.getCurrentUserId()) : Promise.resolve({ Items: [] }) ).then(function (result) { var bottomTabButtons = self.bottomTabButtons, result = ("Video" === item.MediaType ? bottomTabButtons[0].classList.remove("hide") : bottomTabButtons[0].classList.add("hide"), currentDisplayChapters && currentDisplayChapters.length ? bottomTabButtons[1].classList.remove("hide") : bottomTabButtons[1].classList.add("hide"), displayItem.People && displayItem.People.length ? bottomTabButtons[2].classList.remove("hide") : bottomTabButtons[2].classList.add("hide"), !(function (userViews) { for ( var _i2 = 0, _length2 = userViews.length; _i2 < _length2; _i2++ ) if ("livetv" === userViews[_i2].CollectionType) return 1; })(result.Items) ? (bottomTabButtons[3].classList.add("hide"), bottomTabButtons[4].classList.add("hide")) : (bottomTabButtons[3].classList.remove("hide"), bottomTabButtons[4].classList.remove("hide")), self.bottomTabs), selectedIndex = (view.querySelector(".videoosd-tab-button:not(.hide)") ? (tabContainersElem.classList.remove("hide"), result.classList.remove("hide")) : (tabContainersElem.classList.add("hide"), result.classList.add("hide")), result.selectedIndex()); 0 <= selectedIndex && (bottomTabButtons[selectedIndex].classList.contains("hide") ? result.selectedIndex(-1) : loadBottomTabController(selectedIndex, !0)); })) : (self.bottomTabs.selectedIndex(-1), tabContainersElem.classList.add("hide"), self.bottomTabs.classList.add("hide")); } function updateDisplayItem(state, itemInfo, user) { var item = itemInfo.originalItem, itemInfo = ((self.currentItem = item), (currentItemThumbnails = currentItemThumbnailsPromise = null), itemInfo.displayItem || item); (currentDisplayChapters = (function (chapters) { for ( var list = [], _i3 = 0, _length3 = chapters.length; _i3 < _length3; _i3++ ) { var chapter = chapters[_i3]; (chapter.MarkerType && "Chapter" !== chapter.MarkerType) || list.push(chapter); } return list; })((currentDisplayItem = itemInfo).Chapters || [])), updateRecordingButton(itemInfo, user); var user = isDisplayingLocalVideo(self.currentPlayer, item.MediaType), item = (updateButtomTabsVisibility(0, item, itemInfo), itemInfo.EpisodeTitle || itemInfo.IsSeries ? (primaryNameText = itemInfo.Name) : itemInfo.SeriesName ? ((primaryNameText = itemInfo.SeriesName), itemInfo.SeriesId && !user && (primaryNameHtml = getTextActionButton({ Id: itemInfo.SeriesId, Type: "Series", IsFolder: !0, ServerId: itemInfo.ServerId, Name: itemInfo.SeriesName, ParentId: itemInfo.ParentId, }))) : itemInfo.ArtistItems && itemInfo.ArtistItems.length && ((primaryNameText = itemInfo.Name), (primaryNameHtml = (function (displayItem) { var html = [], artistItems = displayItem.ArtistItems; if (artistItems) for (var i = 0, length = artistItems.length; i < length; i++) html.push( getTextActionButton({ Id: artistItems[i].Id, ServerId: displayItem.ServerId, Name: artistItems[i].Name, Type: "MusicArtist", IsFolder: !0, }), ); return html; })(itemInfo).join(", "))), (primaryNameHtml = primaryNameHtml || primaryNameText), !(function (item, originalItem, title) { _appheader.default.setLogoTitle({ items: [item, originalItem], titleText: "", preferredLogoImageTypes: ["LogoLightColor", "LogoLight", "Logo"], }); originalItem = title || (item ? item.Name : null); originalItem && (document.title = originalItem); })(itemInfo, item, primaryNameText), !(function (displayItem, item, displayingLocalVideo, mediaType) { var backdropItems = [displayItem]; if ( (item.Id !== displayItem.Id && backdropItems.push(item), displayingLocalVideo) ) _backdrop.default.setBackdrops(backdropItems), view.classList.add( "darkContentContainer", "graphicContentContainer", ), headerElement.classList.add("headroom-scrolling"), clearBlurFromDocumentElement(); else { displayItem = "Video" === mediaType ? "nowPlayingVideoBackgroundStyle" : "nowPlayingAudioBackgroundStyle"; if ( "blur" === _usersettings.default[displayItem]() && (item = (backdropItems = getDetailImageItemsSync().Items)[0]) ) { displayingLocalVideo = _imageloader.default.getImageUrl( item, _connectionmanager.default.getApiClient(item), { width: 100, adjustForPixelRatio: !1 }, ).imgUrl; if (displayingLocalVideo) return ( _backdrop.default.setBackdrop(displayingLocalVideo), displayingLocalVideo ? (view.classList.add("darkContentContainer"), view.classList.remove("graphicContentContainer"), headerElement.classList.remove("headroom-scrolling"), document.documentElement.classList.add( "doc-nowplaying-blur", )) : (view.classList.remove( "darkContentContainer", "graphicContentContainer", ), headerElement.classList.remove("headroom-scrolling"), clearBlurFromDocumentElement()) ); } _backdrop.default.setBackdrops(backdropItems), clearBlurFromDocumentElement(), headerElement.classList.remove("headroom-scrolling"), _backdrop.default.hasBackdrop() ? view.classList.add( "darkContentContainer", "graphicContentContainer", ) : view.classList.remove( "darkContentContainer", "graphicContentContainer", ); } })(itemInfo, item, user, item.MediaType), user ? setPoster(null) : setPoster(itemInfo), (primaryNameText = osdTitle), (secondaryName = "Audio" === item.MediaType ? ((item = primaryNameHtml), (primaryNameHtml = secondaryName = getSecondaryName(itemInfo, !1)), item) : getSecondaryName(itemInfo, !user)), primaryNameHtml || ((primaryNameHtml = secondaryName), (secondaryName = null)), (videoOsdParentTitle.innerHTML = primaryNameHtml), (videoOsdParentTitleLarge.innerHTML = primaryNameHtml) ? videoOsdSecondaryText.classList.add( "videoOsdSecondaryText-withparentname", ) : videoOsdSecondaryText.classList.remove( "videoOsdSecondaryText-withparentname", ), secondaryName || itemInfo.Type, (primaryNameText.innerHTML = secondaryName) ? primaryNameText.classList.remove("hide") : primaryNameText.classList.add("hide"), videoOsdSecondaryMediaInfo), primaryNameHtml = "Audio" === itemInfo.MediaType || ("Program" !== itemInfo.Type && !secondaryName) ? _mediainfo.default.getMediaInfoHtml(itemInfo, { runtime: !1, endsAt: !1, container: !user, year: "Audio" !== itemInfo.MediaType, CommunityRating: !1, criticRating: !1, }) : _mediainfo.default.getSecondaryMediaInfoHtml(itemInfo, { startDate: !1, programTime: !1, }); "Audio" === itemInfo.MediaType && itemInfo.Album && itemInfo.AlbumId ? ((videoOsdThirdTitle.innerHTML = getTextActionButton({ Type: "MusicAlbum", Id: itemInfo.AlbumId, ServerId: itemInfo.ServerId, Name: itemInfo.Album, })), videoOsdThirdTitle.classList.remove("hide")) : videoOsdThirdTitle.classList.add("hide"), (function (item) { for ( var mediaStreams = ( (( (item = item && "Audio" !== item.MediaType ? null : item) || {} ).MediaSources || [])[0] || {} ).MediaStreams || [], _i4 = 0, _length4 = mediaStreams.length; _i4 < _length4; _i4++ ) if ("Subtitle" === mediaStreams[_i4].Type) return btnLyrics.classList.remove("hide"); btnLyrics.classList.add("hide"), "lyrics" === currentOsdContentSectionName && setContentSection(getDefaultOsdContentSection(), !1); })(itemInfo), (item.innerHTML = primaryNameHtml), (videoOsdAudioInfo.innerHTML = primaryNameHtml) ? "Audio" === itemInfo.MediaType ? (item.classList.add("hide"), videoOsdAudioInfo.classList.remove("hide")) : (item.classList.remove("hide"), videoOsdAudioInfo.classList.add("hide")) : (item.classList.add("hide"), videoOsdAudioInfo.classList.add("hide")), (programEndDateMs = enableProgressByTimeOfDay ? (setDisplayTime(videoOsdPositionText, itemInfo.StartDate), setDisplayTime(videoOsdDurationText, itemInfo.EndDate), (programStartDateMs = itemInfo.StartDate ? _datetime.default.parseISO8601Date(itemInfo.StartDate).getTime() : 0), itemInfo.EndDate ? _datetime.default.parseISO8601Date(itemInfo.EndDate).getTime() : 0) : (programStartDateMs = 0)); for ( var introStart, introEnd, creditsStart, secondaryName, primaryNameText = self.lyricsRenderer, chapters = (primaryNameText && primaryNameText.updateItem(itemInfo), itemInfo.Chapters || []), _i5 = 0, _length5 = chapters.length; _i5 < _length5; _i5++ ) { var chapter = chapters[_i5]; "IntroStart" === chapter.MarkerType ? ((introStart = chapter.StartPositionTicks), _i5 < chapters.length - 1 && (introEnd = chapters[_i5 + 1].StartPositionTicks)) : "IntroEnd" === chapter.MarkerType ? (introEnd = chapter.StartPositionTicks) : "CreditsStart" === chapter.MarkerType && (creditsStart = chapter.StartPositionTicks); } creditsStart && (secondaryName = introEnd || introStart) && creditsStart <= secondaryName && (creditsStart = null), (currentIntroInfo = null != introStart && introEnd ? { start: introStart, end: introEnd } : null), (currentCreditsInfo = null != creditsStart ? { start: creditsStart } : null); for ( var bottomTabControllers = self.bottomTabControllers, _i6 = 0, _length6 = bottomTabControllers.length; _i6 < _length6; _i6++ ) bottomTabControllers[_i6] && bottomTabControllers[_i6].onItemUpdated({ item: self.currentItem, displayItem: currentDisplayItem, mediaSource: currentMediaSource, }); } function getDisplayTimeWithoutAmPm(date, showSeconds) { return ( showSeconds ? _datetime.default.toLocaleTimeString(date, { hour: "numeric", minute: "2-digit", second: "2-digit", }) : _datetime.default.getDisplayTime(date) ) .toLowerCase() .replace("am", "") .replace("pm", "") .trim(); } function setDisplayTime(elem, date) { var html; date && (html = getDisplayTimeWithoutAmPm( (date = _datetime.default.parseISO8601Date(date)), )), (elem.innerHTML = html || ""); } function supportsSubtitleDownloading() { return currentPlayerSupportedCommands.includes("RefreshMediaSource"); } function updateNowPlayingInfo(event, player, state) { var item = state.NowPlayingItem; if ( ((self.currentItem = item), (currentItemThumbnails = currentItemThumbnailsPromise = null), item) ) { (currentMediaSource = state.MediaSource), (enableProgressByTimeOfDay = (function (item, mediaSource) { return !( "TvChannel" !== item.Type || !item.CurrentProgram || !mediaSource || mediaSource.RunTimeTicks ); })(item, state.MediaSource)) ? self.nowPlayingPositionSlider .getTrackBackgroundUpper() .classList.add("emby-slider-background-upper-accent") : self.nowPlayingPositionSlider .getTrackBackgroundUpper() .classList.remove("emby-slider-background-upper-accent"); var apiClient = _connectionmanager.default.getApiClient(item); Promise.all([ (function (item, currentDisplayItem) { return item.Id ? currentDisplayItem && currentDisplayItem.Id === item.Id ? Promise.resolve({ originalItem: currentDisplayItem, displayItem: currentDisplayItem.CurrentProgram || currentDisplayItem, }) : (currentDisplayItem = _connectionmanager.default.getApiClient( item.ServerId, )) .getItem(currentDisplayItem.getCurrentUserId(), item.Id) .then(function (refreshedItem) { return { originalItem: refreshedItem, displayItem: refreshedItem.CurrentProgram || refreshedItem, }; }) : Promise.resolve({ originalItem: item }); })(item, currentDisplayItem), apiClient.getCurrentUser(), ]).then(function (responses) { var user = responses[1]; if ( (updateDisplayItem(0, responses[0], user), (nowPlayingVolumeSlider.disabled = !1), (self.nowPlayingPositionSlider.disabled = !0 === state.IsInitialRequest), "Video" === item.MediaType || item.SupportsResume) ) { for ( var _i9 = 0, _length9 = fastForwardButtons.length; _i9 < _length9; _i9++ ) fastForwardButtons[_i9].classList.remove("hide"), (fastForwardButtons[_i9].disabled = !0 === state.IsInitialRequest); for ( var _i10 = 0, _length10 = rewindButtons.length; _i10 < _length10; _i10++ ) rewindButtons[_i10].classList.remove("hide"), (rewindButtons[_i10].disabled = !0 === state.IsInitialRequest); } else { for ( var _i11 = 0, _length11 = fastForwardButtons.length; _i11 < _length11; _i11++ ) fastForwardButtons[_i11].classList.add("hide"); for ( var _i12 = 0, _length12 = rewindButtons.length; _i12 < _length12; _i12++ ) rewindButtons[_i12].classList.add("hide"); } 1 < _playbackmanager.default.audioTracks(player).length ? btnAudio.classList.remove("hide") : btnAudio.classList.add("hide"), (enableSkipIntro = "None" !== user.Configuration.IntroSkipMode), (enableAutoSkipIntro = "AutoSkip" === user.Configuration.IntroSkipMode), enableSkipIntro && validateSkipIntroFeature({ showDialog: !1 }, !0), _playbackmanager.default.subtitleTracks(player).length || (_itemmanager.default.canDownloadSubtitles(item, user) && supportsSubtitleDownloading()) ? btnSubtitles.classList.remove("hide") : btnSubtitles.classList.add("hide"); }); } else { (ratingTextNeedsUpdate = !(currentCreditsInfo = currentIntroInfo = currentDisplayChapters = currentDisplayItem = null)), setPoster((currentMediaSource = null)), updateRecordingButton(null), _appheader.default.setTitle(""), (nowPlayingVolumeSlider.disabled = !0), (self.nowPlayingPositionSlider.disabled = !0); for ( var _i7 = 0, _length7 = fastForwardButtons.length; _i7 < _length7; _i7++ ) fastForwardButtons[_i7].classList.add("hide"); for ( var _i8 = 0, _length8 = rewindButtons.length; _i8 < _length8; _i8++ ) rewindButtons[_i8].classList.add("hide"); btnSubtitles.classList.add("hide"), btnAudio.classList.add("hide"), ratingInfoContainer.classList.add("hide"), updateButtomTabsVisibility(0, null, null), (osdTitle.innerHTML = ""), (view.querySelector(".videoOsdMediaInfo").innerHTML = ""); } } function setPoster(item) { var posterContainer = osdPosterContainer; item ? (posterContainer.classList.remove("hide"), posterContainer.resume({ refresh: !0 })) : (posterContainer.classList.add("hide"), (posterContainer.innerHTML = "")); } var endEditTimeoutForPositionSlider, itemsContainer, nowPlayingSliderValue = 0, nowPlayingSliderRunTimeTicks = 0; function endEditsForPositionSlider() { self.nowPlayingPositionSlider.endEditing(!0, nowPlayingSliderValue); } function clearEndEditTimeoutForPositionSlider() { endEditTimeoutForPositionSlider && (clearTimeout(endEditTimeoutForPositionSlider), (endEditTimeoutForPositionSlider = null)); } function startEndEditTimeoutForPositionSlider() { clearEndEditTimeoutForPositionSlider(), (endEditTimeoutForPositionSlider = setTimeout( endEditsForPositionSlider, 800, )); } function convertMsToNowPlayingSliderStep(ms) { return nowPlayingSliderRunTimeTicks ? ((1e4 * ms) / nowPlayingSliderRunTimeTicks) * 100 : self.nowPlayingPositionSlider.step; } function cancelPositionSliderEditing() { clearEndEditTimeoutForPositionSlider(); var elem = self.nowPlayingPositionSlider; elem.dragging && elem.cancelEditing(); } function updateFullscreenIcon() { var title; _playbackmanager.default.isFullscreen(self.currentPlayer) ? ((title = _globalize.default.translate("ExitFullscreen")), (btnFullscreen.querySelector("i").innerHTML = "")) : ((title = _globalize.default.translate("Fullscreen")), (btnFullscreen.querySelector("i").innerHTML = "")), (btnFullscreen.title = title), btnFullscreen.setAttribute("aria-label", title); } function updateTransparency(player, state, mediaType) { var hideTransportButtons, isLocalVideo = isDisplayingLocalVideo(player, mediaType), videoOsdText = (console.log( "updateTransparency: isLocalVideo:" + isLocalVideo + ", mediaType:" + mediaType, ), _layoutmanager.default.tv ? videoOsdSecondaryText.classList.add("videoOsdSecondaryText-tv") : videoOsdSecondaryText.classList.remove( "videoOsdSecondaryText-tv", ), self.videoOsdText), bottomTabs = self.bottomTabs, osdBottomElement = self.osdBottomElement; if (isLocalVideo) { if ( !player.isLocalPlayer || player.isExternalPlayer || state.IsBackgroundPlayback ) unlockOrientation(), setSystemUIHidden(!1); else { switch (_usersettings.default.videoOrientation()) { case "device": unlockOrientation(); break; case "landscape": lockOrientation("landscape"); break; default: lockOrientation("any"); } setSystemUIHidden(!0); } self.currentVisibleMenu || (headerElement.classList.add("videoOsdHeader-hidden", "hide"), osdBottomElement.classList.add("hide", "videoOsdBottom-hidden")), osdBottomElement.classList.add("videoOsdBottom-video"), osdPosterContainer.classList.remove("osdPosterContainer-autoexpand"), videoOsdSecondaryText.classList.remove( "videoOsdSecondaryText-remotecontrol", ), videoOsdBottomMaincontrols.classList.remove( "videoOsdBottomMaincontrols-autoexpand", ), videoOsdPositionContainer.classList.remove( "videoOsdPositionContainer-autosmall", ), videoOsdPositionContainer.classList.add("focuscontainer-x"), _layoutmanager.default.tv ? ((function () { var val; if (!_usersettings.default.enableVideoUnderUI()) return "true" === (val = _usersettings.default.hideMediaTransportButtons()) ? 1 : "false" !== val && !_mouse.default.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"), videoOsdVolumeControls.classList.add( "videoOsdVolumeControls-showhover", "videoOsdVolumeControls-hidetouch", ), videoOsdParentTitle.classList.add("hide"), videoOsdParentTitleLarge.classList.remove("hide"), state.IsInitialRequest ? _approuter.default.setTransparency(0) : _approuter.default.setTransparency("full"), hideOrShowAll( self, stopButtons, !_layoutmanager.default.tv || !_usersettings.default.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"), 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-customFont-remotecontrol", "videoosd-header-safe", ), videoOsdBottomContentbuttons.classList.add("hide"), videoOsdBottomContentbuttons.classList.remove( "focusable", "videoOsd-customFont-remotecontrol-buttons", "videoOsd-customFont-remotecontrol", "videoOsd-customFont-remotecontrol-buttons", "videoOsdBottom-contentbuttons-tv", ), videoOsdVolumeSliderWrapper.classList.remove( "videoOsdVolumeSliderWrapper-customfont", ), buttonMute.classList.remove("btnMuteOSD-remotecontrol"), 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 unlockOrientation(), setSystemUIHidden(!1), osdTitle.classList.add("secondaryText"), osdBottomElement.classList.remove( "videoOsdBottom-video", "videoOsdBottom-hidden", "hide", "videoosd-withupnext", ), self.showOsd(), "blur" === _usersettings.default[ "Video" === mediaType ? "nowPlayingVideoBackgroundStyle" : "nowPlayingAudioBackgroundStyle" ]() ? (backdropContainer.classList.add( "nowplaying-backdropcontainer-blur", ), enableHighResBlur && backdropContainer.classList.add( "nowplaying-backdropcontainer-blur-high", ), _browser.default.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.add("hide"), videoOsdParentTitle.classList.remove("hide"), videoOsdSecondaryMediaInfo.classList.add( "videoOsdSecondaryMediaInfo-remotecontrol", ), mainLockButton.classList.add("hide"), headerElement.classList.add("videoosd-header-safe"), _layoutmanager.default.tv ? (osdBottomElement.classList.add( "videoOsdBottom-safe", "padded-top-page", "videoOsdBottom-tvnowplaying", "videoOsdBottom-remotecontrol", ), view.classList.remove("justify-content-flex-end"), 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.add("videoOsdBottom-tabs-remotecontrol"), videoOsdPositionText.classList.remove( "videoOsd-customFont-remotecontrol", ), videoOsdDurationText.classList.remove( "videoOsd-customFont-remotecontrol", ), headerElement.classList.remove( "videoOsd-customFont-remotecontrol", ), videoOsdBottomContentbuttons.classList.add( "focusable", "videoOsdBottom-contentbuttons-tv", ), videoOsdBottomContentbuttons.classList.remove( "hide", "videoOsd-customFont-remotecontrol-buttons", "videoOsd-customFont-remotecontrol", "videoOsd-customFont-remotecontrol-buttons", ), videoOsdVolumeSliderWrapper.classList.remove( "videoOsdVolumeSliderWrapper-customfont", ), videoOsdVolumeControls.classList.add( "videoOsdVolumeControls-showhover", "videoOsdVolumeControls-hidetouch", ), buttonMute.classList.remove("btnMuteOSD-remotecontrol"), 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"), 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", ), headerElement.classList.add("videoOsd-customFont-remotecontrol"), videoOsdBottomContentbuttons.classList.remove( "hide", "videoOsdBottom-contentbuttons-tv", ), videoOsdBottomContentbuttons.classList.add( "focusable", "videoOsd-customFont-remotecontrol-buttons", "videoOsd-customFont-remotecontrol", ), videoOsdVolumeSliderWrapper.classList.add( "videoOsdVolumeSliderWrapper-customfont", ), videoOsdVolumeControls.classList.remove( "videoOsdVolumeControls-showhover", "videoOsdVolumeControls-hidetouch", ), buttonMute.classList.add("btnMuteOSD-remotecontrol"), 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.default.setTransparency(0), hideOrShowAll(self, stopButtons, !1, null), (self.enableStopOnBack = !1), (self.enableBackOnStop = !0); hideTransportButtons ? (videoOsdBottomButtons.classList.add("hide"), videoOsdBottomButtons.classList.remove("focusable"), self.bottomTabs.classList.add("videoOsdTabs-margintop")) : (videoOsdBottomButtons.classList.add("focusable"), videoOsdBottomButtons.classList.remove("hide"), self.bottomTabs.classList.remove("videoOsdTabs-margintop")), isLocalVideo ? (destroyPlayQueue(self), destroyLyricsRenderer(self)) : (self.lyricsRenderer || (self.lyricsRenderer = new _lyrics.default({ parent: view.querySelector(".lyricsSection"), })), self.playQueue || ((player = view.querySelector(".osdPlayQueue")), (state = _usersettings.default.osdContentSection() || getDefaultOsdContentSection()), _layoutmanager.default.tv ? ((self.playQueue = new _tvplayqueue.default({ parent: player, })), (state = "playqueue")) : (self.playQueue = new _playqueue.default({ parent: player })), setContentSection( (state = "lyrics" === state ? getDefaultOsdContentSection() : state), !1, ))); mediaType = self.btnPause; isLocalVideo && !_layoutmanager.default.tv ? (mainTransportButtons.classList.add( "videoOsd-centerButtons-autolayout", ), mediaType.classList.add("videoOsd-btnPause-autolayout"), stopButtons[0].classList.add("btnVideoOsd-stop-center-autolayout")) : (mainTransportButtons.classList.remove( "videoOsd-centerButtons-autolayout", ), mediaType.classList.remove("videoOsd-btnPause-autolayout"), stopButtons[0].classList.remove( "btnVideoOsd-stop-center-autolayout", )); } function getDetailImageItemsSync() { var item = currentDisplayItem, 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) { var cardClass = "osdRemoteControlImageCard"; return ( _layoutmanager.default.tv || (cardClass += " osdRemoteControlImageCard-automargin"), { renderer: _cardbuilder.default, options: { overlayText: !0, fields: [], action: "none", multiSelect: !1, contextMenu: !_layoutmanager.default.tv, ratingButton: !_layoutmanager.default.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.default.tv, shape: "auto", }, virtualScrollLayout: "vertical-grid", } ); } function onStateChanged(event, state) { state.NowPlayingItem && ((isEnabled = !0), (function (player, state) { var playState = (self.lastPlayerState = state).PlayState || {}, supportedCommands = (updatePlayPauseState(playState.IsPaused, state.IsInitialRequest), _playbackmanager.default.getSupportedCommands(player)), nowPlayingPositionSlider = ((currentPlayerSupportedCommands = supportedCommands), updatePlayerVolumeState( 0, playState.IsMuted, playState.VolumeLevel, supportedCommands, ), updatePlayerBrightnessState(player), self.nowPlayingPositionSlider); nowPlayingPositionSlider && !nowPlayingPositionSlider.dragging && (nowPlayingPositionSlider.disabled = !playState.CanSeek); for ( var _i13 = 0, _length13 = fastForwardButtons.length; _i13 < _length13; _i13++ ) fastForwardButtons[_i13].disabled = !playState.CanSeek; for ( var _i14 = 0, _length14 = rewindButtons.length; _i14 < _length14; _i14++ ) rewindButtons[_i14].disabled = !playState.CanSeek; var nowPlayingItem = state.NowPlayingItem || {}, displayingLocalVideo = isDisplayingLocalVideo( player, nowPlayingItem.MediaType, ), focusedElement = (updateTransparency(player, state, nowPlayingItem.MediaType), (playbackStartTimeTicks = playState.PlaybackStartTimeTicks), updateTimeDisplay( playState.PositionTicks, nowPlayingItem.RunTimeTicks, playState.PlaybackStartTimeTicks, playState.BufferedRanges || [], ), updateNowPlayingInfo(0, player, state), document.activeElement); state.MediaSource && !state.IsInitialRequest ? displayingLocalVideo || _layoutmanager.default.tv ? (hideButton(btnVideoOsdSettingsTransportButton, focusedElement), self.btnVideoOsdSettingsRight.classList.remove("hide")) : (btnVideoOsdSettingsTransportButton.classList.remove("hide"), hideButton(self.btnVideoOsdSettingsRight, focusedElement)) : (hideButton(self.btnVideoOsdSettingsRight, focusedElement), hideButton(btnVideoOsdSettingsTransportButton, focusedElement)); var isProgressClear = state.MediaSource && null == state.MediaSource.RunTimeTicks; nowPlayingPositionSlider.setIsClear(isProgressClear), !supportedCommands.includes("ToggleFullscreen") || !displayingLocalVideo || (player.isLocalPlayer && _layoutmanager.default.tv && _playbackmanager.default.isFullscreen(player)) ? hideButton(btnFullscreen, focusedElement) : btnFullscreen.classList.remove("hide"); state.IsInitialRequest || !supportedCommands.includes("PictureInPicture") || _layoutmanager.default.tv || supportedCommands.includes("AutoPictureInPicture") ? hideButton(view.querySelector(".btnPip"), focusedElement) : view.querySelector(".btnPip").classList.remove("hide"); updateRepeatModeDisplay(playState.RepeatMode), supportedCommands.includes("SetRepeatMode") && "Video" !== nowPlayingItem.MediaType && _layoutmanager.default.tv ? btnRepeatMode.classList.remove("hide") : hideButton(btnRepeatMode, focusedElement); updateFullscreenIcon(); (nowPlayingPositionSlider = state.PlaylistIndex), (isProgressClear = state.PlaylistLength), updatePlaylistButtons( nowPlayingPositionSlider, isProgressClear, focusedElement, ), (displayingLocalVideo = self.playQueue); displayingLocalVideo && ((supportedCommands = state.PlaylistItemId), displayingLocalVideo.updatePlaylist( player, supportedCommands, nowPlayingPositionSlider, isProgressClear, )); })(this, state)); } function onPlayPauseStateChanged(e) { isEnabled && updatePlayPauseState(this.paused()); } function onVolumeChanged(e) { isEnabled && updatePlayerVolumeState( 0, this.isMuted(), this.getVolume(), currentPlayerSupportedCommands, ); } function onBrightnessChanged(e) { isEnabled && updatePlayerBrightnessState(this); } function onPlaybackStart(e, state) { console.log("nowplaying event: " + e.type), cancelPositionSliderEditing(); onStateChanged.call(this, e, state), resetUpNextDialog(), resetRatingText(), showHideSkipIntro(!1), "Video" !== (null == (e = state.NowPlayingItem) ? void 0 : e.MediaType) && self.bottomTabs.selectedIndex(-1); } function onRepeatModeChange(e) { updateRepeatModeDisplay(_playbackmanager.default.getRepeatMode(this)); } function onSubtitleTrackChange() { destroySubtitleOffsetOverlay(self); } function onPlaylistItemAdd(e) { var playlistItemId, playlistIndex = _playbackmanager.default.getCurrentPlaylistIndex(this), playlistLength = _playbackmanager.default.getCurrentPlaylistLength(this), playQueue = (updatePlaylistButtons( playlistIndex, playlistLength, document.activeElement, ), self.playQueue); playQueue && ((playlistItemId = _playbackmanager.default.getCurrentPlaylistItemId(this)), playQueue.updatePlaylist( this, playlistItemId, playlistIndex, playlistLength, )); } function onPlaylistItemMove(e, info) { updatePlaylistButtons( _playbackmanager.default.getCurrentPlaylistIndex(this), _playbackmanager.default.getCurrentPlaylistLength(this), document.activeElement, ); var playQueue = self.playQueue; playQueue && playQueue.onPlaylistItemMoved(this, e, info); } function onPlaylistItemRemove(e, info) { updatePlaylistButtons( _playbackmanager.default.getCurrentPlaylistIndex(this), _playbackmanager.default.getCurrentPlaylistLength(this), document.activeElement, ); var playQueue = self.playQueue; playQueue && playQueue.onPlaylistItemRemoved(this, e, info); } function resetUpNextDialog() { showHideUpNext((comingUpNextDisplayed = !1)), btnHideUpNext.classList.remove("hide"); } function onPlaybackStopped(e, state) { hideWaiting(), cancelPositionSliderEditing(), (currentRuntimeTicks = null), resetRatingText(); self.currentItem && showComingUpNextIfNeeded( 0, self.currentItem, 1, 1, !0, currentCreditsInfo, ); var hideUpNextHasFocus = btnHideUpNext === document.activeElement; btnHideUpNext.classList.add("hide"), hideUpNextHasFocus && _focusmanager.default.autoFocus(self.upNextContainer), showHideSkipIntro(!1), console.log("nowplaying event: " + e.type), state.NextMediaType || ((hideUpNextHasFocus = self.playQueue) && hideUpNextHasFocus.onPlaybackStopped(), (e = self.lyricsRenderer) && e.onPlaybackStopped(), (self.enableStopOnBack = !1), self.enableBackOnStop && ((self.enableBackOnStop = !1), self.exit())); } function onMediaStreamsChanged(e) { var state = _playbackmanager.default.getPlayerState(this); onStateChanged.call(this, e, state); } function releaseCurrentPlayer() { cancelPositionSliderEditing(), destroyStats(self), destroySubtitleOffsetOverlay(self), resetUpNextDialog(), resetRatingText(), showHideSkipIntro(!1); var player = self.currentPlayer; player && (hideWaiting(), _events.default.off(player, "playbackrequest", onPlaybackStart), _events.default.off(player, "playbackstart", onPlaybackStart), _events.default.off(player, "playbackstop", onPlaybackStopped), _events.default.off(player, "volumechange", onVolumeChanged), _events.default.off(player, "brightnesschange", onBrightnessChanged), _events.default.off(player, "pause", onPlayPauseStateChanged), _events.default.off(player, "unpause", onPlayPauseStateChanged), _events.default.off(player, "timeupdate", onTimeUpdate), _events.default.off(player, "waiting", onWaiting), _events.default.off(player, "playing", onPlaying), _events.default.off(player, "fullscreenchange", updateFullscreenIcon), _events.default.off( player, "mediastreamschange", onMediaStreamsChanged, ), _events.default.off(player, "statechange", onStateChanged), _events.default.off(player, "repeatmodechange", onRepeatModeChange), _events.default.off( player, "subtitletrackchange", onSubtitleTrackChange, ), _events.default.off(player, "playlistitemadd", onPlaylistItemAdd), _events.default.off(player, "playlistitemmove", onPlaylistItemMove), _events.default.off(player, "playlistitemremove", onPlaylistItemRemove), (self.currentPlayer = null)); } function resetRatingText() { ratingInfoContainer.classList.add("hide"), (ratingTextNeedsUpdate = !0); } function showHideSkipIntro(show) { var needToRefocus; show ? skipIntroContainer._visible || ((skipIntroContainer._visible = !0), skipIntroContainer.classList.remove("hide"), self.currentVisibleMenu) || (_focusmanager.default.focus(btnSkipIntro), enableAutoSkipIntro && btnSkipIntro.click()) : skipIntroContainer._visible && ((skipIntroContainer._visible = !1), (show = btnSkipIntro === document.activeElement), (needToRefocus = !!self.currentVisibleMenu && show), skipIntroContainer.classList.add("hide"), needToRefocus ? focusMainOsdControls(self) : show && btnSkipIntro.blur()); } function showHideUpNext(show, timeRemainingTicks) { var upNextContainer = self.upNextContainer; show ? upNextContainer._visible || ((btnPlayNextFromUpNextProgress.style.transform = "scaleX(0)"), (upNextContainer._visible = !0), (upNextContainer._timeRemainingTicks = timeRemainingTicks), upNextContainer.classList.remove("hide"), self.osdBottomElement.classList.add("videoosd-withupnext"), _focusmanager.default.focus( upNextContainer.querySelector(".btnPlayNextFromUpNext"), )) : upNextContainer._visible && ((upNextContainer._visible = !1), (upNextContainer._timeRemainingTicks = null), (show = !!self.currentVisibleMenu && upNextContainer.contains(document.activeElement)), upNextContainer.classList.add("hide"), self.osdBottomElement.classList.remove("videoosd-withupnext"), show) && focusMainOsdControls(self); } function validateSkipIntroFeature(options, incrementAppSettings) { return require(["registrationServices"]).then(function (responses) { return responses[0] .validateFeature("dvr", Object.assign({ viewOnly: !0 }, options)) .then( function () { (skipIntroValidated = !0), _appsettings.default.introSkipDisplayCount(0); }, function (err) { return ( (skipIntroValidated = !1), incrementAppSettings && _appsettings.default.introSkipDisplayCount( _appsettings.default.introSkipDisplayCount() + 1, ), Promise.reject(err) ); }, ); }); } (self.updateTransparency = updateTransparency), ((itemsContainer = osdPosterContainer).fetchData = getDetailImageItems), (itemsContainer.getListOptions = getDetailImageListOptions), _dom.default.addEventListener( btnFullscreen, "click", function () { _playbackmanager.default.toggleFullscreen(self.currentPlayer); }, { passive: !0 }, ), view.querySelector(".btnPip").addEventListener("click", function () { _playbackmanager.default.togglePictureInPicture(self.currentPlayer); }), self.btnVideoOsdSettingsRight.addEventListener( "click", onSettingsButtonClick, ), btnVideoOsdSettingsTransportButton.addEventListener( "click", onSettingsButtonClick, ), (self.bindToPlayer = function (player, forceStateChange) { player === self.currentPlayer ? forceStateChange && player && onStateChanged.call( player, { type: "viewresume" }, _playbackmanager.default.getPlayerState(player), ) : (releaseCurrentPlayer(), (self.currentPlayer = player) && (onStateChanged.call( player, { type: "init" }, _playbackmanager.default.getPlayerState(player), ), _events.default.on(player, "playbackrequest", onPlaybackStart), _events.default.on(player, "playbackstart", onPlaybackStart), _events.default.on(player, "playbackstop", onPlaybackStopped), _events.default.on(player, "volumechange", onVolumeChanged), _events.default.on( player, "brightnesschange", onBrightnessChanged, ), _events.default.on(player, "pause", onPlayPauseStateChanged), _events.default.on(player, "unpause", onPlayPauseStateChanged), _events.default.on(player, "timeupdate", onTimeUpdate), _events.default.on(player, "waiting", onWaiting), _events.default.on(player, "playing", onPlaying), _events.default.on( player, "fullscreenchange", updateFullscreenIcon, ), _events.default.on( player, "mediastreamschange", onMediaStreamsChanged, ), _events.default.on(player, "statechange", onStateChanged), _events.default.on( player, "repeatmodechange", onRepeatModeChange, ), _events.default.on( player, "subtitletrackchange", onSubtitleTrackChange, ), _events.default.on(player, "playlistitemadd", onPlaylistItemAdd), _events.default.on( player, "playlistitemmove", onPlaylistItemMove, ), _events.default.on( player, "playlistitemremove", onPlaylistItemRemove, ), resetUpNextDialog(), resetRatingText(), showHideSkipIntro(!1))); }), (self.releaseCurrentPlayer = releaseCurrentPlayer); var IntroEndToleranceTicks = 2e7; function onWaiting(e) { (self.timeWhenWaiting = _playbackmanager.default.currentTime(this)), _loading.default.show(); } function hideWaiting() { (self.timeWhenWaiting = null), _loading.default.hide(); } function onPlaying(e) { hideWaiting(); } function onTimeUpdate(e) { var now, currentTime, item; !isEnabled || (now = Date.now()) - lastUpdateTime < 200 || ((currentTime = _playbackmanager.default.currentTime(this)) !== self.timeWhenWaiting && hideWaiting(), showComingUpNextIfNeeded( 0, (item = self.currentItem), currentTime, (currentRuntimeTicks = _playbackmanager.default.duration(this)), !1, currentCreditsInfo, ), now - lastUpdateTime < 600) || ((lastUpdateTime = now), (function (currentTime) { var introInfo = currentIntroInfo; introInfo && enableSkipIntro && currentTime >= introInfo.start && currentTime < introInfo.end - IntroEndToleranceTicks && (!1 !== skipIntroValidated || _appsettings.default.introSkipDisplayCount() < 5) ? (!0 === skipIntroValidated && _appsettings.default.introSkipDisplayCount(0), showHideSkipIntro(!0)) : showHideSkipIntro(!1); })(currentTime), (function () { var item; ratingTextNeedsUpdate && (item = currentDisplayItem) && ((ratingTextNeedsUpdate = !1), item.OfficialRating && "Trailer" !== item.Type && "Video" === item.MediaType && _usersettings.default.enableRatingInfoOnPlaybackStart() ? ((ratingTextElement.innerHTML = _globalize.default.translate( "RatedValue", item.OfficialRating, )), ratingInfoContainer.classList.add("hide"), ratingInfoContainer.offsetWidth, ratingInfoContainer.classList.remove("hide")) : ratingInfoContainer.classList.add("hide")); })(), updateTimeDisplay( currentTime, currentRuntimeTicks, _playbackmanager.default.playbackStartTime(this), _playbackmanager.default.getBufferedRanges(this), ), (function (player, item) { if ("TvChannel" === item.Type) { item = item.CurrentProgram; if (item && item.EndDate) try { var state, endDate = _datetime.default.parseISO8601Date(item.EndDate); Date.now() >= endDate.getTime() && (console.log("program info needs to be refreshed"), (state = _playbackmanager.default.getPlayerState(player)), onStateChanged.call( player, { type: "updatemetadata" }, state, )); } catch (e) { console.log("Error parsing date: " + item.EndDate); } } })(this, item)); } var fiftyMinuteTicks = 3e10, fortyMinuteTicks = 24e9; function showComingUpNextIfNeeded( player, currentItem, currentTimeTicks, runtimeTicks, isStopped, creditsInfo, ) { ((runtimeTicks && currentTimeTicks) || isStopped) && "Episode" === currentItem.Type && self.hasNextTrack && ((currentItem = runtimeTicks - currentTimeTicks), (!comingUpNextDisplayed || isStopped) && ((creditsInfo = (function (runtimeTicks, creditsInfo) { return (creditsInfo = (null == creditsInfo ? void 0 : creditsInfo.start) || 0) && creditsInfo < runtimeTicks ? creditsInfo : runtimeTicks - 1e3 * (fiftyMinuteTicks <= runtimeTicks ? 40 : fortyMinuteTicks <= runtimeTicks ? 35 : 30) * 1e4; })(runtimeTicks, creditsInfo)), isStopped || (creditsInfo <= currentTimeTicks && 3e9 <= runtimeTicks && 2e8 <= currentItem && _usersettings.default.enableNextVideoInfoOverlay())) && (isStopped && btnHideUpNext.classList.add("hide"), showHideUpNext((comingUpNextDisplayed = !0), currentItem)), self.upNextContainer._visible) && (creditsInfo = self.upNextContainer._timeRemainingTicks) && ((currentTimeTicks = isStopped ? 1 : (creditsInfo - currentItem + 15e6) / creditsInfo), (currentTimeTicks *= 100), (currentTimeTicks = (currentTimeTicks = Math.min( currentTimeTicks, 100, )).toFixed(2)), (btnPlayNextFromUpNextProgress.style.transform = "scaleX(" + currentTimeTicks + "%)")); } function updatePlayPauseState(isPaused, isInitialRequest) { var btnPause = self.btnPause, title = isPaused ? ((btnPause.querySelector("i").innerHTML = ""), _globalize.default.translate("Play")) : ((btnPause.querySelector("i").innerHTML = ""), _globalize.default.translate("Pause")), title = ((btnPause.title = title), btnPause.setAttribute("aria-label", title), (btnPause.disabled = !0 === isInitialRequest), self.playQueue); title && title.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 < playlistLength - 1 ? ((self.hasNextTrack = !0), btnNextTrack.classList.remove("hide")) : ((self.hasNextTrack = !1), hideButton(btnNextTrack, focusedElement)); } function updateRepeatModeDisplay(repeatMode) { var icon = btnRepeatMode.querySelector("i"), icon = ("RepeatAll" === repeatMode ? ((icon.innerHTML = ""), icon.classList.add("toggleButtonIcon-active"), btnRepeatMode.classList.add("toggleButton-active")) : "RepeatOne" === repeatMode ? ((icon.innerHTML = ""), icon.classList.add("toggleButtonIcon-active"), btnRepeatMode.classList.add("toggleButton-active")) : ((icon.innerHTML = ""), icon.classList.remove("toggleButtonIcon-active"), btnRepeatMode.classList.remove("toggleButton-active")), self.playQueue); icon && icon.updateRepeatModeDisplay(repeatMode); } function getDisplayPercentByTimeOfDay( programStartDateMs, programRuntimeMs, currentTimeMs, ) { return ((currentTimeMs - programStartDateMs) / programRuntimeMs) * 100; } function getStep(runtimeTicks) { runtimeTicks = (runtimeTicks = ((1e7 * (_layoutmanager.default.tv ? 10 : 1)) / runtimeTicks) * 100).toFixed(3); return ( (runtimeTicks = Math.max(0.01, runtimeTicks)), (runtimeTicks = Math.min(1, runtimeTicks)) ); } function updateTimeDisplay( positionTicks, runtimeTicks, playbackStartTimeTicks, bufferedRanges, ) { for ( var programRuntimeMs, dash, nowPlayingPositionSlider = self.nowPlayingPositionSlider, bottomTabControllers = (enableProgressByTimeOfDay ? nowPlayingPositionSlider && !nowPlayingPositionSlider.dragging && (programStartDateMs && programEndDateMs ? ((currentTimeMs = (playbackStartTimeTicks + (positionTicks || 0)) / 1e4), (nowPlayingSliderRunTimeTicks = 1e4 * (programRuntimeMs = programEndDateMs - programStartDateMs)), (nowPlayingPositionSlider.step = getStep( nowPlayingSliderRunTimeTicks, )), (nowPlayingSliderValue = ((currentTimeMs - programStartDateMs) / programRuntimeMs) * 100), nowPlayingPositionSlider.setValue(nowPlayingSliderValue), bufferedRanges.length ? ((currentTimeMs = getDisplayPercentByTimeOfDay( programStartDateMs, programRuntimeMs, (playbackStartTimeTicks + (bufferedRanges[0].start || 0)) / 1e4, )), (programRuntimeMs = getDisplayPercentByTimeOfDay( programStartDateMs, programRuntimeMs, (playbackStartTimeTicks + (bufferedRanges[0].end || 0)) / 1e4, )), nowPlayingPositionSlider.setBufferedRanges([ { start: currentTimeMs, end: programRuntimeMs }, ])) : nowPlayingPositionSlider.setBufferedRanges([])) : ((nowPlayingPositionSlider.step = 0.01), (nowPlayingSliderRunTimeTicks = null), (nowPlayingSliderValue = 0), nowPlayingPositionSlider.setValue(0), nowPlayingPositionSlider.setBufferedRanges([]))) : ((nowPlayingSliderRunTimeTicks = runtimeTicks), nowPlayingPositionSlider && !nowPlayingPositionSlider.dragging && ((playbackStartTimeTicks = currentDisplayItem), runtimeTicks && null != (bufferedRanges = currentMediaSource) && bufferedRanges.RunTimeTicks ? ((currentTimeMs = positionTicks / runtimeTicks), (currentTimeMs *= 100), (nowPlayingPositionSlider.step = getStep(runtimeTicks)), (nowPlayingSliderValue = currentTimeMs), nowPlayingPositionSlider.setValue(currentTimeMs), updateDurationText( runtimeTicks - positionTicks, playbackStartTimeTicks, !0, )) : ((nowPlayingPositionSlider.step = 0.01), (nowPlayingSliderValue = 0), nowPlayingPositionSlider.setValue(0), updateDurationText( runtimeTicks, playbackStartTimeTicks, ))), nowPlayingPositionSlider && nowPlayingPositionSlider.setBufferedRanges([]), (programRuntimeMs = videoOsdPositionText), null == (bufferedRanges = positionTicks) || isNaN(bufferedRanges) ? (programRuntimeMs.innerHTML = "") : ((bufferedRanges = _datetime.default.getDisplayRunningTime(bufferedRanges)), dash && (bufferedRanges = "-" + bufferedRanges), (programRuntimeMs.innerHTML = bufferedRanges))), self.bottomTabControllers), _i15 = 0, _length15 = bottomTabControllers.length; _i15 < _length15; _i15++ ) bottomTabControllers[_i15] && bottomTabControllers[_i15].onTimeUpdate(positionTicks, runtimeTicks); var currentTimeMs = self.lyricsRenderer; currentTimeMs && currentTimeMs.onTimeUpdate(positionTicks, currentRuntimeTicks); } function updateDurationText( durationTicks, displayItem, enableTimeRemaining, ) { var html, elem = videoOsdDurationText; null == durationTicks || isNaN(durationTicks) ? (elem.innerHTML = "") : ((html = _datetime.default.getDisplayRunningTime(durationTicks)), enableTimeRemaining && ((html = "-" + html), enableProgressByTimeOfDay || "Video" !== (null == displayItem ? void 0 : displayItem.MediaType) || (html += '/' + _mediainfo.default .getEndsAtFromPosition(durationTicks, 0, !1) .toLowerCase() + "")), (elem.innerHTML = html)); } function updatePlayerBrightnessState(player) { var showSlider = !_layoutmanager.default.tv && currentPlayerSupportedCommands.includes("SetBrightness"); brightnessSlider && (showSlider ? (brightnessSliderContainer.classList.remove("hide"), brightnessSlider.dragging || brightnessSlider.setValue( _playbackmanager.default.getBrightness(player), )) : brightnessSliderContainer.classList.add("hide")); } function updatePlayerVolumeState( player, isMuted, volumeLevel, supportedCommands, ) { var showMuteButton = !0, showVolumeSlider = !0; supportedCommands.includes("Mute") || (showMuteButton = !1), supportedCommands.includes("SetVolume") || (showVolumeSlider = !1), isMuted ? (buttonMute.setAttribute( "title", _globalize.default.translate("Unmute"), ), (buttonMute.querySelector("i").innerHTML = "")) : (buttonMute.setAttribute( "title", _globalize.default.translate("Mute"), ), (buttonMute.querySelector("i").innerHTML = "")), showMuteButton ? buttonMute.classList.remove("hide") : buttonMute.classList.add("hide"), nowPlayingVolumeSlider && (showVolumeSlider ? videoOsdVolumeControls.classList.remove("hide") : videoOsdVolumeControls.classList.add("hide"), nowPlayingVolumeSlider.dragging || nowPlayingVolumeSlider.setValue(volumeLevel)); } function onSettingsButtonClick(e) { var btn = this; require(["playerSettingsMenu"], function (playerSettingsMenu) { var player = self.currentPlayer; player && playerSettingsMenu .show({ player: player, positionTo: btn, stats: !0, onOption: onSettingsOption, mediaType: self.currentItem.MediaType, }) .then( self.boundShowOsdDefaultParams, self.boundShowOsdDefaultParams, ); }); } function onSettingsOption(selectedOption) { "stats" === selectedOption ? toggleStats(self) : "subtitleoffset" === selectedOption && toggleSubtitleOffset(); } function toggleSubtitleOffset() { require(["subtitleOffsetOverlay"], function (SubtitleOffsetOverlay) { var player = self.currentPlayer; player && (self.subtitleOffsetOverlay || (self.subtitleOffsetOverlay = new SubtitleOffsetOverlay({ player: player, })), self.subtitleOffsetOverlay.show()); }); } var lastPointerEvent = 0; function refreshThumbnailsIfNeeded( item, mediaSourceId, apiClient, maxThumbnailWidth, ) { !item.Id || "Audio" === item.MediaType || currentItemThumbnails || currentItemThumbnailsPromise || !(function (itemId, mediaSourceId, apiClient, maxThumbnailWidth) { currentItemThumbnailsPromise || (currentItemThumbnailsPromise = apiClient .getThumbnails(itemId, { MediaSourceId: mediaSourceId, Width: maxThumbnailWidth, }) .then( function (result) { return ( (currentItemThumbnails = result), Promise.resolve(result) ); }, function () { currentItemThumbnailsPromise = null; }, )); })(item.Id, mediaSourceId, apiClient, maxThumbnailWidth); } function getThumbnailBubbleHtml( apiClient, itemId, mediaSourceId, thumbnailSet, chapters, positionTicks, maxThumbnailWidth, ) { var thumbnail, thumbnails = (thumbnailSet = thumbnailSet || {}).Thumbnails || {}, bubbleElement = self.nowPlayingPositionSlider.getBubbleElement(); thumbnails.length ? (bubbleElement.classList.add("chapterThumbImageContainer"), thumbnailSet.AspectRatio && thumbnailSet.AspectRatio < 1.4 ? bubbleElement.classList.add( "chapterThumbImageContainer-fourthree", ) : bubbleElement.classList.remove( "chapterThumbImageContainer-fourthree", ), bubbleElement.classList.remove("chapterThumbImageContainer-noimg")) : (bubbleElement.classList.remove( "chapterThumbImageContainer", "chapterThumbImageContainer-fourthree", ), bubbleElement.classList.add("chapterThumbImageContainer-noimg")), _layoutmanager.default.tv ? bubbleElement.classList.add("chapterThumbImageContainer-tv") : bubbleElement.classList.remove("chapterThumbImageContainer-tv"); for ( var _i16 = 0, _length16 = thumbnails.length; _i16 < _length16; _i16++ ) { var currentThumbnail = thumbnails[_i16]; if (positionTicks >= currentThumbnail.PositionTicks) thumbnail = currentThumbnail; else if (thumbnail) break; } for ( var _i17 = 0, _length17 = chapters.length; _i17 < _length17; _i17++ ) { var currentChapter = chapters[_i17]; if (positionTicks >= currentChapter.StartPositionTicks) chapter = currentChapter; else if (chapter) break; } var chapter = chapter || { Name: " " }, thumbnailSet = thumbnail ? (function (itemId, thumbnail, maxWidth, apiClient) { return thumbnail.ImageTag ? apiClient.getImageUrl(itemId, { maxWidth: maxWidth, tag: thumbnail.ImageTag, type: "Thumbnail", PositionTicks: thumbnail.PositionTicks, }) : null; })(itemId, thumbnail, maxThumbnailWidth, apiClient) : null, bubbleElement = "", itemId = "chapterThumbTextContainer"; return ( thumbnailSet || (itemId += " chapterThumbTextContainer-noimg"), (self.nowPlayingPositionSlider.getBubbleElement().style.backgroundImage = thumbnailSet ? "url('" + thumbnailSet + "')" : null), (bubbleElement = (bubbleElement = (bubbleElement = (bubbleElement = (bubbleElement = bubbleElement + ('