import htmlMediaHelper from"./../htmlvideoplayer/htmlmediahelper.js";import BaseHtmlPlayer from"./../htmlvideoplayer/basehtmlplayer.js";import events from"./../emby-apiclient/events.js";import appRouter from"./../approuter.js";import browser from"./../browser.js";import globalize from"./../common/globalize.js";import userSettings from"./../common/usersettings/usersettings.js";import subtitleAppearanceHelper from"./../common/subtitleappearancehelper.js";import playbackManager from"./../common/playback/playbackmanager.js";import layoutManager from"./../layoutmanager.js";import appSettings from"./../common/appsettings.js";require(["css!modules/htmlvideoplayer/style.css"]);let isNativeLG="webos"===globalThis.appMode,WebVTT;function tryRemoveElement(elem){try{elem.remove()}catch(err){console.log("Error removing dialog element: "+err)}}function enableNativeTrackSupport(currentSrc,track){if(track){if("Embed"===track.DeliveryMethod)return!0;if("Hls"===track.DeliveryMethod)return!0;if("VideoSideData"===track.DeliveryMethod)return!0;track=(track.Codec||"").toLowerCase();if("ssa"===track||"ass"===track)return!1}return!(browser.chromecast&&-1!==(currentSrc||"").toLowerCase().indexOf(".m3u8")||isNativeLG&&browser.sdkVersion&&browser.sdkVersion<3)}function getMediaStreamTracks(mediaSource,type){return mediaSource.MediaStreams.filter(function(s){return s.Type===type})}function getMediaStreamSubtitleTracks(mediaSource){return mediaSource.MediaStreams.filter(function(s){return"Subtitle"===s.Type})}function setTracks(elem,tracksHtml){elem.innerHTML=tracksHtml}function getTextTrackUrl(track,item,mediaSource){return window.Windows&&mediaSource.IsLocal&&track.Path?Windows.Storage.StorageFile.getFileFromPathAsync(track.Path).then(function(file){file=URL.createObjectURL(file,{oneTimeOnly:!0});return Promise.resolve(file)}):mediaSource.IsLocal&&track.Path?Promise.resolve(track.Path):(mediaSource=playbackManager.getSubtitleUrl(track,item.ServerId),Promise.resolve(mediaSource))}function getTracksHtml(tracks,item,mediaSource){tracks=tracks.map(function(t){return"External"!==t.DeliveryMethod||"ass"===t.Codec||"ssa"===t.Codec?Promise.resolve(""):getTextTrackUrl(t,item,mediaSource).then(function(textTrackUrl){var language=t.Language||"und";return'\n'})});return Promise.all(tracks).then(function(trackTags){return trackTags.join("")})}function containsHlsTextTracks(tracks){return 0{var clock=currentClock;if(clock)try{clock.seek(timeMs/1e3)}catch(err){console.log("Error in libjass: "+err)}else{var trackEvents=currentTrackEvents;if(trackEvents){var seconds=timeMs/1e3,activeCues=[];for(let i=0;i=seconds){activeCues.push(currentTrackEvent);break}}renderCues(instance,activeCues)}}})(self,time)),events.trigger(self,"timeupdate"))}function onVolumeChange(){appSettings.volume(100*this.volume),events.trigger(self,"volumechange")}function onRateChange(){events.trigger(self,"playbackratechange")}function setInitialSubtitleTrack(){var index=subtitleTrackIndexToSetOnPlaying;null!=index&&(console.log("setInitialSubtitleTrack"),setCurrentTrackElement(self._mediaElement,index,self._currentPlayOptions))}this.webVTTStyleOptions={},self.play=function(options,signal){if(signal.aborted){let reason=signal.reason;return reason||((reason=new Error("Aborted")).name="AbortError"),Promise.reject(reason)}var promise=options.fullscreen?appRouter.showVideoOsd():Promise.resolve();self._started=!1,self._timeUpdated=!1,self._currentTime=null,self._hlsPlayer&&self.stopInternal(!0,!1,!1);let elem=(()=>{let dlg=document.querySelector(".htmlVideoPlayerContainer"),videoElement=(dlg||((dlg=document.createElement("div")).classList.add("htmlVideoPlayerContainer"),document.body.insertBefore(dlg,document.body.firstChild),videoDialog=dlg),dlg.querySelector("video"));if(!videoElement){let cssClass="htmlvideoplayer";browser.edge&&(cssClass+=" htmlvideoplayer-edge"),dlg.insertAdjacentHTML("beforeend",''),(videoElement=dlg.querySelector("video")).addEventListener("timeupdate",onTimeUpdate),videoElement.addEventListener("ended",onEnded),videoElement.addEventListener("volumechange",onVolumeChange),videoElement.addEventListener("pause",onPause),videoElement.addEventListener("playing",onPlaying),videoElement.textTracks&&videoElement.textTracks.addEventListener&&(videoElement.textTracks.addEventListener("addtrack",onAddTrack),videoElement.textTracks.addEventListener("removetrack",onRemoveTrack)),videoElement.addEventListener("play",onPlay),videoElement.addEventListener("click",onClick),videoElement.addEventListener("dblclick",onDblClick),videoElement.addEventListener("ratechange",onRateChange),browser.chromecast||videoElement.classList.add("moveUpSubtitles"),self._mediaElement=videoElement,browser.chromecast&&(cast.framework.CastReceiverContext.getInstance().getPlayerManager().setMediaElement(videoElement),self.bindMediaManagerEvents())}return videoElement.volume=appSettings.volume()/100,videoElement})();return promise.then(function(){if(signal.aborted){let reason=signal.reason;return reason||((reason=new Error("Aborted")).name="AbortError"),Promise.reject(reason)}return((elem,options)=>{htmlMediaHelper.removeErrorEventListener(elem);let url=options.url,tracks=(browser.ps4||(seconds=(options.playerStartPositionTicks||0)/1e7)&&(url+="#t="+seconds),console.log("playing url: "+url),setCurrentTrackElement(elem,-1,options),elem.innerHTML="",htmlMediaHelper.destroyHlsPlayer(self),htmlMediaHelper.destroyCastPlayer(self),getMediaStreamSubtitleTracks(options.mediaSource));null!=(subtitleTrackIndexToSetOnPlaying=null==options.mediaSource.DefaultSubtitleStreamIndex?-1:options.mediaSource.DefaultSubtitleStreamIndex)&&0<=subtitleTrackIndexToSetOnPlaying&&((seconds=((mediaStreams,index)=>{for(let i=0,length=mediaStreams.length;i{if(!mediaSource.IsLocal||track.IsExternal){var format=(track.Codec||"").toLowerCase();if("ssa"===format||"ass"===format)return((videoElement,track,item,mediaSource)=>{var supportedOnNativeLG=isNativeLG&&browser.sdkVersion&&5<=browser.sdkVersion;(window.Worker&&(()=>{var elem=document.createElement("canvas");return elem.getContext&&elem.getContext("2d")})()&&(!isNativeLG||supportedOnNativeLG)?(videoElement,track,item,mediaSource)=>{getTextTrackUrl(track,item,mediaSource).then(function(textTrackUrl){Promise.all([fetchSubtitleContent(textTrackUrl,!0),Emby.importModule("./bower_components/javascriptsubtitlesoctopus/dist/subtitles-octopus.js"),loadWebVTT()]).then(function(responses){var subContent=responses[0],canvasParent=(ensureCustomSubtitlesElement(videoElement,!1),self.videoSubtitlesElem);canvasParent.classList.add("htmlvideo-subtitles-canvas-parent","flex","align-items-flex-start","justify-content-center");let canvas=canvasParent.querySelector("canvas");canvas||((canvas=document.createElement("canvas")).classList.add("htmlvideo-subtitles-canvas"),canvasParent.appendChild(canvas));responses=responses[1];self.currentSubtitlesOctopus=new responses({video:videoElement,subUrl:subContent?null:textTrackUrl,subContent:subContent,workerUrl:appRouter.baseUrl()+"/bower_components/javascriptsubtitlesoctopus/dist/subtitles-octopus-worker.js",legacyWorkerUrl:appRouter.baseUrl()+"/bower_components/javascriptsubtitlesoctopus/dist/subtitles-octopus-worker-legacy.js",fonts:(track=>{var fonts=[];return(track=>{var langsNotNeedingFont;return!(track=(track.Language||"").toLowerCase())||!(langsNotNeedingFont=["dut","nld","nl","eng","en","en-us","en-gb","fin","fi","fre","fra","fr","ger","deu","de","heb","he","hun","hu","ita","it","nor","no","pol","pl","por","pt","pob","pt-br","rus","ru","spa","es","es-mx","es-419","swe","sv"]).includes(track)&&!langsNotNeedingFont.includes(track.split("-")[0])})(track)&&fonts.push(appRouter.baseUrl()+"/modules/fonts/GoNotoKurrent.woff2"),fonts})(track),onError:function(){htmlMediaHelper.onErrorInternal(self,"mediadecodeerror")},lossyRender:null!=window.createImageBitmap,detectAlphaBug:!browser.chromecast,canvas:canvas,canvasParent:canvasParent}),self._resizeObserver||(self._resizeObserver=new ResizeObserver(onVideoResize,{}),self._resizeObserver.observe(videoElement))})})}:(videoElement,track,item,mediaSource)=>{let rendererSettings={enableSvg:!1};Emby.importModule("./modules/libjass/libjass.js").then(function(libjass){getTextTrackUrl(track,item,mediaSource).then(function(textTrackUrl){libjass.ASS.fromUrl(textTrackUrl).then(function(ass){var clock=new libjass.renderers.ManualClock;currentClock=clock;let renderer=new libjass.renderers.WebRenderer(ass,clock,videoElement.parentNode,rendererSettings);(currentAssRenderer=renderer).addEventListener("ready",function(){try{renderer.resize(videoElement.offsetWidth,videoElement.offsetHeight,0,0),self._resizeObserver||(self._resizeObserver=new ResizeObserver(onVideoResize,{}),self._resizeObserver.observe(videoElement))}catch(ex){}})},function(e){htmlMediaHelper.onErrorInternal(self,"mediadecodeerror")})})})})(videoElement,track,item,mediaSource)})(videoElement,track,item,mediaSource)}if((()=>!!(isNativeLG&&browser.sdkVersion&&browser.sdkVersion<3))())((videoElement,track,item,mediaSource)=>{fetchVttSubtitles(track,item,mediaSource).then(function(cues){ensureCustomSubtitlesElement(videoElement,!0),currentTrackEvents=cues})})(videoElement,track,item,mediaSource);else{let trackElement=null;var expectedId="manualTrack"+track.Index,allTracks=videoElement.textTracks;let i,length;for(i=0;i{let html=selector+"::cue {";html=html+appearance.text.map(function(s){return s.name+":"+s.value+" !important;"}).join("")+"}";for(let i=0,length=appearance.text.length;i{var list=[];for(let i=0,length=tracks.length;i=filteredTextTracks.length?elemTextTracks:filteredTextTracks)[targetIndex];console.log("marking track hidden: "+currentPlayOptions.id+", language: "+currentPlayOptions.language+", kind: "+currentPlayOptions.kind+", label: "+currentPlayOptions.label),currentPlayOptions.mode="hidden",found=!0,addCueEvents(mediaElement,currentPlayOptions)}found||-1===targetIndex||console.log("could not find text track for selection. "+elemTextTrackslength+" total tracks")}}}self.destroyCustomTrack=destroyCustomTrack}Object.assign(HtmlVideoPlayer.prototype,BaseHtmlPlayer.prototype);let supportedFeatures;function getSupportedFeatures(){var video,list=[];return!isNativeLG&&((video=document.createElement("video")).webkitSupportsPresentationMode&&"function"==typeof video.webkitSetPresentationMode&&list.push("PictureInPicture"),document.pictureInPictureEnabled||window.Windows&&Windows.UI.ViewManagement.ApplicationView.getForCurrentView().isViewModeSupported(Windows.UI.ViewManagement.ApplicationViewMode.compactOverlay))&&list.push("PictureInPicture"),CSS.supports("object-fit","cover")&&list.push("SetAspectRatio"),list.push("SetSubtitleOffset"),isNativeLG||list.push("SetPlaybackRate"),list}function onPictureInPictureError(err){console.log("Picture in picture error: "+err.toString())}function setSubtitleOffsetIntoCues(cues,val){val/=1e3;for(let i=0,length=cues.length;i