1 line
No EOL
9 KiB
JavaScript
1 line
No EOL
9 KiB
JavaScript
import connectionManager from"./../emby-apiclient/connectionmanager.js";import dom from"./../dom.js";import globalize from"./../common/globalize.js";import layoutManager from"./../layoutmanager.js";import loading from"./../loading/loading.js";import dialogHelper from"./../dialoghelper/dialoghelper.js";import cardBuilder from"./../cardbuilder/cardbuilder.js";import focusManager from"./../focusmanager.js";import{appHost}from"./../common/servicelocator.js";import"./../emby-elements/emby-button/emby-button.js";import"./../emby-elements/emby-scroller/emby-scroller.js";import"./../emby-elements/emby-button/paper-icon-button-light.js";import"./../emby-elements/emby-dialogclosebutton/emby-dialogclosebutton.js";require(["formDialogStyle","css!modules/imageeditor/imageeditor.css"]);let currentItemId,currentServerId,hasChanges=!1;function getItemInfo(){loading.show();let apiClient=connectionManager.getApiClient(currentServerId);return apiClient.getItem(apiClient.getCurrentUserId(),currentItemId,{ExcludeFields:"Chapters,MediaSources,MediaStreams,People,Overview,Subviews"}).then(function(item){return apiClient.getItemImageInfos(currentItemId).then(function(imageInfos){return apiClient.getRemoteImageProviders({itemId:currentItemId}).then(function(providers){providers={item:item,imageInfos:imageInfos,providers:providers};return loading.hide(),providers})})})}function addListeners(container,className,eventName,fn){container.addEventListener(eventName,function(e){var elem=e.target.closest("."+className);elem&&fn.call(elem,e)})}function getImageUrl(item,apiClient,type,index,options){(options=options||{}).type=type,options.index=index;let itemId;return itemId="Backdrop"===type?(options.tag=item.BackdropImageTags[index],item.Id||item.ItemId):"Primary"===type?(options.tag=item.PrimaryImageTag||item.ImageTags[type],item.PrimaryImageItemId||item.Id||item.ItemId):(options.tag=item.ImageTags[type],item.Id||item.ItemId),options.tag?apiClient.getImageUrl(itemId,options):null}function setImageProperties(image,itemInfo,apiClient){var item=itemInfo.item;image.Type="ItemImage",image.ServerId=item.ServerId,image.Id=item.Id+"_ItemImage_"+image.imageType+"_"+(image.ImageIndex||0),image.ItemId=item.Id,image.OwnerItem=item,image.Providers=itemInfo.providers,image.Name=globalize.translate(image.ImageType),"Backdrop"===image.ImageType?image.ImageUrl=getImageUrl(item,apiClient,image.ImageType,image.ImageIndex):(image.ImageTags={},image.ImageTags[image.ImageType]=item.ImageTags?item.ImageTags[image.ImageType]:null,"Primary"!==image.ImageType||image.ImageTags[image.ImageType]?image.ImageTags[image.ImageType]&&(image.ImageUrl=getImageUrl(item,apiClient,image.ImageType)):(image.PrimaryImageTag=item.PrimaryImageTag,image.PrimaryImageItemId=item.PrimaryImageItemId),image.ImageTag=image.ImageTags[image.ImageType],"Primary"===image.ImageType&&"TvChannel"===itemInfo.item.Type&&(image.Name=globalize.translate("LogoDark")))}function getImage(images,type){for(let i=0,length=images.length;i<length;i++){var image=images[i];if(image.ImageType===type)return image}return null}function getStandardImages(){return getItemInfo().then(function(itemInfo){var item=itemInfo.item,imageInfos=itemInfo.imageInfos,types=["Primary"],apiClient=(("TvChannel"!==item.Type||item.ImageTags&&item.ImageTags.Logo)&&types.push("Logo"),connectionManager.getApiClient(item)),result=("TvChannel"===item.Type&&(types.push("LogoLight"),types.push("LogoLightColor")),types.push("Thumb"),types.push("Banner"),types.push("Disc"),types.push("Art"),"Game"===item.Type&&types.push("Box"),[]);for(let i=0,length=types.length;i<length;i++){var imageInfo=getImage(imageInfos,types[i])||{ImageType:types[i]};setImageProperties(imageInfo,itemInfo,apiClient),result.push(imageInfo)}return{Items:result,TotalRecordCount:result.length}})}function getBackdropImages(){return getItemInfo().then(function(itemInfo){var item=itemInfo.item,imageInfos=itemInfo.imageInfos.filter(function(t){return"Backdrop"===t.ImageType}),result=[],backdropImageTags=item.BackdropImageTags||[],apiClient=connectionManager.getApiClient(item);for(let i=0,length=imageInfos.length;i<length;i++){var imageInfo=imageInfos[i];imageInfo.ImageTag=backdropImageTags[i],imageInfo.ImageIndex=i,imageInfo.TotalImages=imageInfos.length,setImageProperties(imageInfo,itemInfo,apiClient),result.push(imageInfo)}return{Items:result,TotalRecordCount:result.length}})}function getStandardImagesListOptions(){var fields=["ItemImageName"];return fields.push("Resolution"),layoutManager.tv||fields.push("ImageEditorStandardButtons"),{renderer:cardBuilder,options:{fields:fields,shape:"backdrop",multiSelect:!1,defaultBackground:!0,cardLayout:!0,cardClass:"imageEditorCard",cardDefaultTextClass:"imageEditorCardDefaultText",action:layoutManager.tv?"menu":"none",addImageSizeToUrl:!0,textLinks:!1,cardFooterAside:!1,draggable:!1},virtualScrollLayout:"vertical-grid"}}function getBackdropImagesListOptions(items){var fields=[],items=(fields.push("FilenameOrName"),fields.push("Resolution"),layoutManager.tv||fields.push("ImageEditorBackdropButtons"),1<items.length);return{renderer:cardBuilder,options:{fields:fields,shape:"backdrop",multiSelect:!1,cardClass:"imageEditorCard",cardDefaultTextClass:"imageEditorCardDefaultText",defaultBackground:!0,cardLayout:!0,imageFallback:!1,action:layoutManager.tv?"menu":"none",addImageSizeToUrl:!0,textLinks:!1,cardFooterAside:!1,dragReorder:items,draggable:items},virtualScrollLayout:"vertical-grid"}}function refreshItemContainers(context){var standardImagesItemsContainer=context.querySelector(".images"),backdropImagesItemsContainer=context.querySelector(".backdrops"),promises=[];return promises.push(standardImagesItemsContainer.resume({refresh:!0})),promises.push(backdropImagesItemsContainer.resume({refresh:!0})),Promise.all(promises).then(function(){focusManager.autoFocus(context,{skipIfNotEnabled:!0})})}function onItemChanged(context){refreshItemContainers(context)}function showImageDownloader(context,imageType){Emby.importModule("./modules/imagedownloader/imagedownloader.js").then(function(ImageDownloader){getItemInfo().then(function(itemInfo){(new ImageDownloader).show({item:itemInfo.item,imageType:imageType}).then(function(){hasChanges=!0,onItemChanged(context)})})})}function onAddButtonClick(e){let imageType=this.getAttribute("data-imagetype");Emby.importModule("./modules/imageuploader/imageuploader.js").then(function(imageUploader){getItemInfo().then(function(itemInfo){imageUploader.show({imageType:imageType,item:itemInfo.item}).then(function(hasChanged){hasChanged&&(hasChanges=!0,onItemChanged(e.target.closest(".formDialog")))})})})}function initEditor(context,options,itemInfo){addListeners(context,"btnBrowseAllImages","click",function(){showImageDownloader(context,this.getAttribute("data-imagetype"))}),addListeners(context,"btnAddImage","click",onAddButtonClick);var standardImagesItemsContainer=context.querySelector(".images"),standardImagesItemsContainer=(standardImagesItemsContainer.fetchData=getStandardImages,standardImagesItemsContainer.getListOptions=getStandardImagesListOptions,standardImagesItemsContainer.monitorItems=[itemInfo.item.Id],standardImagesItemsContainer.setAttribute("data-monitorids",itemInfo.item.Id),context.querySelector(".backdrops"));standardImagesItemsContainer.fetchData=getBackdropImages,standardImagesItemsContainer.getListOptions=getBackdropImagesListOptions,standardImagesItemsContainer.setAttribute("data-monitorids",itemInfo.item.Id),appHost.supports("fileinput")?context.querySelector(".btnAddImage").classList.remove("hide"):context.querySelector(".btnAddImage").classList.add("hide"),itemInfo.providers.length?context.querySelector(".btnBrowseAllImages").classList.remove("hide"):context.querySelector(".btnBrowseAllImages").classList.add("hide"),"TvChannel"===itemInfo.item.Type?context.querySelector(".tvChannelHelp").classList.remove("hide"):context.querySelector(".tvChannelHelp").classList.add("hide")}function onItemsContainerUpgraded(){refreshItemContainers(this)}function onOpened(){var standardImagesItemsContainer=this.querySelector(".images");standardImagesItemsContainer.resume?refreshItemContainers(this):dom.addEventListener(standardImagesItemsContainer,"upgraded",onItemsContainerUpgraded,{once:!0})}function showEditor(options,resolve,reject){return currentItemId=options.itemId,currentServerId=options.serverId,loading.show(),Promise.all([require(["text!modules/imageeditor/imageeditor.template.html"]),getItemInfo()]).then(function(responses){var template=responses[0][0],responses=responses[1],dialogOptions={removeOnClose:!0,scrollY:!1},dialogOptions=(layoutManager.tv?dialogOptions.size="fullscreen":dialogOptions.size="fullscreen-border",dialogHelper.createDialog(dialogOptions));return dialogOptions.classList.add("formDialog"),dialogOptions.innerHTML=globalize.translateDocument(template,"sharedcomponents"),initEditor(dialogOptions,options,responses),dialogOptions.addEventListener("opened",onOpened),dialogHelper.open(dialogOptions).then(function(){return currentItemId=null,currentServerId=null,loading.hide(),hasChanges?Promise.resolve():Promise.reject()})})}export default{show:function(options){return hasChanges=!1,showEditor(options)}}; |