1 line
6.2 KiB
JavaScript
1 line
6.2 KiB
JavaScript
|
|
import connectionManager from"./../modules/emby-apiclient/connectionmanager.js";import listView from"./../modules/listview/listview.js";import registrationServices from"./../modules/registrationservices/registrationservices.js";import globalize from"./../modules/common/globalize.js";import inputManager from"./../modules/common/inputmanager.js";import layoutManager from"./../modules/layoutmanager.js";import"./../modules/emby-elements/emby-scroller/emby-scroller.js";import"./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js";import focusManager from"./../modules/focusmanager.js";require(["css!videoosd/lyrics.css"]);let FocusScrollOffset="-40px";function buildDefaultLayout(parent,options){var html="";let scrollerSliderClass="focuscontainer navout-up navout-down scrollSlider flex-grow flex-direction-column padded-left padded-right",itemsContainerClass="";layoutManager.tv||(scrollerSliderClass+=" padded-top",itemsContainerClass+=" padded-bottom");var allownativesmoothscroll=!layoutManager.tv,html=(html=(html+='<div is="emby-scroller" class="flex flex-grow lyricsScroller" data-mousewheel="true" data-horizontal="false" data-forcescrollbar="true" data-focusscroll="start" data-focusscrolloffset="'+FocusScrollOffset+'" data-allownativesmoothscroll="'+allownativesmoothscroll+'" data-dualscroll="'+(layoutManager.tv?"false":"true")+'">')+('<div class="'+scrollerSliderClass+'">'))+('<div is="emby-itemscontainer" class="vertical-list itemsContainer osdLyricsItemsContainer'+itemsContainerClass+'">');parent.innerHTML=html=(html+="</div>")+"</div>"+"</div>"}function getListViewOptions(){var options={fields:["Text"],action:"seektoposition",image:!1,moreButton:!1,highlight:!1,verticalPadding:!1,multiSelect:!1,contextMenu:!1,mediaInfo:!1,enableUserDataButtons:!1,draggable:!1,draggableXActions:!1,itemClass:"lyricsItem secondaryText"};return options}function getListOptions(items){return{renderer:listView,options:getListViewOptions(),virtualScrollLayout:"vertical-grid"}}function normalizeTrackEvents(trackEvents,item,apiClient){for(let i=0,length=trackEvents.length;i<length;i++){var trackEvent=trackEvents[i];trackEvent.Id=item.Id+"_lyrics_"+i,trackEvent.Type="LyricsLine",trackEvent.ServerId=apiClient.serverId()}}function getPremiereLyrics(item,apiClient){var trackEvents=[];return trackEvents.push({Text:globalize.translate("Lyrics")}),trackEvents.push({Text:globalize.translate("MessageUnlockAppWithSupporter")}),normalizeTrackEvents(trackEvents,item,apiClient),trackEvents}function getItems(query){return this.getItemsInternal().then(function(items){var totalRecordCount=items.length;return{TotalRecordCount:totalRecordCount,Items:items}})}function onInputCommand(e){switch(e.detail.command){case"up":case"down":this.lastDirectionalInput=Date.now(),e.stopPropagation();break;case"left":case"right":e.stopPropagation()}}function LyricsRenderer(options){var parent=(this.options=options).parent,options=(inputManager.on(parent,onInputCommand.bind(this)),buildDefaultLayout(parent,options),parent.querySelector(".osdLyricsItemsContainer"));options.fetchData=getItems.bind(this),options.virtualChunkSize=30,options.getListOptions=getListOptions.bind(this),this.itemsContainer=options,this.currentIndex=-1,this.scroller=parent.querySelector(".lyricsScroller")}function onUpgraded(e){e.target.resume(this)}LyricsRenderer.prototype.getItemsInternal=function(){this.needsRefresh=!1;let item=this.currentItem;if(!item)return Promise.resolve([]);let apiClient=connectionManager.getApiClient(item),mediaSource=item.MediaSources[0];if(!mediaSource)return Promise.resolve([]);let track=mediaSource.MediaStreams.filter(function(t){return"Subtitle"===t.Type&&t.Index===mediaSource.DefaultSubtitleStreamIndex})[0];return track?registrationServices.validateFeature("dvr",{showDialog:!1,viewOnly:!0}).then(function(){var url=apiClient.getUrl("Items/"+item.Id+"/"+mediaSource.Id+"/Subtitles/"+track.Index+"/Stream.js",{});return apiClient.getJSON(url).then(function(result){result=result.TrackEvents;return normalizeTrackEvents(result,item,apiClient),result})},function(){return
|