EmbyCrackedClient/web/modules/itemidentifier/itemidentifier.js
2025-06-25 11:46:04 +08:00

1 line
No EOL
11 KiB
JavaScript

import dialogHelper from"./../dialoghelper/dialoghelper.js";import dom from"./../dom.js";import cardBuilder from"./../cardbuilder/cardbuilder.js";import listView from"./../listview/listview.js";import loading from"./../loading/loading.js";import connectionManager from"./../emby-apiclient/connectionmanager.js";import focusManager from"./../focusmanager.js";import globalize from"./../common/globalize.js";import{appHost}from"./../common/servicelocator.js";import textEncoding from"./../common/textencoding.js";import layoutManager from"./../layoutmanager.js";import"./../emby-elements/emby-input/emby-input.js";import"./../emby-elements/emby-button/paper-icon-button-light.js";import"./../emby-elements/emby-scroller/emby-scroller.js";import"./../emby-elements/emby-checkbox/emby-checkbox.js";import"./../emby-elements/emby-dialogclosebutton/emby-dialogclosebutton.js";import confirm from"./../common/dialogs/confirm.js";function showIdentifyOptions(instance,page,identifyResult){var identifyOptionsForm=page.querySelector(".identifyOptionsForm"),identifyOptionsForm=(page.querySelector(".popupIdentifyForm").classList.add("hide"),page.querySelector(".identificationSearchResults").classList.add("hide"),identifyOptionsForm.classList.remove("hide"),page.querySelector(".chkIdentifyReplaceImages").checked=!0,[]);identifyOptionsForm.push(identifyResult.Name),identifyResult.ProductionYear&&identifyOptionsForm.push(identifyResult.ProductionYear),identifyResult.GameSystem&&identifyOptionsForm.push(identifyResult.GameSystem);let resultHtml=identifyOptionsForm.join("<br/>");identifyResult.ImageUrl&&(identifyOptionsForm=getSearchImageDisplayUrl(connectionManager.getApiClient(instance.options.item),identifyResult.ImageUrl,identifyResult.SearchProviderName),resultHtml='<div class="flex align-items-center"><img src="'+identifyOptionsForm+'" style="max-height:240px;" /><div style="margin: 0 1em;">'+resultHtml+"</div>"),page.querySelector(".selectedSearchResult").innerHTML=resultHtml,autoFocus.call(instance)}function getSearchImageDisplayUrl(apiClient,url,provider){return apiClient.getUrl("Items/RemoteSearch/Image",{imageUrl:url,ProviderName:provider,api_key:apiClient.accessToken()})}function showIdentificationForm(dlg,item){var apiClient=connectionManager.getApiClient(item);apiClient.getJSON(apiClient.getUrl("Items/"+item.Id+"/ExternalIdInfos",{IsSupportedAsIdentifier:!0})).then(function(idList){let html="";for(let i=0,length=idList.length;i<length;i++){var idInfo=idList[i],idLabel=(html+='<div class="inputContainer">',globalize.translate("LabelDynamicExternalId").replace("{0}",idInfo.Name));html+='<input is="emby-input" class="txtLookupId" data-providerkey="'+idInfo.Key+'" label="'+idLabel+'"/>',idInfo.Website&&(html+='<div class="fieldDescription">',appHost.supports("targetblank")&&appHost.supports("externallinks")?html+='<a is="emby-linkbutton" class="button-link" href="'+idInfo.Website+'" target="_blank">'+idInfo.Website+"</a>":html+=textEncoding.htmlEncode(idInfo.Website),html+="</div>"),html+="</div>"}dlg.querySelector(".txtLookupName").value="","Person"===item.Type||"BoxSet"===item.Type?dlg.querySelector(".fldLookupYear").classList.add("hide"):dlg.querySelector(".fldLookupYear").classList.remove("hide"),dlg.querySelector(".txtLookupYear").value="",dlg.querySelector(".identifyProviderIds").innerHTML=html,dlg.querySelector(".formDialogHeaderTitle").innerHTML=globalize.translate("Identify")})}function onDialogClosed(){loading.hide();var hasChanges=this.hasChanges;return this.cleanup(),hasChanges?Promise.resolve(this.currentSearchResult):Promise.reject()}function showIdentificationFormFindNew(dlg,item){dlg.querySelector(".txtLookupName").value=item.Name||"","Person"===item.Type||"BoxSet"===item.Type?(dlg.querySelector(".fldLookupYear").classList.add("hide"),dlg.querySelector(".txtLookupYear").value=""):(dlg.querySelector(".fldLookupYear").classList.remove("hide"),dlg.querySelector(".txtLookupYear").value=item.ProductionYear||""),dlg.querySelector(".formDialogHeaderTitle").innerHTML=globalize.translate("Search")}function onCardAction(e){var dlg,e=e.detail.item;this.currentSearchResult=e,loading.hide(),this.options.item.Id?(dlg=this.dlg)&&showIdentifyOptions(this,dlg,e):(this.hasChanges=!0,this.closeDialog())}function autoFocus(){var dlg=this.dlg;loading.hide(),focusManager.autoFocus(dlg,{skipIfNotEnabled:!0})}function ItemIdentifier(options){this.options=options}function normalizeSearchResult(item){var type=this.options.item.Type;item.Type=type,item.IsFolder="Series"===type||"MusicAlbum"===type,item.PrimaryImageAspectRatio="Movie"===type||"Series"===type||"Trailer"===type||"BoxSet"===type||"Person"===type?2/3:1,item.AlbumArtist&&(item.AlbumArtists=[item.AlbumArtist]),item.ShortOverview=item.DisambiguationComment}function enableListViewResults(item){return"MusicAlbum"===item.Type}function onItemsContainerUpgraded(){this.itemsContainer.resume({refresh:!1}).then(autoFocus.bind(this))}function onOpened(){var itemsContainer=this.itemsContainer;itemsContainer.resume?onItemsContainerUpgraded.call(this):dom.addEventListener(itemsContainer,"upgraded",onItemsContainerUpgraded.bind(this),{once:!0})}function mapToId(item){return item.Id}require(["formDialogStyle","material-icons"]),ItemIdentifier.prototype.afterRefresh=function(result){result.length?this.dlg.querySelector(".noResultsFound").classList.add("hide"):this.dlg.querySelector(".noResultsFound").classList.remove("hide")},ItemIdentifier.prototype.getItems=function(query){loading.show();var dlg=this.dlg;if(!dlg)return Promise.resolve([]);var item=this.options.item,apiClient=connectionManager.getApiClient(item);let lookupInfo={ProviderIds:{}},i,length;var identifyField=dlg.querySelectorAll(".identifyField");let value;for(i=0,length=identifyField.length;i<length;i++)(value=identifyField[i].value)&&("number"===identifyField[i].type&&(value=parseInt(value)),lookupInfo[identifyField[i].getAttribute("data-lookup")]=value);let hasId=!1;var txtLookupId=dlg.querySelectorAll(".txtLookupId");for(i=0,length=txtLookupId.length;i<length;i++)(value=txtLookupId[i].value)&&(hasId=!0,lookupInfo.ProviderIds[txtLookupId[i].getAttribute("data-providerkey")]=value);if(!hasId&&!lookupInfo.Name)return Promise.resolve([]);item.GameSystem&&(lookupInfo.GameSystem=item.GameSystem),lookupInfo={SearchInfo:lookupInfo},item.Id?lookupInfo.ItemId=item.Id:lookupInfo.IncludeDisabledProviders=!0;let instance=this;return apiClient.ajax({type:"POST",url:apiClient.getUrl("Items/RemoteSearch/"+item.Type),data:JSON.stringify(lookupInfo),contentType:"application/json",dataType:"json"}).then(function(results){return results.forEach(normalizeSearchResult.bind(instance)),results})},ItemIdentifier.prototype.getCardOptions=function(items){var type=this.options.item.Type,fields=["Name"],type=("Person"!==type&&"MusicArtist"!==type&&fields.push("ProductionYear"),"Game"!==type&&"MusicAlbum"!==type&&"MusicVideo"!==type||fields.push("ParentName"),{shape:"auto",fields:fields,overlayPlayButton:!1,multiSelect:!1,contextMenu:!1,hoverMenu:!1,action:"custom",textLinks:!1,lazy:2,draggable:!1});return type},ItemIdentifier.prototype.getListViewOptions=function(items){var type=this.options.item.Type,fields=["Name","ShortOverview"],fields=("Person"!==type&&"MusicArtist"!==type&&fields.push("ProductionYear"),"Game"!==type&&"MusicAlbum"!==type&&"MusicVideo"!==type||fields.push("ParentName"),{enableDefaultIcon:!0,action:"custom",fields:fields,artist:"MusicAlbum"===type||"MusicVideo"===type,draggable:!1,draggableXActions:!1,multiSelect:!1,contextMenu:!1,hoverPlayButton:!1,imageSize:"medium"});return fields},ItemIdentifier.prototype.getListOptions=function(items){return enableListViewResults(this.options.item)?{renderer:listView,options:this.getListViewOptions(items)}:{renderer:cardBuilder,options:this.getCardOptions(items),virtualScrollLayout:"vertical-grid"}},ItemIdentifier.prototype.show=function(){let item=this.options.item,instance=this;return require(["text!modules/itemidentifier/itemidentifier.template.html"]).then(function(responses){var responses=responses[0],dialogOptions={removeOnClose:!0,scrollY:!1,autoFocus:!1},dialogOptions=(layoutManager.tv?dialogOptions.size="fullscreen":dialogOptions.size="fullscreen-border",dialogHelper.createDialog(dialogOptions)),html=((instance.dlg=dialogOptions).classList.add("formDialog"),""),responses=(html+=globalize.translateDocument(responses,"sharedcomponents"),dialogOptions.innerHTML=html,item.Path?dialogOptions.querySelector(".itemPathContainer").classList.remove("hide"):dialogOptions.querySelector(".itemPathContainer").classList.add("hide"),dialogOptions.querySelector(".itemPath").innerHTML=item.Path||"",dialogOptions.querySelector(".popupIdentifyForm").addEventListener("submit",instance.onIdentifyFormSubmit.bind(instance)),dialogOptions.querySelector(".identifyOptionsForm").addEventListener("submit",instance.onResultConfirmed.bind(instance)),dialogOptions.classList.add("identifyDialog"),(item.Id?showIdentificationForm:showIdentificationFormFindNew)(dialogOptions,item),dialogOptions.querySelector(".itemsContainer")),html=(enableListViewResults(item)&&(responses.classList.remove("vertical-wrap"),responses.classList.add("vertical-list"),dialogOptions.querySelector(".sectionTitle-cards").classList.remove("sectionTitle-cards")),responses.addEventListener("action-null",onCardAction.bind(instance)),responses.fetchData=instance.getItems.bind(instance),responses.afterRefresh=instance.afterRefresh.bind(instance),responses.getListOptions=instance.getListOptions.bind(instance),instance.itemsContainer=responses,dialogOptions.addEventListener("opened",onOpened.bind(instance)),onDialogClosed.bind(instance));return dialogHelper.open(dialogOptions).then(html,html)})},ItemIdentifier.prototype.onIdentifyFormSubmit=function(e){e.preventDefault(),e.stopPropagation();e=this.dlg,e&&(e.querySelector(".popupIdentifyForm").classList.add("hide"),e.querySelector(".identificationSearchResults").classList.remove("hide"),e.querySelector(".identifyOptionsForm").classList.add("hide")),e=this.itemsContainer;return e&&e.refreshItems().then(autoFocus.bind(this)),!1},ItemIdentifier.prototype.onResultConfirmed=function(e){e.preventDefault(),e.stopPropagation();let dlg=this.dlg;if(dlg){loading.show();e=connectionManager.getApiClient(this.options.item);let instance=this;e.applyRemoteSearchResult(this.options.item.Id,instance.currentSearchResult,{ReplaceAllImages:dlg.querySelector(".chkIdentifyReplaceImages").checked}).then(function(){instance.hasChanges=!0,loading.hide(),dialogHelper.close(dlg)},function(){loading.hide()})}return!1},ItemIdentifier.prototype.closeDialog=function(){var dlg=this.dlg;dlg&&dialogHelper.close(dlg)},ItemIdentifier.prototype.cleanup=function(){this.options=null,this.dlg=null,this.itemsContainer=null};export default{show:function(item){return new ItemIdentifier({item:item}).show()},showFindNew:function(itemName,itemYear,itemType,serverId){return new ItemIdentifier({item:{Name:itemName,ProductionYear:itemYear,Type:itemType,ServerId:serverId}}).show()},resetMetadata:function(items){confirm({title:globalize.translate("HeaderRemoveIdentification"),text:globalize.translate("ResetMetadataConfirmation"),confirmText:globalize.translate("HeaderRemoveIdentification"),primaryButton:"cancel"}).then(function(){var apiClient=connectionManager.getApiClient(items[0]),options={ItemIds:items.map(mapToId).join(",")};return loading.show(),apiClient.resetMetadata(options).then(function(result){return loading.hide(),Promise.resolve(result)},function(err){return loading.hide(),Promise.reject(err)})})}};