From 5d51e961cb4b2756083030af1bde84b801938ae8 Mon Sep 17 00:00:00 2001 From: l4kr Date: Mon, 2 Oct 2023 10:10:43 +0200 Subject: [PATCH] test docker container --- .prettierrc.json | 1 - .stylelintrc.json | 25 - Dockerfile | 4 + item/item.css | 2 +- item/item.html | 1092 +++++++++++++++++++--------- modules/actionsheet/actionsheet.js | 816 ++++++++++++++++++++- modules/commandprocessor.js | 922 ++++++++++++++++++++++- modules/multidownload.js | 26 +- 8 files changed, 2534 insertions(+), 354 deletions(-) delete mode 100644 .prettierrc.json delete mode 100644 .stylelintrc.json create mode 100644 Dockerfile diff --git a/.prettierrc.json b/.prettierrc.json deleted file mode 100644 index 0967ef4..0000000 --- a/.prettierrc.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/.stylelintrc.json b/.stylelintrc.json deleted file mode 100644 index 73fe2d6..0000000 --- a/.stylelintrc.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "extends": "stylelint-config-recommended", - "rules": { - "max-nesting-depth": 3, - "property-no-vendor-prefix": true, - "max-empty-lines": 2, - "indentation": 2, - "function-calc-no-unspaced-operator": true, - "string-quotes": "double", - "no-duplicate-selectors": true, - "color-hex-case": "upper", - "color-named": "never", - "selector-max-id": 0, - "selector-combinator-space-after": "always", - "declaration-block-trailing-semicolon": "always", - "declaration-colon-space-before": "never", - "declaration-colon-space-after": "always", - "rule-empty-line-before": "always-multi-line", - "media-feature-range-operator-space-before": "always", - "media-feature-range-operator-space-after": "always", - "media-feature-parentheses-space-inside": "never", - "media-feature-colon-space-before": "never", - "media-feature-colon-space-after": "always" - } -} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e568ea0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,4 @@ +FROM emby/embyserver:4.8.0.45 +MAINTAINER l4kr +ADD . / system/dashboard-ui/ +WORKDIR / diff --git a/item/item.css b/item/item.css index c8a5a04..6695ea6 100644 --- a/item/item.css +++ b/item/item.css @@ -267,7 +267,7 @@ -webkit-line-clamp: 15; position: absolute; width: 80ch; - font-weight: 520; + font-weight: 600; margin: 0.5em; top: 0; left: -0.5vw; diff --git a/item/item.html b/item/item.html index 39ba32a..d108218 100644 --- a/item/item.html +++ b/item/item.html @@ -1,356 +1,800 @@ -
-
+
+
+
+
+
+
-
-
- -
-
- -
- -
-
-
-
-
- -
-
-
-
- -
- -
- -
-
- -
-
- -
-
-
- -
- -
- -
-
- -
-
- -
-
- -
-
- -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
-
-
- -
- - - -
- - - - -
- -

-

- -

-

- -

- -
- - - {HeaderReadMore} -
- -

- -

- -
- -
-
-
- -
- -
-
-
+
+
+
-
+
+
+
-
-
-
- -
-

${HeaderAdditionalParts}

- -
- -
+
+
+
+
+
-
+
-
-
+
-
- -
+
+
+
-
-
-
-

-
- -
+
+
-
- +
+
-
-
+
+
-
-
- -
-
-
-
+ -
-

${Items}

-
-
+
+ -
-

+ -
+ -
-
-
-
-

${HeaderCastCrew}

+ -
+ -
-
-
-
-

${Extras}

+ -
+ -
-
-
-
-

${Chapters}

+ -
+ -
-
-
+ -
-

${Tags}

-
-
+ -
-

-
+ -
-
-
-
-

${HeaderUpcomingOnTV}

+ -
+ -
-
-
- -
-

${HeaderIncludedIn}

- -
- -
-
-
- -
- -
- -
-

${HeaderMoreLikeThis}

- -
- -
-
-
- -
-

${HeaderMoreLikeThisOnLiveTV}

- -
- -
-
-
- -
-

- ${Schedule} -

-
-
-
-
- - - -
-

${HeaderMediaInfo}

-
- +
+
+
+
+
-
+
+ + + +
+ + + + +
+ +

+

+

+ +
+ + {HeaderReadMore} +
+ +

+ +
+
+ +
- +
+ + + +
+
+
+
+ +
+

+ ${HeaderAdditionalParts} +

+ +
+
+
+
+ +
+
+ +
+
+
+
+
+
+

+
+ +
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+

+ ${Items} +

+
+
+ +
+

+ +
+
+
+
+
+

+ ${HeaderCastCrew} +

+ +
+
+
+
+
+

+ ${Extras} +

+ +
+
+
+
+
+

+ ${Chapters} +

+ +
+
+
+
+ +
+

+ ${Tags} +

+
+
+ +
+

+
+
+
+
+
+

+ ${HeaderUpcomingOnTV} +

+ +
+
+
+
+ +
+

+ ${HeaderIncludedIn} +

+ +
+
+
+
+ +
+ +
+

+ ${HeaderMoreLikeThis} +

+ +
+
+
+
+ +
+

+ ${HeaderMoreLikeThisOnLiveTV} +

+ +
+
+
+
+ +
+

${Schedule}

+
+
+
+
+ +
+

+ ${HeaderMediaInfo} +

+
+ +
+ +
+
+
+
diff --git a/modules/actionsheet/actionsheet.js b/modules/actionsheet/actionsheet.js index dc6d247..691b9f1 100644 --- a/modules/actionsheet/actionsheet.js +++ b/modules/actionsheet/actionsheet.js @@ -1 +1,815 @@ -define(["exports","./../emby-apiclient/connectionmanager.js","./../dom.js","./../common/globalize.js","./../layoutmanager.js","./../common/itemmanager/itemmanager.js","./../imageloader/imageloader.js","./../dialoghelper/dialoghelper.js","./../emby-elements/emby-button/emby-button.js","./../emby-elements/emby-scroller/emby-scroller.js","./../emby-elements/emby-itemscontainer/emby-itemscontainer.js","./../approuter.js","./../focusmanager.js","./../listview/listview.js","./../shortcuts.js","./../browser.js","./../common/textencoding.js"],function(_exports,_connectionmanager,_dom,_globalize,_layoutmanager,_itemmanager,_imageloader,_dialoghelper,_embyButton,_embyScroller,_embyItemscontainer,_approuter,_focusmanager,_listview,_shortcuts,_browser,_textencoding){function onCancelClick(e){_dialoghelper.default.close(this.closest(".actionSheet"))}function getTextLinkButton(item){var href=_approuter.default.getRouteUrl(item);return''+_textencoding.default.htmlEncode(item.Name)+""}function onItemsContainerUpgraded(){return this.querySelector(".itemsContainer").resume({refresh:!0})}function refreshItemsContainer(){var itemsContainer=this.querySelector(".itemsContainer");return itemsContainer.resume?onItemsContainerUpgraded.call(this):function(instance,itemsContainer){return new Promise(function(resolve,reject){_dom.default.addEventListener(itemsContainer,"upgraded",function(){onItemsContainerUpgraded.call(instance).then(resolve,reject)},{once:!0})})}(this,itemsContainer)}function getListViewItemFromInputItem(option,options){var isSelected,item={Name:option.Name||option.name||option.textContent||option.innerText,ServerId:option.ServerId||null,MediaType:option.MediaType||null,IsFolder:option.IsFolder,Type:option.Type,Overview:option.Overview,PrimaryImageAspectRatio:option.PrimaryImageAspectRatio,RunTimeTicks:option.RunTimeTicks,IndexNumber:option.IndexNumber,IndexNumberEnd:option.IndexNumberEnd,SupportsResume:option.SupportsResume,ParentIndexNumber:option.ParentIndexNumber,ProductionYear:option.ProductionYear,PremiereDate:option.PremiereDate,SeriesName:option.SeriesName,NameSubtitle:option.nameSubtitle,Artists:option.Artists,ArtistItems:option.ArtistItems,AlbumArtists:option.AlbumArtists,Composers:option.Composers,AlbumArtist:option.AlbumArtist,Album:option.Album,AlbumId:option.AlbumId,SeriesId:option.SeriesId,SeasonId:option.SeasonId,SeasonName:option.SeasonName,ImageTags:option.ImageTags,BackdropImageTags:option.BackdropImageTags,PrimaryImageTag:option.PrimaryImageTag,AlbumPrimaryImageTag:option.AlbumPrimaryImageTag,SeriesPrimaryImageTag:option.SeriesPrimaryImageTag,ParentThumbItemId:option.ParentThumbItemId,ParentThumbImageTag:option.ParentThumbImageTag,ParentLogoItemId:option.ParentLogoItemId,ParentLogoImageTag:option.ParentLogoImageTag,ParentBackdropItemId:option.ParentBackdropItemId,ParentBackdropImageTags:option.ParentBackdropImageTags,hasDivider:option.dividerAfter};return options.idProperty&&null!=option[options.idProperty]?item.Id=option[options.idProperty]:null!=option.Id?item.Id=option.Id:null!=option.id&&""!==option.id?item.Id=option.id:null!=option.value?item.Id=option.value:item.Id=option.Name||option.name,options.multiple?(isSelected=options.emptyValueSetEqualsAll&&!options.selectedValuesClone.length||options.selectedValuesClone.includes(item.Id),item.Selected=isSelected):item.Selected=option.selected||option.Selected||options.selectedValuesClone.includes(item.Id),item.Icon=option.icon||option.Icon||(item.Selected&&options.hasItemSelectionState?"":null),item.iconClass=option.iconClass,item.asideText=option.asideText,item.asideIcon=option.asideIcon,item.ShortOverview=option.secondaryText||option.title,item.hideWithFinePointer=option.hideWithFinePointer,item}function getItemsFn(options){return function(query){if(query=query||{},options.getItems)return function(options,query){return options.getItems(query).then(function(result){for(var items=result.Items,i=0,length=items.length;iquery.length&&(items.length=Math.min(items.length,query.length)),Promise.resolve({Items:items,TotalRecordCount:totalRecordCount})}}function getListOptions(){return{renderer:_listview.default,options:function(options){var listItemBodyClass,iconClass,asideTextClass,menuItemClass="actionSheetMenuItem",fields=(options.menuItemClass&&(menuItemClass+=" "+options.menuItemClass),options.iconRight&&(menuItemClass+=" actionSheetMenuItem-iconright"),options.multiple?listItemBodyClass="actionsheetListItemBody-multiple":(_layoutmanager.default.tv&&(menuItemClass+=" actionSheetMenuItem-tv"),options.hasItemIcon||options.hasItemSelectionState||(menuItemClass+=" actionSheetMenuItem-noicon"),listItemBodyClass="actionsheetListItemBody",options.iconRight&&(listItemBodyClass+=" actionsheetListItemBody-iconright"),iconClass="actionsheetMenuItemIcon listItemIcon listItemIcon-transparent md-icon",asideTextClass="actionSheetItemAsideText"),options.fields),overviewLines=2,fields=(fields||(fields=["Name"],options.showNameSubtitle&&fields.push("NameSubtitle"),options.multiple||fields.push("ShortOverview"),options.showOverview&&(fields.push("Overview"),overviewLines=3)),options.multiple&&fields.unshift("ItemCheckbox"),{action:options.multiple?"togglecheckbox":"custom",fields:fields,draggable:!1,multiSelect:!1,contextMenu:!1,hoverPlayButton:!1,itemClass:menuItemClass,listItemBodyClassName:listItemBodyClass,iconClass:iconClass,listItemBodyTextClass:"actionSheetItemText",fillEmptyTextlines:!1,enableDefaultIcon:!0===options.enableDefaultIcon,highlight:options.highlight,border:options.border,artist:options.artist,asideTextClass:asideTextClass,asideIconClass:((asideTextClass||"")+" actionSheetItemAsideIcon").trim(),image:!options.multiple&&(!0===options.hasItemIcon||!0===options.hasItemImage||!0===options.hasItemSelectionState),checkboxAction:"toggleitemselected",enableUserDataButtons:!1,moreButton:!1,mediaInfo:!1,textLinks:!1,enableSideMediaInfo:!1,overviewLines:overviewLines,iconSpacing:!0}),menuItemClass="actionSheetItemImageContainer";return options.useListViewSizing||(menuItemClass+=" actionSheetItemImageContainer-customsize",!1!==options.useCustomImageContainerWidth&&(menuItemClass+=" actionSheetItemImageContainer-customwidth")),(options.hasItemSelectionState||options.hasItemIcon)&&(menuItemClass+=" actionSheetItemImageContainer-transparent"),fields.imageContainerClass=menuItemClass,fields}(this),virtualScrollLayout:"vertical-list"}}function callUpdateElement(itemsContainer,options){for(var items=itemsContainer.querySelectorAll(itemsContainer.getItemSelector()),i=0,length=items.length;i':useVirtualScroller&&(dialogOptions+='');(!options.title||options.hasItemIcon||options.hasItemImage||options.hasItemSelectionState)&&!isFullscreen||dlg.classList.add("actionsheet-centered");for(var selectNoneText,previewHtml="",headerClass=(options.item&&(previewHtml=function(options,item){var html="",apiClient=(html+='
',_connectionmanager.default.getApiClient(item)),imageUrl=(imageUrlInfo=_imageloader.default.getImageUrl(item,apiClient,{height:60,width:200})).imgUrl,imgClass="",round="MusicArtist"===item.Type,html=imageUrl?(imageUrlInfo=imageUrlInfo.aspect||1,imgClass=(imgClass+=" actionsheetItemPreviewImage-bg")+" actionsheetItemPreviewImage-bg-"+(shape=_imageloader.default.getShapeFromAspect(imageUrlInfo)),round&&"square"===shape&&(imgClass+=" actionsheetItemPreviewImage-round"),html+('
'):(imgClass+=" actionsheetItemPreviewImage-iconcontainer",round&&(imgClass+=" actionsheetItemPreviewImage-round"),(html=html+('
')+_itemmanager.default.getDefaultIcon(item)+"
"),lines=(html+='
',[]),shape=(item.SeriesName?item.SeriesId?lines.push(getTextLinkButton({Type:"Series",Id:item.SeriesId,Name:item.SeriesName,IsFolder:!0,ServerId:item.ServerId})):lines.push(_textencoding.default.htmlEncode(item.SeriesName||"")):"Program"===item.Type&&lines.push(_textencoding.default.htmlEncode(item.Name||"")),_textencoding.default.htmlEncode(_itemmanager.default.getDisplayName(item,{})||"")),imageUrlInfo='
'+shape+"
",round=("Audio"!==item.MediaType||_layoutmanager.default.tv||!1===options.linkToItem||(imageUrlInfo+=''),lines.push(imageUrlInfo),"Server"===item.Type&&(apiClient&&apiClient.serverVersion()&&lines.push(apiClient.serverVersion()),apiClient)&&apiClient.serverAddress()&&lines.push(apiClient.serverAddress()),"User"===item.Type&&options.showServerName&&(imageUrl=apiClient.serverName())&&lines.push(_textencoding.default.htmlEncode(imageUrl)),item.IsFolder&&item.AlbumArtists&&item.AlbumArtists.length?lines.push(getTextLinkButton({Type:"MusicArtist",Id:item.AlbumArtists[0].Id,Name:item.AlbumArtists[0].Name,ServerId:item.ServerId})):item.ArtistItems&&item.ArtistItems.length?lines.push(getTextLinkButton({Type:"MusicArtist",Id:item.ArtistItems[0].Id,Name:item.ArtistItems[0].Name,ServerId:item.ServerId})):item.AlbumArtists&&item.AlbumArtists.length&&lines.push(getTextLinkButton({Type:"MusicArtist",Id:item.AlbumArtists[0].Id,Name:item.AlbumArtists[0].Name,ServerId:item.ServerId})),[]);item.Album&&item.AlbumId?round.push(getTextLinkButton({Type:"Photo"===item.MediaType?"PhotoAlbum":"MusicAlbum",Id:item.AlbumId,Name:item.Album,ServerId:item.ServerId})):item.Album&&round.push('
'+_textencoding.default.htmlEncode(item.Album)+"
"),item.ProductionYear&&"Episode"!==item.Type&&round.push('
'+item.ProductionYear+"
"),round.length&&lines.push(round.join(""));for(var i=0,length=Math.min(lines.length,3);i')+lines[i]+"
":(html+='
')+lines[i]+"
";return html=html+"
"+"
"}(options,options.item)),_layoutmanager.default.tv||(dialogOptions+=previewHtml),options.title&&(headerClass="actionSheetTitle",options.hideTitleWhenNotFullscreen&&!isFullscreen&&(headerClass+=" actionSheetTitle-hideNonFullscreen"),dialogOptions=(dialogOptions+='

')+options.title+"

"),options.text&&(dialogOptions=(dialogOptions+='

')+options.text+"

"),"actionSheetScroller focuscontainer-x"),scrollSliderClass=(isFullscreen?(headerClass+=" actionSheetScroller-fullscreen",useVirtualScroller&&(headerClass+=" actionSheetScroller-fullscreen-virtual")):(useVirtualScroller&&(headerClass+=" flex-grow"),options.paddedScroller&&(headerClass+=" actionSheetScroller-padded")),_layoutmanager.default.tv&&(headerClass+=" actionSheetScroller-focusscale"),(options.title||options.text)&&(headerClass+=" actionSheetScroller-withheader")," actionsheetScrollSlider scrollSlider flex flex-direction-column itemsContainer"),isFullscreen=(isFullscreen||options.multiple&&!useVirtualScroller||!1!==options.highlight||options.paddedScroller||(useVirtualScroller?headerClass+=" actionsheetScrollSlider-bottompadded":scrollSliderClass+=" actionsheetScrollSlider-bottompadded"),options.multiple&&(scrollSliderClass+=" actionsheet-scrollSlider-multiple",_layoutmanager.default.tv)&&(scrollSliderClass+=" actionsheet-scrollSlider-multiple-tv"),""),btnCloseActionSheets=(useVirtualScroller&&(isFullscreen+=' data-virtualscrolllayout="vertical-grid"'),dialogOptions=(dialogOptions=dialogOptions+('
')+('
"))+"
"+"
",options.bottomText&&(dialogOptions=(dialogOptions+='
')+options.bottomText+"
"),options.multiple&&useVirtualScroller&&(dialogOptions+='
',headerClass="btnActionSheetSelectNone",options.selectAllOnSelectNone?(selectNoneText=_globalize.default.translate("SelectAll"),headerClass+=" dlg-close"):selectNoneText=_globalize.default.translate("SelectNone"),dialogOptions=dialogOptions+'
"),dlg.innerHTML=dialogOptions,dlg.querySelectorAll(".btnCloseActionSheet")),i=0,length=btnCloseActionSheets.length;i' + + _textencoding.default.htmlEncode(item.Name) + + "" + ); + } + function onItemsContainerUpgraded() { + return this.querySelector(".itemsContainer").resume({ refresh: !0 }); + } + function refreshItemsContainer() { + var itemsContainer = this.querySelector(".itemsContainer"); + return itemsContainer.resume + ? onItemsContainerUpgraded.call(this) + : (function (instance, itemsContainer) { + return new Promise(function (resolve, reject) { + _dom.default.addEventListener( + itemsContainer, + "upgraded", + function () { + onItemsContainerUpgraded.call(instance).then(resolve, reject); + }, + { once: !0 }, + ); + }); + })(this, itemsContainer); + } + function getListViewItemFromInputItem(option, options) { + var isSelected, + item = { + Name: + option.Name || option.name || option.textContent || option.innerText, + ServerId: option.ServerId || null, + MediaType: option.MediaType || null, + IsFolder: option.IsFolder, + Type: option.Type, + Overview: option.Overview, + PrimaryImageAspectRatio: option.PrimaryImageAspectRatio, + RunTimeTicks: option.RunTimeTicks, + IndexNumber: option.IndexNumber, + IndexNumberEnd: option.IndexNumberEnd, + SupportsResume: option.SupportsResume, + ParentIndexNumber: option.ParentIndexNumber, + ProductionYear: option.ProductionYear, + PremiereDate: option.PremiereDate, + SeriesName: option.SeriesName, + NameSubtitle: option.nameSubtitle, + Artists: option.Artists, + ArtistItems: option.ArtistItems, + AlbumArtists: option.AlbumArtists, + Composers: option.Composers, + AlbumArtist: option.AlbumArtist, + Album: option.Album, + AlbumId: option.AlbumId, + SeriesId: option.SeriesId, + SeasonId: option.SeasonId, + SeasonName: option.SeasonName, + ImageTags: option.ImageTags, + BackdropImageTags: option.BackdropImageTags, + PrimaryImageTag: option.PrimaryImageTag, + AlbumPrimaryImageTag: option.AlbumPrimaryImageTag, + SeriesPrimaryImageTag: option.SeriesPrimaryImageTag, + ParentThumbItemId: option.ParentThumbItemId, + ParentThumbImageTag: option.ParentThumbImageTag, + ParentLogoItemId: option.ParentLogoItemId, + ParentLogoImageTag: option.ParentLogoImageTag, + ParentBackdropItemId: option.ParentBackdropItemId, + ParentBackdropImageTags: option.ParentBackdropImageTags, + hasDivider: option.dividerAfter, + }; + return ( + options.idProperty && null != option[options.idProperty] + ? (item.Id = option[options.idProperty]) + : null != option.Id + ? (item.Id = option.Id) + : null != option.id && "" !== option.id + ? (item.Id = option.id) + : null != option.value + ? (item.Id = option.value) + : (item.Id = option.Name || option.name), + options.multiple + ? ((isSelected = + (options.emptyValueSetEqualsAll && + !options.selectedValuesClone.length) || + options.selectedValuesClone.includes(item.Id)), + (item.Selected = isSelected)) + : (item.Selected = + option.selected || + option.Selected || + options.selectedValuesClone.includes(item.Id)), + (item.Icon = + option.icon || + option.Icon || + (item.Selected && options.hasItemSelectionState ? "" : null)), + (item.iconClass = option.iconClass), + (item.asideText = option.asideText), + (item.asideIcon = option.asideIcon), + (item.ShortOverview = option.secondaryText || option.title), + (item.hideWithFinePointer = option.hideWithFinePointer), + item + ); + } + function getItemsFn(options) { + return function (query) { + if (((query = query || {}), options.getItems)) + return (function (options, query) { + return options.getItems(query).then(function (result) { + for ( + var items = result.Items, i = 0, length = items.length; + i < length; + i++ + ) + items[i] = getListViewItemFromInputItem(items[i], options); + return result; + }); + })(options, query); + for ( + var inputItems = options.items || [], + items = [], + i = 0, + length = inputItems.length; + i < length; + i++ + ) { + var item = getListViewItemFromInputItem(inputItems[i], options); + items.push(item); + } + var totalRecordCount = items.length, + items = items.slice(query.StartIndex || 0); + return ( + null != query.length && + items.length > query.length && + (items.length = Math.min(items.length, query.length)), + Promise.resolve({ Items: items, TotalRecordCount: totalRecordCount }) + ); + }; + } + function getListOptions() { + return { + renderer: _listview.default, + options: (function (options) { + var listItemBodyClass, + iconClass, + asideTextClass, + menuItemClass = "actionSheetMenuItem", + fields = + (options.menuItemClass && + (menuItemClass += " " + options.menuItemClass), + options.iconRight && + (menuItemClass += " actionSheetMenuItem-iconright"), + options.multiple + ? (listItemBodyClass = "actionsheetListItemBody-multiple") + : (_layoutmanager.default.tv && + (menuItemClass += " actionSheetMenuItem-tv"), + options.hasItemIcon || + options.hasItemSelectionState || + (menuItemClass += " actionSheetMenuItem-noicon"), + (listItemBodyClass = "actionsheetListItemBody"), + options.iconRight && + (listItemBodyClass += " actionsheetListItemBody-iconright"), + (iconClass = + "actionsheetMenuItemIcon listItemIcon listItemIcon-transparent md-icon"), + (asideTextClass = "actionSheetItemAsideText")), + options.fields), + overviewLines = 2, + fields = + (fields || + ((fields = ["Name"]), + options.showNameSubtitle && fields.push("NameSubtitle"), + options.multiple || fields.push("ShortOverview"), + options.showOverview && + (fields.push("Overview"), (overviewLines = 3))), + options.multiple && fields.unshift("ItemCheckbox"), + { + action: options.multiple ? "togglecheckbox" : "custom", + fields: fields, + draggable: !1, + multiSelect: !1, + contextMenu: !1, + hoverPlayButton: !1, + itemClass: menuItemClass, + listItemBodyClassName: listItemBodyClass, + iconClass: iconClass, + listItemBodyTextClass: "actionSheetItemText", + fillEmptyTextlines: !1, + enableDefaultIcon: !0 === options.enableDefaultIcon, + highlight: options.highlight, + border: options.border, + artist: options.artist, + asideTextClass: asideTextClass, + asideIconClass: ( + (asideTextClass || "") + " actionSheetItemAsideIcon" + ).trim(), + image: + !options.multiple && + (!0 === options.hasItemIcon || + !0 === options.hasItemImage || + !0 === options.hasItemSelectionState), + checkboxAction: "toggleitemselected", + enableUserDataButtons: !1, + moreButton: !1, + mediaInfo: !1, + textLinks: !1, + enableSideMediaInfo: !1, + overviewLines: overviewLines, + iconSpacing: !0, + }), + menuItemClass = "actionSheetItemImageContainer"; + return ( + options.useListViewSizing || + ((menuItemClass += " actionSheetItemImageContainer-customsize"), + !1 !== options.useCustomImageContainerWidth && + (menuItemClass += " actionSheetItemImageContainer-customwidth")), + (options.hasItemSelectionState || options.hasItemIcon) && + (menuItemClass += " actionSheetItemImageContainer-transparent"), + (fields.imageContainerClass = menuItemClass), + fields + ); + })(this), + virtualScrollLayout: "vertical-list", + }; + } + function callUpdateElement(itemsContainer, options) { + for ( + var items = itemsContainer.querySelectorAll( + itemsContainer.getItemSelector(), + ), + i = 0, + length = items.length; + i < length; + i++ + ) { + var elem = items[i]; + !(function (element, item, options) { + var classList; + element && + (classList = element.classList) && + (item && item.Selected + ? classList.add("autofocus") + : classList.remove("autofocus"), + item && item.hideWithFinePointer + ? classList.add("actionSheetMenuItem-hiddenfinepointer") + : classList.remove("actionSheetMenuItem-hiddenfinepointer"), + !1 === options.highlight) && + ((classList = element.querySelector(".listItem-content").classList), + item && item.hasDivider + ? classList.add("listItem-border") + : classList.remove("listItem-border")); + })(elem, itemsContainer.getItemFromElement(elem), options); + } + } + function ActionSheet() {} + Object.defineProperty(_exports, "__esModule", { value: !0 }), + (_exports.default = void 0), + require(["css!modules/actionsheet/actionsheet.css", "material-icons"]), + (ActionSheet.prototype.show = function (options) { + _layoutmanager.default.tv || + _browser.default.iOS || + _browser.default.osx || + (options.highlight = !1); + var dialogOptions = { + removeOnClose: !0, + enableHistory: options.enableHistory, + autoFocus: !1, + refocus: options.refocus, + autoCenter: !1, + transparentBackground: !0, + positionTo: options.positionTo, + positionX: options.positionX, + positionY: options.positionY, + transformOrigin: options.transformOrigin, + preventOverflow: options.preventOverflow, + minWidthToElement: options.minWidthToElement, + positionClientX: options.positionClientX, + positionClientY: options.positionClientY, + offsetLeft: options.offsetLeft, + offsetTop: options.offsetTop, + blurBackground: options.blurBackground, + setCurrentFocusScope: options.setCurrentFocusScope, + setDialogSize: !1, + }, + useVirtualScroller = + null != options.getItems && options.enableVirtualScroller, + isFullscreen = + (useVirtualScroller && (dialogOptions.fixedSize = !0), + _layoutmanager.default.tv && !1 !== options.autoTvLayout + ? (dialogOptions.size = "fullscreen") + : (dialogOptions.modal = !1), + "fullscreen" === dialogOptions.size), + dlg = + (options.hasItemImage && + ((options.paddedScroller = !0), (options.useListViewSizing = !0)), + isFullscreen || (options.paddedScroller = !0), + _dialoghelper.default.createDialog(dialogOptions)), + instance = this, + dialogOptions = + ((instance.dlg = dlg).classList.add("actionSheet"), + _layoutmanager.default.tv && + dlg.classList.add("actionSheet-focusscale"), + (_layoutmanager.default.tv || + isFullscreen || + options.hasItemSelectionState) && + (dlg.classList.add("dlg-autofocus"), + _layoutmanager.default.tv || options.hasItemSelectionState) && + dlg.classList.add("dlg-autofocus-force"), + isFullscreen || + (useVirtualScroller && + dlg.classList.add( + "actionSheet-virtualscroll", + "dialog-fullscreen-lowres", + ), + _layoutmanager.default.tv || + (dlg.classList.add( + "actionSheet-automobile", + "actionSheet-largefont", + ), + options.multiple && dlg.classList.add("actionSheet-smallfont")), + !1 !== options.blur && + _dom.default.allowBackdropFilter() && + dlg.classList.add("dialog-blur")), + options.dialogClass && dlg.classList.add(options.dialogClass), + ""); + !options.hasItemIcon || + options.hasItemAsideIcon || + options.hasItemAsideText || + !1 === options.iconRight || + (options.iconRight = !0), + options.iconRight && + !isFullscreen && + (options.useCustomImageContainerWidth = !1), + isFullscreen + ? (dialogOptions += + '') + : useVirtualScroller && + (dialogOptions += + ''); + ((!options.title || + options.hasItemIcon || + options.hasItemImage || + options.hasItemSelectionState) && + !isFullscreen) || + dlg.classList.add("actionsheet-centered"); + for ( + var selectNoneText, + previewHtml = "", + headerClass = + (options.item && + (previewHtml = (function (options, item) { + var html = "", + apiClient = + ((html += + '
'), + _connectionmanager.default.getApiClient(item)), + imageUrl = (imageUrlInfo = _imageloader.default.getImageUrl( + item, + apiClient, + { height: 60, width: 200 }, + )).imgUrl, + imgClass = "", + round = "MusicArtist" === item.Type, + html = imageUrl + ? ((imageUrlInfo = imageUrlInfo.aspect || 1), + (imgClass = + (imgClass += " actionsheetItemPreviewImage-bg") + + " actionsheetItemPreviewImage-bg-" + + (shape = + _imageloader.default.getShapeFromAspect( + imageUrlInfo, + ))), + round && + "square" === shape && + (imgClass += " actionsheetItemPreviewImage-round"), + html + + ('
') + : ((imgClass += + " actionsheetItemPreviewImage-iconcontainer"), + round && + (imgClass += " actionsheetItemPreviewImage-round"), + (html = + html + + ('
') + + _itemmanager.default.getDefaultIcon(item) + + "
"), + lines = + ((html += '
'), + []), + shape = + (item.SeriesName + ? item.SeriesId + ? lines.push( + getTextLinkButton({ + Type: "Series", + Id: item.SeriesId, + Name: item.SeriesName, + IsFolder: !0, + ServerId: item.ServerId, + }), + ) + : lines.push( + _textencoding.default.htmlEncode( + item.SeriesName || "", + ), + ) + : "Program" === item.Type && + lines.push( + _textencoding.default.htmlEncode(item.Name || ""), + ), + _textencoding.default.htmlEncode( + _itemmanager.default.getDisplayName(item, {}) || "", + )), + imageUrlInfo = + '
' + + shape + + "
", + round = + ("Audio" !== item.MediaType || + _layoutmanager.default.tv || + !1 === options.linkToItem || + (imageUrlInfo += + ''), + lines.push(imageUrlInfo), + "Server" === item.Type && + (apiClient && + apiClient.serverVersion() && + lines.push(apiClient.serverVersion()), + apiClient) && + apiClient.serverAddress() && + lines.push(apiClient.serverAddress()), + "User" === item.Type && + options.showServerName && + (imageUrl = apiClient.serverName()) && + lines.push(_textencoding.default.htmlEncode(imageUrl)), + item.IsFolder && + item.AlbumArtists && + item.AlbumArtists.length + ? lines.push( + getTextLinkButton({ + Type: "MusicArtist", + Id: item.AlbumArtists[0].Id, + Name: item.AlbumArtists[0].Name, + ServerId: item.ServerId, + }), + ) + : item.ArtistItems && item.ArtistItems.length + ? lines.push( + getTextLinkButton({ + Type: "MusicArtist", + Id: item.ArtistItems[0].Id, + Name: item.ArtistItems[0].Name, + ServerId: item.ServerId, + }), + ) + : item.AlbumArtists && + item.AlbumArtists.length && + lines.push( + getTextLinkButton({ + Type: "MusicArtist", + Id: item.AlbumArtists[0].Id, + Name: item.AlbumArtists[0].Name, + ServerId: item.ServerId, + }), + ), + []); + item.Album && item.AlbumId + ? round.push( + getTextLinkButton({ + Type: + "Photo" === item.MediaType + ? "PhotoAlbum" + : "MusicAlbum", + Id: item.AlbumId, + Name: item.Album, + ServerId: item.ServerId, + }), + ) + : item.Album && + round.push( + '
' + + _textencoding.default.htmlEncode(item.Album) + + "
", + ), + item.ProductionYear && + "Episode" !== item.Type && + round.push( + '
' + + item.ProductionYear + + "
", + ), + round.length && lines.push(round.join("")); + for ( + var i = 0, length = Math.min(lines.length, 3); + i < length; + i++ + ) + html = + 1 <= i + ? (html += + '
') + + lines[i] + + "
" + : (html += + '
') + + lines[i] + + "
"; + return (html = html + "
" + "
"); + })(options, options.item)), + _layoutmanager.default.tv || (dialogOptions += previewHtml), + options.title && + ((headerClass = "actionSheetTitle"), + options.hideTitleWhenNotFullscreen && + !isFullscreen && + (headerClass += " actionSheetTitle-hideNonFullscreen"), + (dialogOptions = + (dialogOptions += '

') + + options.title + + "

")), + options.text && + (dialogOptions = + (dialogOptions += '

') + + options.text + + "

"), + "actionSheetScroller focuscontainer-x"), + scrollSliderClass = + (isFullscreen + ? ((headerClass += " actionSheetScroller-fullscreen"), + useVirtualScroller && + (headerClass += " actionSheetScroller-fullscreen-virtual")) + : (useVirtualScroller && (headerClass += " flex-grow"), + options.paddedScroller && + (headerClass += " actionSheetScroller-padded")), + _layoutmanager.default.tv && + (headerClass += " actionSheetScroller-focusscale"), + (options.title || options.text) && + (headerClass += " actionSheetScroller-withheader"), + " actionsheetScrollSlider scrollSlider flex flex-direction-column itemsContainer"), + isFullscreen = + (isFullscreen || + (options.multiple && !useVirtualScroller) || + !1 !== options.highlight || + options.paddedScroller || + (useVirtualScroller + ? (headerClass += " actionsheetScrollSlider-bottompadded") + : (scrollSliderClass += + " actionsheetScrollSlider-bottompadded")), + options.multiple && + ((scrollSliderClass += " actionsheet-scrollSlider-multiple"), + _layoutmanager.default.tv) && + (scrollSliderClass += " actionsheet-scrollSlider-multiple-tv"), + ""), + btnCloseActionSheets = + (useVirtualScroller && + (isFullscreen += ' data-virtualscrolllayout="vertical-grid"'), + (dialogOptions = + (dialogOptions = + dialogOptions + + ('
') + + ('
")) + + "
" + + "
"), + options.bottomText && + (dialogOptions = + (dialogOptions += + '
') + + options.bottomText + + "
"), + options.multiple && + useVirtualScroller && + ((dialogOptions += + '
'), + (headerClass = "btnActionSheetSelectNone"), + options.selectAllOnSelectNone + ? ((selectNoneText = _globalize.default.translate("SelectAll")), + (headerClass += " dlg-close")) + : (selectNoneText = _globalize.default.translate("SelectNone")), + (dialogOptions = + dialogOptions + + '
")), + (dlg.innerHTML = dialogOptions), + dlg.querySelectorAll(".btnCloseActionSheet")), + i = 0, + length = btnCloseActionSheets.length; + i < length; + i++ + ) + btnCloseActionSheets[i].addEventListener("click", onCancelClick); + scrollSliderClass = dlg.querySelector(".btnActionSheetSelectNone"); + return ( + scrollSliderClass && + scrollSliderClass.addEventListener("click", function () { + (options.selectedValuesClone = []), + this.classList.contains("dlg-close") + ? _dialoghelper.default.close(dlg) + : dlg.querySelector(".itemsContainer").refreshItems(); + }), + new Promise(function (resolve, reject) { + var selectedItem, isResolved; + options.selectedValuesClone = (options.selectedValues || []).slice(0); + var itemsContainer = dlg.querySelector(".itemsContainer"), + openPromise = + (itemsContainer.addEventListener("action-null", function (e) { + var _selectedItem2; + options.multiple || + ((e = e.detail.item), + (selectedItem = e), + (e = options.resolveWithSelectedItem + ? selectedItem + : null == (e = selectedItem) + ? void 0 + : e.Id), + !options.resolveOnClick || + (options.resolveOnClick.indexOf && + -1 === + options.resolveOnClick.indexOf( + null == (_selectedItem2 = selectedItem) + ? void 0 + : _selectedItem2.Id, + )) || + (resolve(e), (isResolved = !0)), + _dialoghelper.default.close(dlg)); + }), + (itemsContainer.fetchData = getItemsFn(options)), + (itemsContainer.getListOptions = getListOptions.bind(options)), + itemsContainer.addEventListener("change", function (e) { + var arr, + value, + e = e.target.closest("input"), + itemValue = _shortcuts.default.getItemFromChildNode( + e, + null, + this, + ).Id; + (arr = options.selectedValuesClone), + (value = itemValue), + -1 < (value = arr.indexOf(value)) && arr.splice(value, 1), + e.checked && options.selectedValuesClone.push(itemValue); + }), + (itemsContainer.afterRefresh = function () { + itemsContainer.virtualScroller || + callUpdateElement(itemsContainer, options), + _layoutmanager.default.tv && + itemsContainer.insertAdjacentHTML( + "afterbegin", + previewHtml, + ); + }), + new Promise(function (resolve, reject) { + dlg.addEventListener("opened", resolve); + })), + closePromise = _dialoghelper.default.open(dlg); + (useVirtualScroller + ? Promise.resolve() + : refreshItemsContainer.call(dlg) + ) + .then(function () { + var timeout, refreshPromise; + return ( + (dlg.dialogOptions.setDialogSize = !0), + _dialoghelper.default.positionDialog(dlg), + options.timeout && + (timeout = setTimeout(function () { + _dialoghelper.default.close(dlg); + }, options.timeout)), + useVirtualScroller && + (refreshPromise = refreshItemsContainer.call(dlg)), + openPromise.then(function () { + return ( + (refreshPromise || Promise.resolve()).then( + function () { + var skipIfNotEnabled; + this.classList.contains("dlg-autofocus") && + ((skipIfNotEnabled = !this.classList.contains( + "dlg-autofocus-force", + )), + _focusmanager.default.autoFocus( + this.querySelector(".itemsContainer"), + { skipIfNotEnabled: skipIfNotEnabled }, + ) || + (skipIfNotEnabled && + !_focusmanager.default.isAutoFocusEnabled()) || + _focusmanager.default.autoFocus(this, { + skipIfNotEnabled: skipIfNotEnabled, + })); + }.bind(dlg), + ), + itemsContainer.virtualScroller && + itemsContainer.virtualScroller.onResized(), + closePromise.then(function () { + var _selectedItem3; + if ( + ((instance.dlg = null), + timeout && (clearTimeout(timeout), (timeout = null)), + !isResolved) + ) + return null != + (_selectedItem3 = options.multiple + ? options.selectedValuesClone + : options.resolveWithSelectedItem + ? selectedItem + : null == (_selectedItem3 = selectedItem) + ? void 0 + : _selectedItem3.Id) + ? (options.callback && + options.callback(_selectedItem3), + _selectedItem3) + : Promise.reject(); + }) + ); + }) + ); + }) + .then(resolve, reject); + }) + ); + }), + (ActionSheet.prototype.refreshItems = function () { + var _this$dlg = + null == (_this$dlg = this.dlg) + ? void 0 + : _this$dlg.querySelector(".itemsContainer"); + _this$dlg && _this$dlg.refreshItems(); + }), + (ActionSheet.prototype.isShowing = function () { + return null != this.dlg; + }), + (ActionSheet.prototype.autoFocus = function (options) { + console.log("focusing actionsheet"), + _focusmanager.default.autoFocus(this.dlg, options); + }), + (ActionSheet.prototype.close = function () { + var dlg = this.dlg; + dlg && _dialoghelper.default.close(dlg); + }), + (ActionSheet.prototype.destroy = function () { + this.dlg = null; + }), + (_exports.default = { + show: function (options) { + var actionSheet = new ActionSheet(); + return actionSheet.show(options).then( + function (result) { + return actionSheet.destroy(), Promise.resolve(result); + }, + function (result) { + return actionSheet.destroy(), Promise.reject(result); + }, + ); + }, + constructor: ActionSheet, + }); +}); diff --git a/modules/commandprocessor.js b/modules/commandprocessor.js index 5784aa8..6d29212 100644 --- a/modules/commandprocessor.js +++ b/modules/commandprocessor.js @@ -1 +1,921 @@ -define(["exports","./dom.js","./common/globalize.js","./loading/loading.js","./approuter.js","./common/appsettings.js","./common/playback/playbackmanager.js","./emby-apiclient/connectionmanager.js","./common/itemmanager/itemmanager.js","./formhelper.js"],function(_exports,_dom,_globalize,_loading,_approuter,_appsettings,_playbackmanager,_connectionmanager,_itemmanager,_formhelper){function showPrompt(options){return Emby.importModule("./modules/prompt/prompt.js").then(function(prompt){return prompt(options)})}function showAlertAndResolve(options){return function(options){return Emby.importModule("./modules/common/dialogs/alert.js").then(function(alert){return alert(options)})}(options).catch(function(){return Promise.resolve()})}function showConfirm(options){return Emby.importModule("./modules/common/dialogs/confirm.js").then(function(confirm){return confirm(options)})}function downloadItems(items,options){var apiClient=_connectionmanager.default.getApiClient(items[0]);if(options=options||{},"RemoteSubtitle"===items[0].Type)return function(item,apiClient){return _loading.default.show(),apiClient.downloadSubtitles(item.ItemId,item.MediaSourceId,item.Id).then(function(result){return _loading.default.hide(),showToast(_globalize.default.translate("SubtitlesDownloaded")),result},_formhelper.default.handleErrorResponse)}(items[0],apiClient);for(var urls,downloadUrls=[],i=0,length=items.length;i"}function showLyrics(item){var apiClient=_connectionmanager.default.getApiClient(item);return apiClient.getItem(apiClient.getCurrentUserId(),item.Id).then(function(item){var mediaSource=item.MediaSources[0],stream=function(item,mediaSource){return mediaSource.MediaStreams.filter(function(s){return"Subtitle"===s.Type&&s.Index===item.DefaultSubtitleStreamIndex})[0]||mediaSource.MediaStreams.filter(function(s){return"Subtitle"===s.Type})[0]}(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.default.getDisplayName(item),centerText:!1,confirmText:_globalize.default.translate("Close"),item:item})})})}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_exports.default={executeCommand:function(command,items,options){var apiClient,virtualFolder,button,item=items[0];if("open"===command||"link"===command){if("photo"!==item.MediaType)return showItem(item,options);command="play"}if("download"===command)return downloadItems(items,options);if("identify"===command)return function(item){return require(["itemIdentifier"]).then(function(responses){return responses[0].show(item)})}(item);if("resetmetadata"===command)return function(items){return require(["itemIdentifier"]).then(function(responses){return responses[0].resetMetadata(items)})}(items);if("preview"===command)return function(item){var apiClient=_connectionmanager.default.getApiClient(item),url="RemoteSubtitle"===item.Type?apiClient.getUrl("Providers/Subtitles/Subtitles/"+item.Id):apiClient.getUrl("Videos/"+item.ItemId+"/"+item.MediaSourceId+"/Subtitles/"+item.Index+"/Stream."+item.Codec);return apiClient.getText(url).then(function(result){return showAlertAndResolve({preFormattedText:_dom.default.stripScripts(result),confirmButton:!1,title:_globalize.default.translate("Subtitles"),item:item})})}(item);if("removefromresume"===command)return removeFromResume(items);if("removefromnextup"===command)return removeFromResume(items);if("playtrailer"===command)return function(item){var apiClient=_connectionmanager.default.getApiClient(item);return apiClient.getLocalTrailers(apiClient.getCurrentUserId(),item.Id).then(function(trailers){_playbackmanager.default.play({items:trailers})})}(item);if("connecttoserver"===command)return function(item){return"AddServer"===item.Type||"Downloads"===item.Type?_approuter.default.showItem(item):"EmbyConnect"===item.Type?_approuter.default.showConnectLogin():(_loading.default.show(),item=_connectionmanager.default.getServerInfo(item.Id)||item,_connectionmanager.default.connectToServer(item,{enableAutoLogin:_appsettings.default.enableAutoLogin()}).then(function(result){return _approuter.default.handleConnectionResult(result)}))}(item);if("setplaylistindex"===command)return _playbackmanager.default.setCurrentPlaylistItem(item.PlaylistItemId);if("multiselect"===command)return function(options){return options.positionTo.closest(".itemsContainer").showMultiSelect(options.positionTo,!0),Promise.resolve()}(options);if("wakeserver"===command)return wakeServer(_connectionmanager.default.getApiClient(item));switch(command){case"delete":case"canceltimer":case"cancelseriestimer":return _itemmanager.default.deleteItems({items:items,navigate:options.navigateOnDelete||!1,positionTo:options.positionTo});case"edit":return function(items,options){var item=items[0];return"Device"===item.Type||"User"===item.Type||"ActiveSession"===item.Type||"SeriesTimer"===item.Type||"Timer"===item.Type||"LiveTVTunerDevice"===item.Type||"LiveTVGuideSource"===item.Type?showItem(item,options):_itemmanager.default.editItems(items,options)}(items,options);case"editimages":return function(item){return require(["imageEditor"]).then(function(responses){return responses[0].show({itemId:item.Id,serverId:item.ServerId})})}(item);case"instantmix":return _playbackmanager.default.instantMix(item);case"shuffle":return _playbackmanager.default.shuffle(item);case"playallfromhere":return playAllFromHere(options.itemElement,item.ServerId);case"queueallfromhere":return playAllFromHere(options.itemElement,item.ServerId,!0);case"play":return play(items,!0);case"playfrombeginning":return play(items,!1);case"resume":case"playpause":return play(items,!0);case"queue":return play(items,!1,!0);case"queuenext":return play(items,!1,!0,!0);case"artist":return _approuter.default.showItem(item.ArtistItems[0].Id,item.ServerId),Promise.resolve();case"album":return _approuter.default.showItem(item.AlbumId,item.ServerId),Promise.resolve();case"series":return _approuter.default.showItem(item.SeriesId,item.ServerId),Promise.resolve();case"season":return _approuter.default.showItem(item.SeasonId,item.ServerId),Promise.resolve();case"overview":return showAlertAndResolve(_dom.default.stripScripts(item.Overview||""));case"programlink":var program=item.CurrentProgram||item;return program.ServerId||(program.ServerId=item.ServerId),showItem(program,options);case"addtoplaylist":return _itemmanager.default.addToPlaylist(items,options);case"addtocollection":return _itemmanager.default.addToCollection(items,options);case"markplayed":return function(items){var apiClient=_connectionmanager.default.getApiClient(items[0]);return apiClient.markPlayed(apiClient.getCurrentUserId(),items.map(mapToId))}(items);case"markunplayed":return function(items){var apiClient=_connectionmanager.default.getApiClient(items[0]);return apiClient.markUnplayed(apiClient.getCurrentUserId(),items.map(mapToId))}(items);case"favorite":return markFavorite(items,!0);case"unfavorite":return markFavorite(items,!1);case"searchimageproviders":return function(item){return require(["imageDownloader"]).then(function(responses){return(new responses[0]).show({item:item.OwnerItem,imageType:item.ImageType})})}(item);case"addimage":return function(item){return require(["imageUploader"]).then(function(responses){return responses[0].show({imageType:item.ImageType,item:item.OwnerItem})})}(item);case"moveimageleft":return moveImage(item,0,item.ImageIndex-1);case"moveimageright":return moveImage(item,0,item.ImageIndex+1);case"addimagefromurl":return function(item){return showPrompt({title:_globalize.default.translate(item.ImageTag?"HeaderSetImageFromUrl":"HeaderAddImageFromUrl"),label:_globalize.default.translate("LabelUrl")}).then(function(url){return _connectionmanager.default.getApiClient(item).updateItemImageFromUrl(item.Id,item.ImageType,item.ImageIndex,url).catch(_formhelper.default.handleErrorResponse)})}(item);case"togglechanneldisabled":return function(item,options){var apiClient;return options.eventType&&"change"===options.eventType?(options=options.eventTarget.checked,apiClient=_connectionmanager.default.getApiClient(item),_loading.default.show(),apiClient.setChannelDisabled(item,!options).then(function(updatedChannel){_loading.default.hide()})):Promise.resolve()}(item,options);case"toggleitemselected":return function(item,options){var checked;return options.eventType&&"change"===options.eventType&&(checked=options.eventTarget.checked,item.Selected=checked,checked=options.itemElement)&&(options=checked.closest(".itemsContainer"))&&-1!==(checked=options.indexOfElement(checked))&&options.onItemUpdated(checked,item),Promise.resolve()}(item,options);case"togglecheckbox":return function(options){return(options=options.itemElement.querySelector(".chkItemCheckbox")).checked=!options.checked,options.dispatchEvent(new CustomEvent("change",{cancelable:!0,bubbles:!0})),Promise.resolve()}(options);case"movechannelup":return moveChannel(item,0,item.SortIndexNumber-1);case"movechanneldown":return moveChannel(item,0,item.SortIndexNumber+1);case"copytoclipboard":return function(item){return navigator.clipboard.writeText(item.AccessToken)}(item);case"share":return shareItems(items);case"seektoposition":return function(item){return"LyricsLine"===item.Type&&null==item.StartPositionTicks?Promise.resolve():_playbackmanager.default.seek(item.StartPositionTicks||0)}(item);case"sync":return function(items){return require(["syncDialog"]).then(function(responses){return responses[0].showMenu({items:items,mode:"sync"})})}(items);case"synclocal":return function(items){return require(["syncDialog"]).then(function(responses){return responses[0].showMenu({items:items,mode:"download"})})}(items);case"convert":return function(items){return require(["syncDialog"]).then(function(responses){return responses[0].showMenu({items:items,mode:"convert"})})}(items);case"editsubtitles":return editSubtitles(item,options);case"changelibrarycontenttype":return _connectionmanager.default.getApiClient(item),options.positionTo,showAlertAndResolve({title:_globalize.default.translate("HeaderChangeFolderType"),text:_globalize.default.translate("HeaderChangeFolderTypeHelp")});case"renamelibrary":return apiClient=_connectionmanager.default.getApiClient(item),virtualFolder=item,button=options.positionTo,showPrompt({label:_globalize.default.translate("LabelNewName"),confirmText:_globalize.default.translate("ButtonRename"),value:virtualFolder.Name}).then(function(newName){var refreshAfterChange;if(newName&&newName!==virtualFolder.Name)return refreshAfterChange="true"===button.closest(".page").getAttribute("data-refreshlibrary"),apiClient.renameVirtualFolder(virtualFolder,newName,refreshAfterChange)});case"refresh":return _itemmanager.default.refreshMetadata(items,options);case"scan":return _itemmanager.default.scanLibraryFiles(items,options);case"removefromplayqueue":return _itemmanager.default.removeFromPlayQueue(items,options);case"removefromplaylist":return _connectionmanager.default.getApiClient(item).removeItemsFromPlaylist(item.PlaylistId,items);case"removefromcollection":return _connectionmanager.default.getApiClient(item).removeItemsFromCollection(item.CollectionId,items);case"session_stop":return _connectionmanager.default.getApiClient(item).sendPlayStateCommand(item.Id,"Stop");case"session_playpause":return _connectionmanager.default.getApiClient(item).sendPlayStateCommand(item.Id,"PlayPause");case"session_sendmessage":return function(item){return showPrompt({title:_globalize.default.translate("HeaderSendMessage"),label:_globalize.default.translate("LabelMessageText"),confirmText:_globalize.default.translate("ButtonSend")}).then(function(text){return text?_connectionmanager.default.getApiClient(item).sendMessageCommand(item.Id,{Text:text,TimeoutMs:5e3}):Promise.reject()})}(item);case"session_shownowplayingitem":return item.NowPlayingItem?showItem(item.NowPlayingItem,options):Promise.reject();case"serverinfo":return function(item){var apiClient=_connectionmanager.default.getApiClient(item),html="";return html+='
',apiClient.serverVersion()&&(html=(html+='

'+_globalize.default.translate("Version")+"

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

'+_globalize.default.translate("HeaderLastConnectedTo")+"

":html+='

'+_globalize.default.translate("HeaderServerAddress")+"

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

'+_globalize.default.translate("RemoteWAN")+"

")+"
"+item.RemoteAddress+"
"),showAlertAndResolve({title:item.Name,html:html+="
",centerText:!1})}(item);case"record":return record(item,options);case"lyrics":return showLyrics(item);case"manageaccess":return function(item){return require(["ItemAccessDialog"]).then(function(responses){return(new responses[0]).show({item:item})})}(item);case"makepublic":return function(item){return showConfirm({title:_globalize.default.translate("HeaderMakePublic"),text:_globalize.default.translate("MakePublicConfirmation"),confirmText:_globalize.default.translate("HeaderMakePublic"),primary:"cancel"}).then(function(){return _connectionmanager.default.getApiClient(item).makePublic(item.Id).then(function(result){return showToast(_globalize.default.translate("MakingPublic")),Promise.resolve(result)})})}(item);case"makeprivate":return function(item){return showConfirm({title:_globalize.default.translate("HeaderMakePrivate"),text:_globalize.default.translate("MakePrivateConfirmation"),confirmText:_globalize.default.translate("HeaderMakePrivate"),primary:"cancel"}).then(function(){return _connectionmanager.default.getApiClient(item).makePrivate(item.Id).then(function(result){return showToast(_globalize.default.translate("MakingPrivate")),Promise.resolve(result)})})}(item);case"none":return Promise.resolve();case"mergeversions":return _itemmanager.default.groupVersions(items,options);default:return _itemmanager.default.executeCommand(command,items,options)}}}}); \ No newline at end of file +define([ + "exports", + "./dom.js", + "./common/globalize.js", + "./loading/loading.js", + "./approuter.js", + "./common/appsettings.js", + "./common/playback/playbackmanager.js", + "./emby-apiclient/connectionmanager.js", + "./common/itemmanager/itemmanager.js", + "./formhelper.js", +], function ( + _exports, + _dom, + _globalize, + _loading, + _approuter, + _appsettings, + _playbackmanager, + _connectionmanager, + _itemmanager, + _formhelper, +) { + function showPrompt(options) { + return Emby.importModule("./modules/prompt/prompt.js").then( + function (prompt) { + return prompt(options); + }, + ); + } + function showAlertAndResolve(options) { + return (function (options) { + return Emby.importModule("./modules/common/dialogs/alert.js").then( + function (alert) { + return alert(options); + }, + ); + })(options).catch(function () { + return Promise.resolve(); + }); + } + function showConfirm(options) { + return Emby.importModule("./modules/common/dialogs/confirm.js").then( + function (confirm) { + return confirm(options); + }, + ); + } + function downloadItems(items, options) { + var apiClient = _connectionmanager.default.getApiClient(items[0]); + if (((options = options || {}), "RemoteSubtitle" === items[0].Type)) + return (function (item, apiClient) { + return ( + _loading.default.show(), + apiClient + .downloadSubtitles(item.ItemId, item.MediaSourceId, item.Id) + .then(function (result) { + return ( + _loading.default.hide(), + showToast(_globalize.default.translate("SubtitlesDownloaded")), + result + ); + }, _formhelper.default.handleErrorResponse) + ); + })(items[0], apiClient); + for ( + var urls, downloadUrls = [], i = 0, length = items.length; + i < length; + i++ + ) { + var url, + item = items[i]; + "Log" === item.Type + ? downloadUrls.push( + apiClient.getLogDownloadUrl({ + Name: item.Name, + Sanitize: options.Sanitize, + SetFilename: !0, + }), + ) + : "MediaStream" === item.Type && "Subtitle" === item.StreamType + ? ((url = + "Videos/" + + item.ItemId + + "/" + + item.MediaSourceId + + "/Subtitles/" + + item.Index + + "/Stream." + + item.Codec), + downloadUrls.push(apiClient.getUrl(url, { SetFilename: !0 }))) + : ((url = options.mediaSourceId), + (item = apiClient.getItemDownloadUrl(item.Id, url)), + downloadUrls.push(item)); + } + return ( + (urls = downloadUrls), + require(["multi-download"]).then(function (responses) { + (0, responses[0])(urls); + }) + ); + } + function removeFromResume(items) { + var item = items[0], + confirmHeader = + "Audio" === item.MediaType + ? _globalize.default.translate("HeaderRemoveFromContinueListening") + : _globalize.default.translate("HeaderRemoveFromContinueWatching"), + apiClient = _connectionmanager.default.getApiClient(item); + return showConfirm({ + title: confirmHeader, + text: + "Audio" === item.MediaType + ? _globalize.default.translate("RemoveThisTitleFromContinueListening") + : _globalize.default.translate("RemoveThisTitleFromContinueWatching"), + confirmText: _globalize.default.translate("Remove"), + primary: "cancel", + }).then(function () { + return apiClient.updateHideFromResume(items.map(mapToId), !0); + }); + } + function mapToId(i) { + return i.Id; + } + function markFavorite(items, isFavorite) { + var apiClient = _connectionmanager.default.getApiClient(items[0]); + return apiClient.updateFavoriteStatus( + apiClient.getCurrentUserId(), + items.map(mapToId), + isFavorite, + ); + } + function afterWakeAttempt() { + var timeMs, + apiClient = this; + return ( + (timeMs = 12e3), + new Promise(function (resolve, reject) { + setTimeout(resolve, timeMs); + }).then(function () { + return apiClient.getPublicSystemInfo(); + }) + ); + } + function wakeServer(apiClient) { + return require(["loadingDialog"]).then(function (responses) { + var responses = new responses[0]({ + title: _globalize.default.translate("HeaderWakeServer"), + text: _globalize.default.translate("AttemptingWakeServer"), + }), + showDialogPromise = responses.show(), + responses = { dlg: responses, showDialogPromise: showDialogPromise }, + showDialogPromise = afterWakeAttempt.bind(apiClient); + return apiClient + .wakeOnLan() + .then(showDialogPromise, showDialogPromise) + .then( + function () { + var promise = this.showDialogPromise.then(function () { + return showAlertAndResolve({ + text: _globalize.default.translate("WakeServerSuccess"), + title: _globalize.default.translate("HeaderWakeServer"), + }); + }), + dlg = this.dlg; + return dlg.hide(), dlg.destroy(), promise; + }.bind(responses), + function () { + var promise = this.showDialogPromise.then(function () { + return showAlertAndResolve({ + text: _globalize.default.translate("WakeServerError"), + title: _globalize.default.translate("HeaderWakeServer"), + }); + }), + dlg = this.dlg; + return dlg.hide(), dlg.destroy(), promise; + }.bind(responses), + ); + }); + } + function playAllFromHere(itemElement, serverId, queue) { + var fetchAll, + itemsContainer = itemElement.closest(".itemsContainer"), + startIndex = itemsContainer.indexOfElement(itemElement); + if (itemsContainer && itemsContainer.fetchData) + return ( + (limit = 1e3), + queue || (limit += startIndex || 0), + (limit = (fetchAll = !queue && startIndex < limit) + ? { Limit: limit } + : { StartIndex: startIndex, Limit: limit }), + itemsContainer.fetchData(limit).then(function (result) { + return queue + ? _playbackmanager.default.queue({ items: result.Items || result }) + : _playbackmanager.default.play({ + items: result.Items || result, + startIndex: fetchAll ? startIndex : null, + }); + }) + ); + for ( + var itemsContainer = itemElement.parentNode, + limit = itemElement.classList.length + ? "." + itemElement.classList[0] + : "", + cards = itemsContainer.querySelectorAll(limit + "[data-id]"), + ids = [], + foundCard = !1, + i = 0, + length = cards.length; + i < length; + i++ + ) + cards[i] === itemElement && ((foundCard = !0), (startIndex = i)), + (!foundCard && queue) || ids.push(cards[i].getAttribute("data-id")); + return ids.length + ? queue + ? _playbackmanager.default.queue({ ids: ids, serverId: serverId }) + : _playbackmanager.default.play({ + ids: ids, + serverId: serverId, + startIndex: startIndex, + }) + : void 0; + } + function showToast(options) { + Emby.importModule("./modules/toast/toast.js").then(function (toast) { + return toast(options); + }); + } + function notifyAddedToPlayQueue() { + return ( + showToast({ + text: _globalize.default.translate("HeaderAddedToPlayQueue"), + icon: "", + }), + Promise.resolve() + ); + } + function notifyPlayingNext() { + return ( + showToast({ + text: _globalize.default.translate("HeaderPlayingNext"), + icon: "", + }), + Promise.resolve() + ); + } + function play(items, resume, queue, queueNext) { + var method = queue ? (queueNext ? "queueNext" : "queue") : "play", + item = items[0], + resume = { + startPositionTicks: !1 === resume ? 0 : item.StartPositionTicks, + }, + item = + (null != item.ChapterIndex + ? ((resume.ids = [item.Id]), (resume.serverId = item.ServerId)) + : ((resume.items = items), (resume.autoplay = 1 < items.length)), + _playbackmanager.default[method](resume)); + return ( + queueNext + ? (item = item.then(notifyPlayingNext)) + : queue && (item = item.then(notifyAddedToPlayQueue)), + item + ); + } + function showItem(item, options) { + var itemsContainer; + return ( + options && + !options.parentId && + (options.itemElement || options.positionTo) && + (itemsContainer = (options.itemElement || options.positionTo).closest( + ".itemsContainer", + )) && + (options.parentId = + itemsContainer.getAttribute("data-parentid") || null), + _approuter.default.showItem(item, options) + ); + } + function moveImage(item, options, newIndex) { + return _connectionmanager.default + .getApiClient(item) + .updateItemImageIndex(item.Id, item.ImageType, item.ImageIndex, newIndex) + .catch(_formhelper.default.handleErrorResponse); + } + function moveChannel(item, options, newIndex) { + return _connectionmanager.default + .getApiClient(item) + .setChannelSortIndex(item, newIndex); + } + function record(item, options) { + return "TvChannel" === item.Type + ? (function (item, options) { + return require(["channelRecordingCreator"]).then( + function (responses) { + return responses[0].createRecordingForChannel(item, options); + }, + ); + })(item, options) + : (function (item) { + var type = item.Type, + id = item.Id, + serverId = item.ServerId, + timerId = "Timer" === type ? item.Id : item.TimerId, + seriesTimerId = item.SeriesTimerId, + programId = "Program" === type ? id : item.ProgramId, + status = item.Status; + return programId || timerId || seriesTimerId + ? require(["recordingHelper"]).then(function (responses) { + return responses[0].toggleRecording( + serverId, + "Program" === type ? id : null, + timerId, + status, + seriesTimerId, + ); + }) + : Promise.resolve(); + })(item); + } + function editSubtitles(item, options) { + return require(["subtitleEditor"]).then(function (responses) { + return responses[0].show({ + item: item, + mediaSource: (function (mediaSources, mediaSourceId) { + for (var i = 0, length = mediaSources.length; i < length; i++) + if (mediaSources[i].Id === mediaSourceId) return mediaSources[i]; + return mediaSources[0]; + })(item.MediaSources, options.mediaSourceId), + }); + }); + } + function shareItems(items) { + var title, + items = items[0], + shareTitle = _itemmanager.default.getDisplayName(items), + shareText = shareTitle, + apiClient = + (items.Overview && (shareText += " - " + items.Overview), + _connectionmanager.default.getApiClient(items)); + if ("Photo" === items.Type) { + var shareUrl = apiClient.getImageUrl(items.Id, { + type: "Primary", + tag: null == (items = items.ImageTags) ? void 0 : items.Primary, + format: "png", + }); + if ("android" !== globalThis.appMode && "ios" !== globalThis.appMode) + return ( + (title = shareTitle), + fetch(shareUrl, { credentials: "same-origin" }) + .then(function (r) { + return r.blob(); + }) + .then(function (blob) { + blob = new File([blob], "image.png", { type: "image/png" }); + return navigator.share({ files: [blob], title: title }); + }) + ); + } else { + items = + null == (items = apiClient.serverInfo()) ? void 0 : items.RemoteAddress; + shareUrl = apiClient.getUrl("share", {}, items).replace("/share", ""); + } + return navigator.share({ + title: shareTitle, + text: shareText, + url: shareUrl, + }); + } + function getLyricsTrackEventHtml(item, index) { + var html = '
'; + return html + item.Text + "
"; + } + function showLyrics(item) { + var apiClient = _connectionmanager.default.getApiClient(item); + return apiClient + .getItem(apiClient.getCurrentUserId(), item.Id) + .then(function (item) { + var mediaSource = item.MediaSources[0], + stream = (function (item, mediaSource) { + return ( + mediaSource.MediaStreams.filter(function (s) { + return ( + "Subtitle" === s.Type && + s.Index === item.DefaultSubtitleStreamIndex + ); + })[0] || + mediaSource.MediaStreams.filter(function (s) { + return "Subtitle" === s.Type; + })[0] + ); + })(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.default.getDisplayName(item), + centerText: !1, + confirmText: _globalize.default.translate("Close"), + item: item, + }); + }); + }); + } + Object.defineProperty(_exports, "__esModule", { value: !0 }), + (_exports.default = void 0), + (_exports.default = { + executeCommand: function (command, items, options) { + var apiClient, + virtualFolder, + button, + item = items[0]; + if ("open" === command || "link" === command) { + if ("photo" !== item.MediaType) return showItem(item, options); + command = "play"; + } + if ("download" === command) return downloadItems(items, options); + if ("identify" === command) + return (function (item) { + return require(["itemIdentifier"]).then(function (responses) { + return responses[0].show(item); + }); + })(item); + if ("resetmetadata" === command) + return (function (items) { + return require(["itemIdentifier"]).then(function (responses) { + return responses[0].resetMetadata(items); + }); + })(items); + if ("preview" === command) + return (function (item) { + var apiClient = _connectionmanager.default.getApiClient(item), + url = + "RemoteSubtitle" === item.Type + ? apiClient.getUrl("Providers/Subtitles/Subtitles/" + item.Id) + : apiClient.getUrl( + "Videos/" + + item.ItemId + + "/" + + item.MediaSourceId + + "/Subtitles/" + + item.Index + + "/Stream." + + item.Codec, + ); + return apiClient.getText(url).then(function (result) { + return showAlertAndResolve({ + preFormattedText: _dom.default.stripScripts(result), + confirmButton: !1, + title: _globalize.default.translate("Subtitles"), + item: item, + }); + }); + })(item); + if ("removefromresume" === command) return removeFromResume(items); + if ("removefromnextup" === command) return removeFromResume(items); + if ("playtrailer" === command) + return (function (item) { + var apiClient = _connectionmanager.default.getApiClient(item); + return apiClient + .getLocalTrailers(apiClient.getCurrentUserId(), item.Id) + .then(function (trailers) { + _playbackmanager.default.play({ items: trailers }); + }); + })(item); + if ("connecttoserver" === command) + return (function (item) { + return "AddServer" === item.Type || "Downloads" === item.Type + ? _approuter.default.showItem(item) + : "EmbyConnect" === item.Type + ? _approuter.default.showConnectLogin() + : (_loading.default.show(), + (item = + _connectionmanager.default.getServerInfo(item.Id) || item), + _connectionmanager.default + .connectToServer(item, { + enableAutoLogin: _appsettings.default.enableAutoLogin(), + }) + .then(function (result) { + return _approuter.default.handleConnectionResult(result); + })); + })(item); + if ("setplaylistindex" === command) + return _playbackmanager.default.setCurrentPlaylistItem( + item.PlaylistItemId, + ); + if ("multiselect" === command) + return (function (options) { + return ( + options.positionTo + .closest(".itemsContainer") + .showMultiSelect(options.positionTo, !0), + Promise.resolve() + ); + })(options); + if ("wakeserver" === command) + return wakeServer(_connectionmanager.default.getApiClient(item)); + switch (command) { + case "delete": + case "canceltimer": + case "cancelseriestimer": + return _itemmanager.default.deleteItems({ + items: items, + navigate: options.navigateOnDelete || !1, + positionTo: options.positionTo, + }); + case "edit": + return (function (items, options) { + var item = items[0]; + return "Device" === item.Type || + "User" === item.Type || + "ActiveSession" === item.Type || + "SeriesTimer" === item.Type || + "Timer" === item.Type || + "LiveTVTunerDevice" === item.Type || + "LiveTVGuideSource" === item.Type + ? showItem(item, options) + : _itemmanager.default.editItems(items, options); + })(items, options); + case "editimages": + return (function (item) { + return require(["imageEditor"]).then(function (responses) { + return responses[0].show({ + itemId: item.Id, + serverId: item.ServerId, + }); + }); + })(item); + case "instantmix": + return _playbackmanager.default.instantMix(item); + case "shuffle": + return _playbackmanager.default.shuffle(item); + case "playallfromhere": + return playAllFromHere(options.itemElement, item.ServerId); + case "queueallfromhere": + return playAllFromHere(options.itemElement, item.ServerId, !0); + case "play": + return play(items, !0); + case "playfrombeginning": + return play(items, !1); + case "resume": + case "playpause": + return play(items, !0); + case "queue": + return play(items, !1, !0); + case "queuenext": + return play(items, !1, !0, !0); + case "artist": + return ( + _approuter.default.showItem( + item.ArtistItems[0].Id, + item.ServerId, + ), + Promise.resolve() + ); + case "album": + return ( + _approuter.default.showItem(item.AlbumId, item.ServerId), + Promise.resolve() + ); + case "series": + return ( + _approuter.default.showItem(item.SeriesId, item.ServerId), + Promise.resolve() + ); + case "season": + return ( + _approuter.default.showItem(item.SeasonId, item.ServerId), + Promise.resolve() + ); + case "overview": + return showAlertAndResolve( + _dom.default.stripScripts(item.Overview || ""), + ); + case "programlink": + var program = item.CurrentProgram || item; + return ( + program.ServerId || (program.ServerId = item.ServerId), + showItem(program, options) + ); + case "addtoplaylist": + return _itemmanager.default.addToPlaylist(items, options); + case "addtocollection": + return _itemmanager.default.addToCollection(items, options); + case "markplayed": + return (function (items) { + var apiClient = _connectionmanager.default.getApiClient(items[0]); + return apiClient.markPlayed( + apiClient.getCurrentUserId(), + items.map(mapToId), + ); + })(items); + case "markunplayed": + return (function (items) { + var apiClient = _connectionmanager.default.getApiClient(items[0]); + return apiClient.markUnplayed( + apiClient.getCurrentUserId(), + items.map(mapToId), + ); + })(items); + case "favorite": + return markFavorite(items, !0); + case "unfavorite": + return markFavorite(items, !1); + case "searchimageproviders": + return (function (item) { + return require(["imageDownloader"]).then(function (responses) { + return new responses[0]().show({ + item: item.OwnerItem, + imageType: item.ImageType, + }); + }); + })(item); + case "addimage": + return (function (item) { + return require(["imageUploader"]).then(function (responses) { + return responses[0].show({ + imageType: item.ImageType, + item: item.OwnerItem, + }); + }); + })(item); + case "moveimageleft": + return moveImage(item, 0, item.ImageIndex - 1); + case "moveimageright": + return moveImage(item, 0, item.ImageIndex + 1); + case "addimagefromurl": + return (function (item) { + return showPrompt({ + title: _globalize.default.translate( + item.ImageTag + ? "HeaderSetImageFromUrl" + : "HeaderAddImageFromUrl", + ), + label: _globalize.default.translate("LabelUrl"), + }).then(function (url) { + return _connectionmanager.default + .getApiClient(item) + .updateItemImageFromUrl( + item.Id, + item.ImageType, + item.ImageIndex, + url, + ) + .catch(_formhelper.default.handleErrorResponse); + }); + })(item); + case "togglechanneldisabled": + return (function (item, options) { + var apiClient; + return options.eventType && "change" === options.eventType + ? ((options = options.eventTarget.checked), + (apiClient = _connectionmanager.default.getApiClient(item)), + _loading.default.show(), + apiClient + .setChannelDisabled(item, !options) + .then(function (updatedChannel) { + _loading.default.hide(); + })) + : Promise.resolve(); + })(item, options); + case "toggleitemselected": + return (function (item, options) { + var checked; + return ( + options.eventType && + "change" === options.eventType && + ((checked = options.eventTarget.checked), + (item.Selected = checked), + (checked = options.itemElement)) && + (options = checked.closest(".itemsContainer")) && + -1 !== (checked = options.indexOfElement(checked)) && + options.onItemUpdated(checked, item), + Promise.resolve() + ); + })(item, options); + case "togglecheckbox": + return (function (options) { + return ( + ((options = + options.itemElement.querySelector( + ".chkItemCheckbox", + )).checked = !options.checked), + options.dispatchEvent( + new CustomEvent("change", { cancelable: !0, bubbles: !0 }), + ), + Promise.resolve() + ); + })(options); + case "movechannelup": + return moveChannel(item, 0, item.SortIndexNumber - 1); + case "movechanneldown": + return moveChannel(item, 0, item.SortIndexNumber + 1); + case "copytoclipboard": + return (function (item) { + return navigator.clipboard.writeText(item.AccessToken); + })(item); + case "share": + return shareItems(items); + case "seektoposition": + return (function (item) { + return "LyricsLine" === item.Type && + null == item.StartPositionTicks + ? Promise.resolve() + : _playbackmanager.default.seek(item.StartPositionTicks || 0); + })(item); + case "sync": + return (function (items) { + return require(["syncDialog"]).then(function (responses) { + return responses[0].showMenu({ items: items, mode: "sync" }); + }); + })(items); + case "synclocal": + return (function (items) { + return require(["syncDialog"]).then(function (responses) { + return responses[0].showMenu({ + items: items, + mode: "download", + }); + }); + })(items); + case "convert": + return (function (items) { + return require(["syncDialog"]).then(function (responses) { + return responses[0].showMenu({ items: items, mode: "convert" }); + }); + })(items); + case "editsubtitles": + return editSubtitles(item, options); + case "changelibrarycontenttype": + return ( + _connectionmanager.default.getApiClient(item), + options.positionTo, + showAlertAndResolve({ + title: _globalize.default.translate("HeaderChangeFolderType"), + text: _globalize.default.translate( + "HeaderChangeFolderTypeHelp", + ), + }) + ); + case "renamelibrary": + return ( + (apiClient = _connectionmanager.default.getApiClient(item)), + (virtualFolder = item), + (button = options.positionTo), + showPrompt({ + label: _globalize.default.translate("LabelNewName"), + confirmText: _globalize.default.translate("ButtonRename"), + value: virtualFolder.Name, + }).then(function (newName) { + var refreshAfterChange; + if (newName && newName !== virtualFolder.Name) + return ( + (refreshAfterChange = + "true" === + button + .closest(".page") + .getAttribute("data-refreshlibrary")), + apiClient.renameVirtualFolder( + virtualFolder, + newName, + refreshAfterChange, + ) + ); + }) + ); + case "refresh": + return _itemmanager.default.refreshMetadata(items, options); + case "scan": + return _itemmanager.default.scanLibraryFiles(items, options); + case "removefromplayqueue": + return _itemmanager.default.removeFromPlayQueue(items, options); + case "removefromplaylist": + return _connectionmanager.default + .getApiClient(item) + .removeItemsFromPlaylist(item.PlaylistId, items); + case "removefromcollection": + return _connectionmanager.default + .getApiClient(item) + .removeItemsFromCollection(item.CollectionId, items); + case "session_stop": + return _connectionmanager.default + .getApiClient(item) + .sendPlayStateCommand(item.Id, "Stop"); + case "session_playpause": + return _connectionmanager.default + .getApiClient(item) + .sendPlayStateCommand(item.Id, "PlayPause"); + case "session_sendmessage": + return (function (item) { + return showPrompt({ + title: _globalize.default.translate("HeaderSendMessage"), + label: _globalize.default.translate("LabelMessageText"), + confirmText: _globalize.default.translate("ButtonSend"), + }).then(function (text) { + return text + ? _connectionmanager.default + .getApiClient(item) + .sendMessageCommand(item.Id, { + Text: text, + TimeoutMs: 5e3, + }) + : Promise.reject(); + }); + })(item); + case "session_shownowplayingitem": + return item.NowPlayingItem + ? showItem(item.NowPlayingItem, options) + : Promise.reject(); + case "serverinfo": + return (function (item) { + var apiClient = _connectionmanager.default.getApiClient(item), + html = ""; + return ( + (html += '
'), + apiClient.serverVersion() && + (html = + (html += + '

' + + _globalize.default.translate("Version") + + "

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

' + + _globalize.default.translate("HeaderLastConnectedTo") + + "

") + : (html += + '

' + + _globalize.default.translate("HeaderServerAddress") + + "

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

' + + _globalize.default.translate("RemoteWAN") + + "

") + + "
" + + item.RemoteAddress + + "
"), + showAlertAndResolve({ + title: item.Name, + html: (html += "
"), + centerText: !1, + }) + ); + })(item); + case "record": + return record(item, options); + case "lyrics": + return showLyrics(item); + case "manageaccess": + return (function (item) { + return require(["ItemAccessDialog"]).then(function (responses) { + return new responses[0]().show({ item: item }); + }); + })(item); + case "makepublic": + return (function (item) { + return showConfirm({ + title: _globalize.default.translate("HeaderMakePublic"), + text: _globalize.default.translate("MakePublicConfirmation"), + confirmText: _globalize.default.translate("HeaderMakePublic"), + primary: "cancel", + }).then(function () { + return _connectionmanager.default + .getApiClient(item) + .makePublic(item.Id) + .then(function (result) { + return ( + showToast(_globalize.default.translate("MakingPublic")), + Promise.resolve(result) + ); + }); + }); + })(item); + case "makeprivate": + return (function (item) { + return showConfirm({ + title: _globalize.default.translate("HeaderMakePrivate"), + text: _globalize.default.translate("MakePrivateConfirmation"), + confirmText: _globalize.default.translate("HeaderMakePrivate"), + primary: "cancel", + }).then(function () { + return _connectionmanager.default + .getApiClient(item) + .makePrivate(item.Id) + .then(function (result) { + return ( + showToast(_globalize.default.translate("MakingPrivate")), + Promise.resolve(result) + ); + }); + }); + })(item); + case "none": + return Promise.resolve(); + case "mergeversions": + return _itemmanager.default.groupVersions(items, options); + default: + return _itemmanager.default.executeCommand(command, items, options); + } + }, + }); +}); diff --git a/modules/multidownload.js b/modules/multidownload.js index 00c766e..736d321 100644 --- a/modules/multidownload.js +++ b/modules/multidownload.js @@ -1 +1,25 @@ -define(["exports"],function(_exports){function download(url){var a=document.createElement("a");a.download="",a.href=url,a.dispatchEvent(new MouseEvent("click"))}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=function(urls){if(!urls)throw new Error("`urls` required");var delay=0;urls.forEach(function(url){if(!function(url){var a=document.createElement("a");return a.href=url,location.hostname===a.hostname&&location.protocol===a.protocol}(url))return setTimeout(download.bind(null,url),100*++delay);download(url)})}}); \ No newline at end of file +define(["exports"], function (_exports) { + function download(url) { + var a = document.createElement("a"); + (a.download = ""), (a.href = url), a.dispatchEvent(new MouseEvent("click")); + } + Object.defineProperty(_exports, "__esModule", { value: !0 }), + (_exports.default = function (urls) { + if (!urls) throw new Error("`urls` required"); + var delay = 0; + urls.forEach(function (url) { + if ( + !(function (url) { + var a = document.createElement("a"); + return ( + (a.href = url), + location.hostname === a.hostname && + location.protocol === a.protocol + ); + })(url) + ) + return setTimeout(download.bind(null, url), 100 * ++delay); + download(url); + }); + }); +});