dashboard-ui/modules/mediainfo/mediainfo.js
2023-08-31 15:30:17 +02:00

1 line
17 KiB
JavaScript

define(["exports","./../common/datetime.js","./../common/globalize.js","./../common/textencoding.js","./../common/itemhelper.js","./../common/itemmanager/itemmanager.js","./../indicators/indicators.js","./../approuter.js","./../emby-elements/emby-button/emby-button.js","./../common/dataformatter.js"],function(_exports,_datetime,_globalize,_textencoding,_itemhelper,_itemmanager,_indicators,_approuter,_embyButton,_dataformatter){function getProgramInfoHtml(item,options){var date,text,html="",miscInfo=[];if(item.StartDate&&!1!==options.programTime)try{text="",date=new Date(Date.parse(item.StartDate)),!1!==options.startDate&&(text+=_datetime.default.toLocaleDateString(date,{weekday:"short",month:"short",day:"numeric"})),text+=" "+_datetime.default.getDisplayTime(date),item.EndDate&&(date=new Date(Date.parse(item.EndDate)),text+=" &ndash; "+_datetime.default.getDisplayTime(date)),miscInfo.push(text)}catch(e){console.log("Error parsing date: "+item.StartDate)}return item.ChannelName&&(date=item.ChannelName,item.ChannelNumber&&(date+=" "+item.ChannelNumber),options.interactive&&item.ChannelId?miscInfo.push({html:'<a is="emby-linkbutton" style="font-weight:inherit;" class="button-link button-link-color-inherit mediaInfoItem" href="'+_approuter.default.getRouteUrl({ServerId:item.ServerId,Type:"TvChannel",Name:item.ChannelName,Id:item.ChannelId})+'">'+date+"</a>"}):miscInfo.push(date)),options.timerIndicator&&(text=function(item){var status,itemType=item.Type;if("SeriesTimer"===itemType)return'<i class="md-icon mediaInfoItem mediaInfoIconItem mediaInfoTimerIcon">&#xE062;</i>';if(item.TimerId||item.SeriesTimerId)status=item.Status||"Cancelled";else{if("Timer"!==itemType)return"";status=item.Status}return item.SeriesTimerId?"Cancelled"!==status?'<i class="md-icon mediaInfoItem mediaInfoIconItem mediaInfoTimerIcon">&#xE062;</i>':'<i class="md-icon mediaInfoItem mediaInfoIconItem">&#xE062;</i>':'<i class="md-icon mediaInfoItem mediaInfoIconItem mediaInfoTimerIcon">&#xE061;</i>'}(item))&&miscInfo.push({html:text}),html+=miscInfo.map(getMediaInfoItem).join("")}function getMediaInfoHtml(item,options){var showFolderRuntime,html="",miscInfo=[],itemType=(options=options||{},item.Type);switch(itemType){case"MusicAlbum":case"MusicArtist":case"Playlist":case"MusicGenre":case"BoxSet":showFolderRuntime=!0}if(("Episode"===itemType||"Photo"===item.MediaType)&&!1!==options.originalAirDate&&item.PremiereDate)try{date=new Date(Date.parse(item.PremiereDate)),text=_datetime.default.toLocaleDateString(date,{month:"short",day:"numeric",year:"numeric"}),miscInfo.push(text)}catch(e){console.log("Error parsing date: "+item.PremiereDate)}if("SeriesTimer"===itemType&&(item.RecordAnyTime?miscInfo.push(_globalize.default.translate("Anytime")):item.StartDate&&miscInfo.push(_datetime.default.getDisplayTime(item.StartDate)),item.RecordAnyChannel||null==(_item$ChannelIds=item.ChannelIds)||!_item$ChannelIds.length?miscInfo.push(_globalize.default.translate("AllChannels")):miscInfo.push(item.ChannelName||_globalize.default.translate("OneChannel"))),item.StartDate&&"Program"!==itemType&&"SeriesTimer"!==itemType&&"Timer"!==itemType)try{date=new Date(Date.parse(item.StartDate)),text=_datetime.default.toLocaleDateString(date,{month:"short",day:"numeric",year:"numeric"}),miscInfo.push(text),"Recording"!==itemType&&(text=_datetime.default.getDisplayTime(date),miscInfo.push(text))}catch(e){console.log("Error parsing date: "+item.StartDate)}if(!1!==options.year&&item.ProductionYear&&"Series"===itemType)if("Continuing"===item.Status)miscInfo.push(_globalize.default.translate("SeriesYearToPresent",item.ProductionYear));else if(item.ProductionYear){if(text=item.ProductionYear,item.EndDate)try{var endYear=new Date(Date.parse(item.EndDate)).getFullYear();endYear!==item.ProductionYear&&(text+=" &ndash; "+endYear)}catch(e){console.log("Error parsing date: "+item.EndDate)}miscInfo.push(text)}if("Series"===itemType&&(_item$ChannelIds="",item.Studios&&item.Studios.length&&(endYear=item.Studios[0],_item$ChannelIds&&(_item$ChannelIds+=" on "),_item$ChannelIds+='<a style="font-weight:inherit;" class="button-link button-link-color-inherit" is="emby-linkbutton" href="'+_approuter.default.getRouteUrl({Name:endYear.Name,Type:"Studio",ServerId:item.ServerId,Id:endYear.Id})+'">'+endYear.Name+"</a>"),_item$ChannelIds)&&miscInfo.push(_item$ChannelIds),!1!==options.programIndicator&&(item.IsLive?miscInfo.push({html:'<div class="mediaInfoProgramAttribute mediaInfoItem liveTvProgram">'+_globalize.default.translate("Live")+"</div>"}):item.IsPremiere?miscInfo.push({html:'<div class="mediaInfoProgramAttribute mediaInfoItem premiereTvProgram">'+_globalize.default.translate("Premiere")+"</div>"}):item.IsNew?miscInfo.push({html:'<div class="mediaInfoProgramAttribute mediaInfoItem newTvProgram">'+_globalize.default.translate("AttributeNew")+"</div>"}):item.IsRepeat&&miscInfo.push({html:'<div class="mediaInfoProgramAttribute mediaInfoItem repeatTvProgram secondaryText">'+_globalize.default.translate("Repeat")+"</div>"})),"Program"===itemType)if((item.IsSeries||item.EpisodeTitle)&&!1!==options.episodeTitle)(text=_itemmanager.default.getDisplayName(item,{includeIndexNumber:options.episodeTitleIndexNumber}))&&miscInfo.push(text);else if(item.IsMovie&&item.ProductionYear&&!1!==options.originalAirDate)miscInfo.push(item.ProductionYear);else if(item.PremiereDate&&!1!==options.originalAirDate)try{date=new Date(Date.parse(item.PremiereDate)),text=_globalize.default.translate("OriginalAirDateValue",_datetime.default.toLocaleDateString(date,{month:"short",day:"numeric",year:"numeric"})),miscInfo.push(text)}catch(e){console.log("Error parsing date: "+item.PremiereDate)}else item.ProductionYear&&miscInfo.push(item.ProductionYear);if(!1!==options.year&&"Series"!==itemType&&("Episode"!==itemType||!item.PremiereDate)&&"Person"!==itemType&&"Photo"!==item.MediaType&&"Program"!==itemType&&"Season"!==itemType)if(item.ProductionYear)miscInfo.push(item.ProductionYear);else if(item.PremiereDate)try{text=new Date(Date.parse(item.PremiereDate)).getFullYear(),miscInfo.push(text)}catch(e){console.log("Error parsing date: "+item.PremiereDate)}var date,_item$ChannelIds=(null==(endYear=options.mediaSource)?void 0:endYear.RunTimeTicks)||item.RunTimeTicks,text=("Series"===itemType||"Program"===itemType||showFolderRuntime||!1===options.runtime||_item$ChannelIds&&miscInfo.push("Audio"===itemType?_datetime.default.getDisplayRunningTime(_item$ChannelIds):_datetime.default.getHumanReadableRuntime(_item$ChannelIds)),item.OfficialRating&&miscInfo.push(item.OfficialRating),showFolderRuntime&&((date=item.SongCount||item.ChildCount)&&miscInfo.push("BoxSet"===itemType?1===date?_globalize.default.translate("ValueOneItem"):_globalize.default.translate("ItemCount",date):1===date?_globalize.default.translate("OneTrack"):_globalize.default.translate("TrackCount",date)),_item$ChannelIds)&&"Playlist"===itemType&&miscInfo.push(_datetime.default.getHumanReadableRuntime(_item$ChannelIds)),"Series"===itemType&&item.ChildCount&&(1===item.ChildCount?miscInfo.push(_globalize.default.translate("OneSeason")):miscInfo.push(_globalize.default.translate("NumberSeasonsValue",item.ChildCount))),item.Video3DFormat&&miscInfo.push("3D"),"Photo"===item.MediaType&&item.Width&&item.Height&&miscInfo.push(item.Width+"x"+item.Height),options.container&&item.Container&&miscInfo.push(item.Container.toUpperCase()),item.Bitrate||item.BitRate);return options.bitrate&&text&&miscInfo.push(_dataformatter.default.bitrateToString(text)),"RemoteSubtitle"===itemType&&(null!=item.DownloadCount&&miscInfo.push(_globalize.default.translate("DownloadsValue",item.DownloadCount)),item.IsForced&&(html+='<div class="align-items-center justify-content-center mediaInfoItem accentText" style="font-weight:500;">'+_globalize.default.translate("Forced")+"</div>"),item.IsHashMatch)&&(html+='<div class="align-items-center justify-content-center mediaInfoItem accentText" style="font-weight:500;">'+_globalize.default.translate("HashMatch")+"</div>"),!1!==options.CommunityRating&&item.CommunityRating&&"RemoteSubtitle"!==item.Type&&(html+=getStarIconsHtml(item)),item.CriticRating&&!1!==options.criticRating&&(html+=getCriticRating(item)),html+=miscInfo.map(getMediaInfoItem).join(""),item.HasSubtitles&&!1!==options.subtitles&&(html+='<div class="mediaInfoItem mediaInfoText closedCaptionMediaInfoText">CC</div>'),options.dateAdded&&_itemhelper.default.enableDateAddedDisplay(item)&&(endYear=new Date(Date.parse(item.DateCreated)),html+=getMediaInfoItem(_globalize.default.translate("AddedOnValue",_datetime.default.toLocaleDateString(endYear,{month:"short",day:"numeric",year:"numeric"})))),options.genres&&(html+=function(item,options){var type,context=options.context,genres=(item.GenreItems||[]).slice(0),itemType=item.Type;switch("Playlist"!==itemType&&"BoxSet"!==itemType&&"MusicArtist"!==itemType||5<genres.length&&(genres.length=5),context){case"games":type="GameGenre";break;case"music":type="MusicGenre";break;default:type="Genre"}return itemType=options.genreConcat||", ",options=(options=genres.map(function(p){return'<a class="button-link button-link-color-inherit" is="emby-linkbutton" style="font-weight:inherit;" href="'+_approuter.default.getRouteUrl({Name:p.Name,Type:type,ServerId:item.ServerId,Id:p.Id},{context:context})+'">'+_textencoding.default.htmlEncode(p.Name)+"</a>"}).join(itemType))&&'<div class="mediaInfoItem" style="white-space:normal;">'+options+"</div>"}(item,options)),!1!==options.endsAt&&(date=getEndsAt(item,options.mediaSource))&&(html+=getMediaInfoItem(date,("endsAt "+(options.endsAtClass||"")).trim())),html+=_indicators.default.getMissingIndicator(item)}function getEndsAt(item,mediaSource){if((mediaSource=mediaSource||item,"Video"===item.MediaType&&mediaSource.RunTimeTicks)&&(!item.StartDate&&"Program"!==item.Type))return item=item.UserData&&item.UserData.PlaybackPositionTicks||0,getEndsAtFromPosition(mediaSource.RunTimeTicks,item);return null}function getEndsAtFromPosition(runtimeTicks,positionTicks,includeText){runtimeTicks=Date.now()+(runtimeTicks-(positionTicks||0))/1e4,runtimeTicks=new Date(runtimeTicks),positionTicks=_datetime.default.getDisplayTime(runtimeTicks);return!1===includeText?positionTicks:_globalize.default.translate("EndsAtValue",positionTicks)}function getMediaInfoItem(m,cssClass){cssClass="string"==typeof cssClass?cssClass+" mediaInfoItem":"mediaInfoItem";var mediaInfoText=m;if("string"!=typeof m&&"number"!=typeof m){if(m.html)return m.html;mediaInfoText=m.text,cssClass+=" "+m.cssClass}return'<div class="'+cssClass+'">'+mediaInfoText+"</div>"}function getCriticRating(item,options){var outerClass="mediaInfoItem mediaInfoCriticRating";return options&&options.outerClass&&(outerClass+=" "+options.outerClass),'<div class="'+outerClass+'"><div class="mediaInfoCriticRatingImage '+(60<=item.CriticRating?"mediaInfoCriticRatingFresh":"mediaInfoCriticRatingRotten")+'"></div>'+item.CriticRating+"%</div>"}function getStarIconsHtml(item,options){var outerClass,html="",item=item.CommunityRating;return item&&(outerClass="starRatingContainer mediaInfoItem",options&&options.outerClass&&(outerClass+=" "+options.outerClass),html=(html=html+'<div class="'+outerClass+'"><i class="md-icon starIcon">&#xE838;</i>')+_dataformatter.default.numberToString(item,1)+"</div>"),html}function fillPrimaryMediaInfo(elem,item,options){var html=getPrimaryMediaInfoHtml(item,options);(elem.innerHTML=html)?elem.classList.remove("hide"):elem.classList.add("hide"),afterFill(elem,item,options)}function afterFill(elem,item,options){!1!==options.endsAt&&(elem=elem.querySelector(".endsAt"))&&!function(elem,item,mediaSource){var interval=setInterval(function(){document.body.contains(elem)?elem.innerHTML=getEndsAt(item,mediaSource):clearInterval(interval)},6e4)}(elem,item,options.mediaSource)}function getPrimaryMediaInfoHtml(item,options){return null==(options=options||{}).interactive&&(options.interactive=!1),getMediaInfoHtml(item,options)}function getSecondaryMediaInfoHtml(item,options){null==(options=options||{}).interactive&&(options.interactive=!1);var itemType=item.Type;return"Program"===itemType||"Timer"===itemType||"Recording"===itemType?getProgramInfoHtml(item,options):""}function createAttribute(label,value,className){return'<div class="'+(className=(className=className?className+" ":"")+" flex"+" mediaStreamAttribute")+'"><span class="mediaInfoAttributeLabel">'+label+'</span><span class="mediaInfoAttributeValue">'+value+"</span></div>"}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,require(["material-icons","css!modules/mediainfo/mediainfo.css","programStyles"]);var _default={getMediaInfoHtml:getPrimaryMediaInfoHtml,fill:fillPrimaryMediaInfo,getEndsAt:getEndsAt,getEndsAtFromPosition:getEndsAtFromPosition,getPrimaryMediaInfoHtml:getPrimaryMediaInfoHtml,getSecondaryMediaInfoHtml:getSecondaryMediaInfoHtml,fillPrimaryMediaInfo:fillPrimaryMediaInfo,fillSecondaryMediaInfo:function(elem,item,options){var html=getSecondaryMediaInfoHtml(item,options);(elem.innerHTML=html)?elem.classList.remove("hide"):elem.classList.add("hide"),afterFill(elem,item,options)},getResolutionText:_dataformatter.default.getResolutionText,pushMediaStreamLines:function(stream,options,lines,icon){var streamType=stream.StreamType,streamTypeLocalizationKey="EmbeddedImage"===streamType?"Image":streamType,streamTypeLocalizationKey=("Lyrics"===stream.SubtitleType&&(streamTypeLocalizationKey="Lyrics"),_globalize.default.translate(streamTypeLocalizationKey));lines.push('<h3 style="margin: .6em 0 .8em;" class="flex align-items-center">'+(streamTypeLocalizationKey=icon?'<i class="md-icon autortl mediaStreamTypeIcon">'+icon+"</i>"+streamTypeLocalizationKey:streamTypeLocalizationKey)+"</h3>"),stream.DisplayTitle&&lines.push(createAttribute(_globalize.default.translate("Title"),stream.DisplayTitle)),stream.Title&&stream.Title!==stream.DisplayTitle&&lines.push(createAttribute(_globalize.default.translate("HeaderEmbeddedTitle"),stream.Title)),(stream.DisplayLanguage||stream.Language)&&"Video"!==streamType&&lines.push(createAttribute(_globalize.default.translate("Language"),stream.DisplayLanguage||stream.Language)),stream.Codec&&lines.push(createAttribute(_globalize.default.translate("Codec"),stream.Codec.toUpperCase())),stream.CodecTag&&lines.push(createAttribute(_globalize.default.translate("HeaderCodecTag"),stream.CodecTag)),stream.Profile&&lines.push(createAttribute(_globalize.default.translate("Profile"),stream.Profile)),stream.Level&&lines.push(createAttribute(_globalize.default.translate("Level"),stream.Level)),(stream.Width||stream.Height)&&lines.push(createAttribute(_globalize.default.translate("Resolution"),stream.Width+"x"+stream.Height)),stream.AspectRatio&&"mjpeg"!==stream.Codec&&lines.push(createAttribute(_globalize.default.translate("HeaderAspectRatio"),stream.AspectRatio)),"Video"===streamType&&lines.push(createAttribute(_globalize.default.translate("Interlaced"),stream.IsInterlaced?_globalize.default.translate("Yes"):_globalize.default.translate("No"))),(stream.AverageFrameRate||stream.RealFrameRate)&&lines.push(createAttribute(_globalize.default.translate("Framerate"),_dataformatter.default.numberToString(stream.AverageFrameRate||stream.RealFrameRate,3))),stream.ChannelLayout&&lines.push(createAttribute(_globalize.default.translate("Layout"),stream.ChannelLayout)),stream.Channels&&lines.push(createAttribute(_globalize.default.translate("Channels"),stream.Channels+" ch")),stream.BitRate&&"mjpeg"!==stream.Codec&&lines.push(createAttribute(_globalize.default.translate("Bitrate"),_dataformatter.default.bitrateToString(stream.BitRate))),stream.SampleRate&&lines.push(createAttribute(_globalize.default.translate("HeaderSampleRate"),_dataformatter.default.numberToString(stream.SampleRate)+" Hz")),stream.VideoRange&&"SDR"!==stream.VideoRange&&lines.push(createAttribute(_globalize.default.translate("HeaderVideoRange"),stream.VideoRange)),stream.ColorPrimaries&&lines.push(createAttribute(_globalize.default.translate("HeaderColorPrimaries"),stream.ColorPrimaries)),stream.ColorSpace&&lines.push(createAttribute(_globalize.default.translate("HeaderColorSpace"),stream.ColorSpace)),stream.ColorTransfer&&lines.push(createAttribute(_globalize.default.translate("HeaderColorTransfer"),stream.ColorTransfer)),stream.BitDepth&&lines.push(createAttribute(_globalize.default.translate("HeaderBitDepth"),stream.BitDepth+" bit")),stream.PixelFormat&&lines.push(createAttribute(_globalize.default.translate("HeaderPixelFormat"),stream.PixelFormat)),stream.RefFrames&&lines.push(createAttribute(_globalize.default.translate("HeaderReferenceFrames"),stream.RefFrames)),stream.Rotation&&lines.push(createAttribute(_globalize.default.translate("Rotation"),stream.Rotation)),"Video"!==streamType&&lines.push(createAttribute(_globalize.default.translate("Default"),stream.IsDefault?_globalize.default.translate("Yes"):_globalize.default.translate("No"))),"Subtitle"===streamType&&("Lyrics"!==stream.SubtitleType&&lines.push(createAttribute(_globalize.default.translate("Forced"),stream.IsForced?_globalize.default.translate("Yes"):_globalize.default.translate("No"))),lines.push(createAttribute(_globalize.default.translate("External"),stream.IsExternal?_globalize.default.translate("Yes"):_globalize.default.translate("No")))),stream.IsExternal&&stream.Path&&lines.push(createAttribute(_globalize.default.translate("File"),function(stream){return(stream=stream.Path.split("/").join("\\").split("\\"))[stream.length-1]}(stream)))},getCommunityRating:getStarIconsHtml,getCriticRating:getCriticRating,bitrateToString:_dataformatter.default.bitrateToString,sizeToString:_dataformatter.default.sizeToString};_exports.default=_default});