1 line
No EOL
10 KiB
JavaScript
1 line
No EOL
10 KiB
JavaScript
import loading from"./../loading/loading.js";import dialogHelper from"./../dialoghelper/dialoghelper.js";import layoutManager from"./../layoutmanager.js";import focusManager from"./../focusmanager.js";import{appHost}from"./../common/servicelocator.js";import globalize from"./../common/globalize.js";import userSettings from"./../common/usersettings/usersettings.js";import connectionManager from"./../emby-apiclient/connectionmanager.js";import events from"./../emby-apiclient/events.js";import"./../emby-elements/emby-select/emby-select.js";import"./../emby-elements/emby-button/emby-button.js";import"./../emby-elements/emby-checkbox/emby-checkbox.js";import"./../emby-elements/emby-button/paper-icon-button-light.js";import"./../emby-elements/emby-scroller/emby-scroller.js";import"./../emby-elements/emby-itemscontainer/emby-itemscontainer.js";import"./../emby-elements/emby-dialogclosebutton/emby-dialogclosebutton.js";import listView from"./../listview/listview.js";import itemHelper from"./../common/itemhelper.js";import serverNotifications from"./../common/input/api.js";function fillLanguages(context,apiClient,languages){let selectLanguage=context.querySelector(".selectLanguage");selectLanguage.innerHTML=languages.map(function(l){return'<option value="'+l.TwoLetterISOLanguageName+'">'+l.DisplayName+"</option>"});context=userSettings.get("subtitleeditor-language");context?selectLanguage.value=context:apiClient.getCurrentUser().then(function(user){user=user.Configuration.SubtitleLanguagePreference;user&&(selectLanguage.value=user)})}function getSubtitleSearchResults(){var context=this.context,apiClient=connectionManager.getApiClient(this.currentItem),language=context.querySelector(".selectLanguage").value;let itemId=this.currentItem.Id,mediaSourceId=this.currentMediaSource.Id;language=apiClient.getUrl("Items/"+itemId+"/RemoteSearch/Subtitles/"+language,{IsForced:context.querySelector(".chkForcedOnly").checked||null,MediaSourceId:mediaSourceId});let serverId=apiClient.serverId();return apiClient.getJSON(language).then(function(items){for(let i=0,length=items.length;i<length;i++){var item=items[i];item.Type="RemoteSubtitle",item.ServerId=serverId,item.ItemId=itemId,item.MediaSourceId=mediaSourceId,item.CanDownload=!0}return{Items:items,TotalRecordCount:items.length}})}function updateMode(instance){var context=instance.context;"lyrics"===instance.mode?(context.querySelector(".formDialogHeaderTitle").innerHTML=globalize.translate("Lyrics"),context.querySelector(".subtitleSearchHeaderText").innerHTML=globalize.translate("SearchForLyrics"),context.querySelector(".fldForcedOnly").classList.add("hide")):(context.querySelector(".formDialogHeaderTitle").innerHTML=globalize.translate("Subtitles"),context.querySelector(".subtitleSearchHeaderText").innerHTML=globalize.translate("SearchForSubtitles"),context.querySelector(".fldForcedOnly").classList.remove("hide"))}function onLibraryChanged(e,apiClient,data){var currentItem=this.currentItem;currentItem&&data.ItemsUpdated?.includes(currentItem.Id)&&!this.paused&&reload(this,apiClient,this.currentItem.Id,this.currentMediaSource.Id)}function onGetItem(instance,item,mediaSource,apiClient,autoSearch){let context=instance.context;instance.currentItem=item,instance.mode="Audio"===item.MediaType?"lyrics":"subtitles",updateMode(instance),instance.currentMediaSource=mediaSource,apiClient.getCurrentUser().then(function(user){user.Policy.EnableSubtitleDownloading?context.querySelector(".subtitleSearchContainer").classList.remove("hide"):context.querySelector(".subtitleSearchContainer").classList.add("hide"),instance.subtitleList.resume({refresh:!0}).then(function(){autoSearch||(loading.hide(),instance.autoFocus())});let file=instance.currentMediaSource.Path||"";user=Math.max(file.lastIndexOf("/"),file.lastIndexOf("\\"));(file=-1<user?file.substring(user+1):file)?(context.querySelector(".originalFile").innerHTML=file,context.querySelector(".originalFile").classList.remove("hide")):(context.querySelector(".originalFile").innerHTML="",context.querySelector(".originalFile").classList.add("hide")),autoSearch&&setTimeout(function(){context.querySelector(".subtitleSearchForm").requestSubmit(context.querySelector(".btnSubmit"))},300)})}function afterSubtitlesResultsRefreshed(result){var context=this.context;result.TotalRecordCount?context.querySelector(".noSearchResults").classList.add("hide"):context.querySelector(".noSearchResults").classList.remove("hide"),loading.hide()}function onRemoteSubtitlesCommandResult(result){"download"===result.command&&(result=result.result)&&(this.hasChanges=!0,this.newStreamIndex=result.NewIndex,this.options.closeOnDownload)&&(result=this.context,dialogHelper.close(result))}function reload(instance,apiClient,itemId,mediaSource,autoSearch){"string"==typeof itemId?apiClient.getItem(apiClient.getCurrentUserId(),itemId,{ExcludeFields:"Chapters,Overview,People,MediaStreams"}).then(function(item){var mediaSourceId=mediaSource;for(let i=0,length=item.MediaSources.length;i<length;i++)if(mediaSourceId===item.MediaSources[i].Id){mediaSource=item.MediaSources[i];break}mediaSource=mediaSource||item.MediaSources[0],onGetItem(instance,item,mediaSource,apiClient,autoSearch)}):onGetItem(instance,itemId,mediaSource,apiClient,autoSearch)}function onSearchSubmit(e){let instance=this;var lang=e.target.closest("form").querySelector(".selectLanguage").value;return userSettings.set("subtitleeditor-language",lang),loading.show(),instance.subtitleResults.resume({refresh:!0}).then(function(){instance.autoFocus()}),e.preventDefault(),!1}function getExistingSubtitles(query){var items,totalRecordCount;let mediaSource=this.currentMediaSource,item=this.currentItem;return item&&mediaSource&&!1!==this.options?.showCurrentSubtitles?(totalRecordCount=(items=mediaSource.MediaStreams.filter(function(s){return"Subtitle"===s.Type}).map(function(s){return itemHelper.normalizeMediaStreamForDisplay(item,mediaSource,s)})).length,Promise.resolve({Items:items,TotalRecordCount:totalRecordCount})):Promise.resolve({Items:[],TotalRecordCount:0})}function getExistingSubtitlesListViewOptions(){var fields=["Name"],fields=(fields.push("PathOrTitle"),{enableDefaultIcon:!0,action:layoutManager.tv?"menu":"none",fields:fields,draggable:!1,multiSelect:!1,hoverPlayButton:!1,enableUserDataButtons:!1,mediaInfo:!1,roundImage:!0,imageSize:"smaller",forceBorder:!0});return fields}function getExistingSubtitlesListOptions(){return{renderer:listView,options:getExistingSubtitlesListViewOptions(),virtualScrollLayout:"vertical-list"}}function getRemoteSubtitlesListViewOptions(){var fields=["Name"],fields=(fields.push("ProviderName"),fields.push("MediaInfo"),{enableDefaultIcon:!0,action:layoutManager.tv?"menu":"none",fields:fields,draggable:!1,multiSelect:!1,hoverPlayButton:!1,enableUserDataButtons:!1,mediaInfo:!1,enableSideMediaInfo:!1,image:!!layoutManager.tv,imageSize:"smaller",forceBorder:!0,downloadButton:!0,moreButton:!1,roundImage:!0,buttonCommands:["download","preview"]});return fields}function getRemoteSubtitlesListOptions(){return{renderer:listView,options:getRemoteSubtitlesListViewOptions(),virtualScrollLayout:"vertical-list"}}function SubtitleEditor(){this.onLibraryChangedFn=onLibraryChanged.bind(this)}function showEditor(options){loading.show();let editor=new SubtitleEditor;return editor.show(options).then(function(result){return editor.destroy(),Promise.resolve(result)})}require(["flexStyles","formDialogStyle","material-icons"]),SubtitleEditor.prototype.show=function(options){this.options=options;let instance=this;return require(["text!./modules/subtitleeditor/subtitleeditor.template.html"]).then(function(responses){responses=responses[0];instance.hasChanges=!1,instance.newStreamIndex=null;let item=options.item,mediaSource=options.mediaSource,apiClient=connectionManager.getApiClient(item);var dialogOptions={removeOnClose:!0,scrollY:!1,autoFocus:!1};layoutManager.tv?dialogOptions.size="fullscreen":dialogOptions.size="medium-tall";let dlg=dialogHelper.createDialog(dialogOptions),editorContent=((instance.context=dlg).classList.add("formDialog"),dlg.classList.add("subtitleEditorDialog"),dlg.innerHTML=globalize.translateDocument(responses,"sharedcomponents"),dlg.querySelector(".subtitleSearchForm").addEventListener("submit",onSearchSubmit.bind(instance)),dlg.querySelector(".formDialogContent")),noResultsMsg=(apiClient.getCultures().then(function(languages){fillLanguages(editorContent,apiClient,languages)}),"NoSubtitleSearchResultsFound");"lyrics"===instance.mode&&(noResultsMsg="NoLyricsSearchResultsFound"),appHost.supports("externallinks")?dlg.querySelector(".noSearchResults").innerHTML=globalize.translate(noResultsMsg,'<a is="emby-linkbutton" href="https://support.emby.media/support/solutions/articles/44001848856-manual-subtitle-downloads" target="_blank" class="button-link">',"</a>"):dlg.querySelector(".noSearchResults").innerHTML=globalize.translate(noResultsMsg,"","");dialogOptions=dlg.querySelector(".subtitleList"),dialogOptions.fetchData=getExistingSubtitles.bind(instance),dialogOptions.getListOptions=getExistingSubtitlesListOptions.bind(instance),dialogOptions.parentContainer=dialogOptions,instance.subtitleList=dialogOptions,responses=dlg.querySelector(".subtitleResults"),responses.fetchData=getSubtitleSearchResults.bind(instance),responses.getListOptions=getRemoteSubtitlesListOptions.bind(instance),responses.afterRefresh=afterSubtitlesResultsRefreshed.bind(instance),responses.onCommandResultInternal=onRemoteSubtitlesCommandResult.bind(instance),instance.subtitleResults=responses,dialogOptions=instance.onLibraryChangedFn;return dialogOptions&&events.on(serverNotifications,"LibraryChanged",dialogOptions),new Promise(function(resolve,reject){dlg.addEventListener("close",function(){instance.hasChanges?resolve({NewIndex:instance.newStreamIndex}):reject()}),dlg.addEventListener("open",function(){reload(instance,apiClient,item,mediaSource,options.autoSearch)}),dialogHelper.open(dlg)})})},SubtitleEditor.prototype.autoFocus=function(){var subtitleResults=this.context.querySelector(".subtitleResults");focusManager.autoFocus(subtitleResults,{skipIfNotEnabled:!0})||focusManager.autoFocus(this.context,{skipIfNotEnabled:!0})},SubtitleEditor.prototype.pause=function(){this.subtitleList?.pause(),this.subtitleResults?.pause()},SubtitleEditor.prototype.destroy=function(){this.pause();var onLibraryChangedFn=this.onLibraryChangedFn;onLibraryChangedFn&&events.off(serverNotifications,"LibraryChanged",onLibraryChangedFn),this.onLibraryChangedFn=null,this.subtitleList=null,this.subtitleResults=null,this.mode=null,this.options=null,this.hasChanges=null,this.currentItem=null,this.currentMediaSource=null};export default{show:showEditor}; |