EmbyCrackedClient/web/videoosd/onnowtab.js

5 lines
4.8 KiB
JavaScript
Raw Permalink Normal View History

2025-06-25 11:46:04 +08:00
import BaseTab from"./basetab.js";import cardBuilder from"./../modules/cardbuilder/cardbuilder.js";import userSettings from"./../modules/common/usersettings/usersettings.js";import globalize from"./../modules/common/globalize.js";import layoutManager from"./../modules/layoutmanager.js";import focusManager from"./../modules/focusmanager.js";import inputManager from"./../modules/common/inputmanager.js";function fetchItems(query){var apiClient=this.apiClient;return query=Object.assign({UserId:apiClient.getCurrentUserId(),IsAiring:!0,ImageTypeLimit:1,EnableImageTypes:"Primary,Thumb,Backdrop",Fields:"ProgramPrimaryImageAspectRatio,PrimaryImageAspectRatio",EnableUserData:!1,SortBy:"ChannelNumber,SortName"},query),userSettings.addLiveTvChannelSortingToQuery(query,globalize),apiClient.getLiveTvChannels(query)}function getListOptions(items){var forceBackdrop=!!layoutManager.tv;return{renderer:cardBuilder,options:{preferThumb:forceBackdrop?null:"auto",inheritThumb:!1,shape:forceBackdrop?"backdrop":"auto",overlayPlayButton:!0,contextMenu:!1,multiSelect:!1,programsAsSeries:!1,showCurrentProgramImage:!0,defaultShape:"portrait",action:"play",cardClass:"videoOsd-itemstab-card videoOsd-itemstab-card-threeline",fields:["CurrentProgramName","CurrentProgramParentNameOrName","CurrentProgramTime"],allowBottomPadding:!1,defaultBackground:!0,textLinks:!1,enableFocusScaling:!1},virtualScrollLayout:"horizontal-grid"}}function OnNowTab(view){BaseTab.apply(this,arguments)}Object.assign(OnNowTab.prototype,BaseTab.prototype);let FocusScrollOffset="-padding-inline-start";function scrollToIndex(instance,index,focus,scrollBehavior){instance.itemsContainer.scrollToIndex(index,{offsetLeft:FocusScrollOffset,behavior:scrollBehavior},focus)}function scrollToCurrent(instance,focus,scrollBehavior){var item=instance.item;if(item&&"TvChannel"===item.Type){let itemId=item.Id;item=instance.itemsContainer.indexOfItemId(itemId);-1!==item?scrollToIndex(instance,item,focus,scrollBehavior):fetchItems.call(instance,{Limit:0}).then(function(totalResult){totalResult.TotalRecordCount<=1?scrollToIndex(instance,0,focus,scrollBehavior):fetchItems.call(instance,{StartItemId:itemId,Limit:0}).then(function(result){result=result.TotalRecordCount?Math.max(totalResult.TotalRecordCount-result.TotalRecordCount,0):0;scrollToIndex(instance,result,focus,scrollBehavior)})})}else scrollToIndex(instance,0,focus,scrollBehavior)}function triggerCommand(name,e){e={sourceElement:e.target,repeat:e.repeat,originalEvent:e};inputManager.trigger(name,e)}function onInputCommand(e){var detail=e.detail;switch(detail.command){case"channelup":triggerCommand("rtl"===document.dir?"left":"right",detail.originalEvent||e),e.preventDefault();break;case"channeldown":triggerCommand("rtl"===document.dir?"right":"left",detail.originalEvent||e),e.preventDefault()}}OnNowTab.prototype.loadTemplate=function(){var view=this.view;return view.innerHTML=`
<div is="emby-scroller" data-mousewheel="false" data-focusscroll="start" data-focusscrolloffset="`+FocusScrollOffset+`" class="padded-top-focusscale padded-bottom-focusscale">
<div is="emby-itemscontainer" data-focusabletype="nearest" class="focusable focuscontainer-x scrollSlider itemsContainer videoosd-padded-left videoosd-padded-right" data-refreshinterval="300000" data-virtualscrolllayout="horizontal-grid"></div>
</div>
`,this.itemsContainer=view.querySelector(".itemsContainer"),this.itemsContainer.fetchData=fetchItems.bind(this),this.itemsContainer.getListOptions=getListOptions.bind(this),inputManager.on(this.itemsContainer,onInputCommand),Promise.resolve()},OnNowTab.prototype.scrollToCurrentItem=function(focus,scrollBehavior){this.paused||this.itemsContainer.contains(document.activeElement)||(focus?focusManager.focus(this.itemsContainer):scrollToCurrent(this,focus,scrollBehavior))},OnNowTab.prototype.onResume=function(options){let instance=this;return BaseTab.prototype.onResume.apply(this,arguments).then(function(){var optionsWithoutRefresh=Object.assign(Object.assign({},options),{refresh:!1});let hasFocus=instance.itemsContainer.contains(document.activeElement);return instance.itemsContainer.resume(optionsWithoutRefresh).then(function(){options.refresh?instance.refreshItem():instance.scrollToCurrentItem(hasFocus,"instant")})})},OnNowTab.prototype.refreshItem=function(){BaseTab.prototype.refreshItem.apply(this,arguments);let instance=this,hasFocus=instance.itemsContainer.contains(document.activeElement);return instance.itemsContainer.refreshItems().then(function(){instance.scrollToCurrentItem(hasFocus)})},OnNowTab.prototype.onPause=function(){BaseTab.prototype.onPause.apply(this,arguments),this.itemsContainer.pause()},OnNowTab.prototype.destroy=function(){BaseTab.prototype.destroy.apply(this,arguments),this.itemsContainer=null,this.item=null};export default OnNowTab;