1 line
No EOL
5.6 KiB
JavaScript
1 line
No EOL
5.6 KiB
JavaScript
import BaseTab from"./../modules/tabbedview/basetab.js";import loading from"./../modules/loading/loading.js";import globalize from"./../modules/common/globalize.js";import"./../modules/emby-elements/emby-input/emby-input.js";import"./../modules/emby-elements/emby-button/emby-button.js";import"./../modules/emby-elements/emby-scroller/emby-scroller.js";import"./../modules/emby-elements/emby-itemscontainer/emby-itemscontainer.js";import cardBuilder from"./../modules/cardbuilder/cardbuilder.js";require(["css!plugins/catalogtab.css"]);let query={TargetSystems:"Server",IsAdult:!1,PackageType:"UserInstalled"},_availablePlugins;function getAvailablePluginForInstalledPlugin(availablePlugins,installedPlugin){return availablePlugins.filter(function(ap){return(installedPlugin.Id||"").toLowerCase()===(ap.guid||"").toLowerCase()})[0]}function setInstalledPluginData(availablePlugins,installedPlugins){for(let i=0,length=installedPlugins.length;i<length;i++){var installedPlugin=installedPlugins[i],availablePlugin=getAvailablePluginForInstalledPlugin(availablePlugins,installedPlugin);availablePlugin&&(availablePlugin.InstalledVersion=installedPlugin.Version)}}function setPluginProperties(plugins,apiClient){for(let i=0,length=plugins.length;i<length;i++){var plugin=plugins[i];plugin.category=plugin.category||"General",plugin.Type="PluginCatalogItem",plugin.Id=plugin.guid,plugin.Name=plugin.name,plugin.ServerId=apiClient.serverId(),plugin.PrimaryImageAspectRatio=16/9,plugin.ImageUrl=plugin.thumbImage}}function sortPlugins(plugins){return plugins.sort(function(a,b){var aName=a.category,bName=b.category;return bName<aName?1:aName<bName?-1:(bName=b.name)<(aName=a.name)?1:aName<bName?-1:0})}function getAvailablePlugins(instance){if(_availablePlugins)return Promise.resolve(_availablePlugins);let apiClient=instance.getApiClient();var instance=apiClient.getAvailablePlugins(query),promise2=apiClient.getInstalledPlugins();return Promise.all([instance,promise2]).then(function(responses){var availablePlugins=responses[0];return setInstalledPluginData(availablePlugins,responses[1]),setPluginProperties(availablePlugins,apiClient),availablePlugins=sortPlugins(availablePlugins),_availablePlugins=availablePlugins})}function getCategories(plugins){var list=[];if(plugins.length){list.push({Name:globalize.translate("HeaderTopPlugins"),Id:"top"});var categories={};for(let i=0,length=plugins.length;i<length;i++){var category=plugins[i].category;categories[category]||(categories[category]=!0,list.push({Name:getHeaderText(category),Id:category}))}}return list}function getCategoryHtml(category){var html="";return(html+='<div class="verticalSection">')+('<h2 class="sectionTitle sectionTitle-cards padded-left padded-right padded-left-page">'+category.Name+"</h2>")+'<div is="emby-scroller" class="padded-top-focusscale padded-bottom-focusscale padded-left padded-left-page padded-right" data-mousewheel="false" data-focusscroll="true">'+('<div is="emby-itemscontainer" data-focusabletype="nearest" class="scrollSlider itemsContainer focuscontainer-x focusable" data-category="'+category.Id+'">')+"</div>"+"</div>"+"</div>"}function getTopPlugins(plugins){return(plugins=plugins.slice(0).sort(function(a,b){return a.installs>b.installs?-1:a.installs<b.installs||(b=b.name)<(a=a.name)?1:a<b?-1:0}).filter(isUserInstalledPlugin)).length=Math.min(plugins.length,15),plugins}function getCategoryItems(){var itemsContainer=this.itemsContainer,instance=this.instance;let category=itemsContainer.getAttribute("data-category");return getAvailablePlugins(instance).then(function(plugins){return"top"===category?getTopPlugins(plugins):plugins.filter(function(p){return p.category===category})})}function getCategoryListOptions(){return{renderer:cardBuilder,options:{shape:"auto",fields:["Name","InstalledVersion"],centerText:!0,overlayPlayButton:!1,cardLayout:!1,multiSelect:!1,contextMenu:!1,draggable:!1},virtualScrollLayout:"horizontal-grid"}}function onUpgraded(){this.resume({refresh:!0})}function reloadList(instance){return _availablePlugins=null,loading.show(),getAvailablePlugins(instance).then(function(availablePlugins){var availablePlugins=getCategories(availablePlugins),parentElem=instance.view.querySelector(".catalogMain"),itemsContainers=(parentElem.innerHTML=availablePlugins.map(getCategoryHtml).join(""),parentElem.querySelectorAll(".itemsContainer"));for(let i=0,length=itemsContainers.length;i<length;i++){var itemsContainer=itemsContainers[i];itemsContainer.fetchData=getCategoryItems.bind({itemsContainer:itemsContainer,instance:instance}),itemsContainer.getListOptions=getCategoryListOptions.bind(itemsContainer),itemsContainer.resume?onUpgraded.call(itemsContainer):itemsContainer.addEventListener("upgraded",onUpgraded)}loading.hide()})}function getHeaderText(category){return"Channel"===category?category="Channels":"Theme"===category?category="Themes":"LiveTV"===category?category="LiveTV":"ScreenSaver"===category&&(category="HeaderScreenSavers"),globalize.translate(category)}function isUserInstalledPlugin(plugin){return-1===["02528C96-F727-44D7-BE87-9EEF040758C3","0277E613-3EC0-4360-A3DE-F8AF0AABB5E9","4DCB591C-0FA2-4C5D-A7E5-DABE37164C8B","18CFFD2C-74F5-4EDE-8DAD-BE339443AFE4","C25B3C85-1880-4827-9C72-0FA74314F428","8C6DDB20-18B1-4131-9285-796179A71C0F","96FA50A4-69CE-42AC-B6A3-EF6B3388CCB7"].indexOf(plugin.guid)}function PluginCatalog(view,params){BaseTab.apply(this,arguments)}Object.assign(PluginCatalog.prototype,BaseTab.prototype),PluginCatalog.prototype.onResume=function(options){BaseTab.prototype.onResume.apply(this,arguments),options.refresh&&reloadList(this)},PluginCatalog.prototype.loadTemplate=function(){return require(["text!plugins/catalogtab.html"])};export default PluginCatalog; |