import dom from"./dom.js";import globalize from"./common/globalize.js";import loading from"./loading/loading.js";import appRouter from"./approuter.js";import playbackManager from"./common/playback/playbackmanager.js";import playbackActions from"./common/playback/playbackactions.js";import connectionManager from"./emby-apiclient/connectionmanager.js";import itemManager from"./common/itemmanager/itemmanager.js";import responseHelper from"./common/responsehelper.js";import{appLogger}from"./common/servicelocator.js";function showPrompt(options){return Emby.importModule("./modules/prompt/prompt.js").then(function(prompt){return prompt(options)})}function showAlert(options){return Emby.importModule("./modules/common/dialogs/alert.js").then(function(alert){return alert(options)})}function showAlertAndResolve(options){return showAlert(options).catch(function(){return Promise.resolve()})}function showConfirm(options){return Emby.importModule("./modules/common/dialogs/confirm.js").then(function(confirm){return confirm(options)})}function downloadFiles(urls){return Emby.importModule("./modules/multidownload.js").then(function(multiDownload){multiDownload(urls)})}function downloadRemoteSubtitle(item,options,apiClient){return loading.show(),apiClient.downloadSubtitles(item.ItemId,item.MediaSourceId,item.Id).then(function(result){return loading.hide(),showToast(globalize.translate("SubtitlesDownloaded")),result})}function downloadAppLog(item){return appLogger.downloadLog(item.Name)}function downloadItems(items,options){var apiClient=connectionManager.getApiClient(items[0]);if(options=options||{},"RemoteSubtitle"===items[0].Type)return downloadRemoteSubtitle(items[0],options,apiClient);var downloadUrls=[];for(let i=0,length=items.length;ir.blob()).then(function(blob){blob=new File([blob],filename,{type:mimeType});return navigator.share({files:[blob],title:title})})}function shareItems(items,options){var items=items[0],shareTitle=itemManager.getDisplayName(items);let shareText=shareTitle;items.Overview&&(shareText+=" - "+items.Overview);var apiClient=connectionManager.getApiClient(items);let shareUrl;if("Photo"===items.Type){if(shareUrl=apiClient.getImageUrl(items.Id,{type:"Primary",tag:items.ImageTags?.Primary,format:"png"}),"android"!==globalThis.appMode&&"ios"!==globalThis.appMode)return shareFileViaWeb(items,options,shareTitle,shareText,shareUrl,"image.png","image/png")}else if("Log"===items.Type){if(!items.ServerId)return appLogger.shareLog(items);if("android"!==globalThis.appMode&&"ios"!==globalThis.appMode)return shareUrl=apiClient.getLogDownloadUrl({Name:items.Name,Sanitize:options.Sanitize,SetFilename:!0}),shareFileViaWeb(items,options,shareTitle,shareText,shareUrl,items.Name,"text/plain")}else{options=apiClient.serverInfo()?.RemoteAddress;shareUrl=apiClient.getUrl("share",{},options).replace("/share","")}return navigator.share({title:shareTitle,text:shareText,url:shareUrl})}function convertMedia(items,options){return Emby.importModule("./modules/sync/sync.js").then(function(syncDialog){return syncDialog.showMenu({items:items,mode:"convert"})})}function getSyncAllowedPromise(items){if("embyclient"===globalThis.appMode){items=items[0];if(items)if(!connectionManager.getApiClient(items).isMinServerVersion("4.8.4"))return showAlertAndResolve("To use the download feature, please update Emby Server to at least 4.8.4 or greater.")}}function downloadToLocalDevice(items,options){var promise=getSyncAllowedPromise(items);return promise||Emby.importModule("./modules/sync/sync.js").then(function(syncDialog){return syncDialog.showMenu({items:items,mode:"download"})})}function downloadToDevice(items,options){var promise=getSyncAllowedPromise(items);return promise||Emby.importModule("./modules/sync/sync.js").then(function(syncDialog){return syncDialog.showMenu({items:items,mode:"sync"})})}function editImages(item,options){return require(["imageEditor"]).then(function(responses){return responses[0].show({itemId:item.Id,serverId:item.ServerId})})}function showMissingEpisodesForSeries(items,options){return Emby.importModule("./modules/missingepisodesdialog/missingepisodesdialog.js").then(function(MissingEpisodesDialog){return(new MissingEpisodesDialog).show({items:items})})}function showServerInfo(item,options){var apiClient=connectionManager.getApiClient(item);let html="";return html+='
',apiClient.serverVersion()&&(html=(html+='

'+globalize.translate("Version")+"

")+"
"+apiClient.serverVersion()+"
"),item.LastConnectionMode?html+='

'+globalize.translate("HeaderLastConnectedTo")+"

":html+='

'+globalize.translate("HeaderServerAddress")+"

",html+="
"+apiClient.serverAddress()+"
",item.RemoteAddress&&(html=(html+='

'+globalize.translate("RemoteWAN")+"

")+"
"+item.RemoteAddress+"
"),html+="
",showAlertAndResolve({title:item.Name,html:html,centerText:!1})}function copyToClipboard(item,options){return navigator.clipboard.writeText(item.AccessToken)}function toggleItemChecked(items,options){if("change"!==options.eventType)return Promise.resolve();var checked=options.eventTarget.checked;let promise,itemsContainer=options.itemsContainer;return(promise=itemsContainer?itemsContainer.currentListOptions?.options.checkboxAction({items:items,checked:checked}).then(function(){for(let i=0,length=items.length;i"}function showLyrics(item,options){let apiClient=connectionManager.getApiClient(item);return apiClient.getItem(apiClient.getCurrentUserId(),item.Id,{ExcludeFields:"Chapters,People,Overview,MediaStreams"}).then(function(item){var mediaSource=item.MediaSources[0],stream=getLyricsStream(item,mediaSource);return apiClient.getJSON(apiClient.getUrl("Items/"+item.Id+"/"+mediaSource.Id+"/Subtitles/"+stream.Index+"/Stream.js")).then(function(result){return showAlertAndResolve({html:result.TrackEvents.map(getLyricsTrackEventHtml).join(""),confirmButton:!1,title:itemManager.getDisplayName(item),centerText:!1,confirmText:globalize.translate("Close"),item:item})})})}function manageAccess(item,options){return require(["ItemAccessDialog"]).then(function(responses){return(new responses[0]).show({item:item})})}function getItemsContainerParentId(itemsContainer){return itemsContainer?.getAttribute("data-parentid")||null}function deleteItems(items,options,command){items={items:items,navigate:options.navigateOnDelete||!1,positionTo:options.positionTo,deleteType:command};return options.itemsContainer?.currentListOptions?.options.commandActions?.deleteItems?options.itemsContainer.currentListOptions.options.commandActions.deleteItems(items).then(function(result){!1!==result?.refreshItems&&options.itemsContainer.notifyRefreshNeeded(!0)}):itemManager.deleteItems(items)}function executeCommandInternal(command,items,options){var item=items[0];if("open"===command||"link"===command||"linkdialog"===command){if("Photo"!==item.MediaType)return"linkdialog"===command&&((options=options||{}).asDialog=!0),showItem(item,options);command="play"}if("download"===command)return downloadItems(items,options);if("identify"===command)return identifyItem(item,options);if("resetmetadata"===command)return resetMetadata(items,options);if("preview"===command)return previewItem(item,options);if("removefromresume"===command)return removeFromResume(items,options);if("removefromnextup"===command)return removeFromResume(items,options,"nextup");if("playtrailer"===command)return playTrailer(item);if("connecttoserver"===command)return connectToServer(item);if("setplaylistindex"===command)return playbackManager.setCurrentPlaylistItem(item.PlaylistItemId);if("multiselect"===command)return showMultiSelect(item,options);if("wakeserver"===command)return wakeServer(connectionManager.getApiClient(item),item);switch(command){case"leaveshareditems":case"delete":case"canceltimer":case"cancelseriestimer":return deleteItems(items,options,command);case"edit":return editItems(items,options);case"editimages":return editImages(item,options);case"instantmix":return playbackManager.instantMix(item);case"shuffle":return play(items,!1,null,null,!0,getItemsContainerParentId(options.itemsContainer));case"playallfromhereautoplay":return playAllFromHere(options.itemElement,item.ServerId,null,!0);case"playallfromhere":return playAllFromHere(options.itemElement,item.ServerId);case"queueallfromhere":return playAllFromHere(options.itemElement,item.ServerId,!0);case"play":return play(items,!0,null,null,null,getItemsContainerParentId(options.itemsContainer));case"playfrombeginning":return play(items,!1,null,null,null,getItemsContainerParentId(options.itemsContainer));case"resume":case"playpause":return play(items,!0,null,null,null,getItemsContainerParentId(options.itemsContainer));case"queue":return play(items,!1,!0,null,null,getItemsContainerParentId(options.itemsContainer));case"queuenext":return play(items,!1,!0,!0,null,getItemsContainerParentId(options.itemsContainer));case"artist":return appRouter.showItem(item.ArtistItems[0].Id,item.ServerId),Promise.resolve();case"album":return appRouter.showItem(item.AlbumId,item.ServerId),Promise.resolve();case"series":return appRouter.showItem(item.SeriesId,item.ServerId),Promise.resolve();case"season":return appRouter.showItem(item.SeasonId,item.ServerId),Promise.resolve();case"overview":return showAlertAndResolve({html:dom.stripScripts(item.Overview||""),confirmButton:!1,title:itemManager.getDisplayName(item)||item.Name,centerText:!1,item:item});case"programlink":var program=item.CurrentProgram||item;return program.ServerId||(program.ServerId=item.ServerId),showItem(program,options);case"addtoplaylist":return itemManager.addToPlaylist(items,options);case"addtocollection":return itemManager.addToCollection(items,options);case"markplayed":return markPlayed(items,options);case"markunplayed":return markUnplayed(items,options);case"favorite":return markFavorite(items,!0);case"unfavorite":return markFavorite(items,!1);case"searchimageproviders":return searchImageProviders(item,options);case"addimage":return showImageUploader(item,options);case"moveinorder":return moveInOrder(items,options,options.newIndex);case"moveupinorder":return moveByOffsetInOrder(items,options,-1);case"movedowninorder":return moveByOffsetInOrder(items,options,1);case"addimagefromurl":return addImageFromUrl(item,options);case"toggleitemchecked":return toggleItemChecked(items,options);case"togglecheckbox":return toggleItemCheckbox(items,options);case"copytoclipboard":return copyToClipboard(item,options);case"share":return shareItems(items,options);case"seektoposition":return seekToPosition(item,options);case"sync":return downloadToDevice(items,options);case"synclocal":return downloadToLocalDevice(items,options);case"convert":return convertMedia(items,options);case"editsubtitles":return editSubtitles(item,options);case"changelibrarycontenttype":return changeVirtualFolderContentType(connectionManager.getApiClient(item),item,options.positionTo);case"renamelibrary":return renameVirtualFolder(connectionManager.getApiClient(item),item,options.positionTo);case"refresh":return itemManager.refreshMetadata(items,options);case"scan":return itemManager.scanLibraryFiles(items,options);case"removefromplayqueue":return itemManager.removeFromPlayQueue(items,options);case"removefromplaylist":return connectionManager.getApiClient(item).removeItemsFromPlaylist(item.PlaylistId,items);case"removefromcollection":return connectionManager.getApiClient(item).removeItemsFromCollection(item.CollectionId,items);case"session_stop":return connectionManager.getApiClient(item).sendPlayStateCommand(item.Id,"Stop");case"session_playpause":return connectionManager.getApiClient(item).sendPlayStateCommand(item.Id,"PlayPause");case"session_sendmessage":return sendMessageToSession(item,options);case"session_shownowplayingitem":return item.NowPlayingItem?showItem(item.NowPlayingItem,options):Promise.reject();case"serverinfo":return showServerInfo(item,options);case"record":return record(item,options);case"lyrics":return showLyrics(item,options);case"manageaccess":return manageAccess(item,options);case"mergeversions":return itemManager.groupVersions(items,options);case"showmissingepisodes":return showMissingEpisodesForSeries(items,options);case"none":case"toggletreenode":return Promise.resolve();default:return itemManager.executeCommand(command,items,options)}}function executeCommand(command,items,options){let promise;try{promise=executeCommandInternal(command,items,options)}catch(err){promise=Promise.reject(err)}return!1===options?.showErrorMessage?promise:promise.catch(function(err){return err?responseHelper.handleErrorResponse(err):Promise.reject(err)})}export default{executeCommand:executeCommand};