791 lines
27 KiB
JavaScript
791 lines
27 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 += " – " + _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"></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"></i>'
|
|
: '<i class="md-icon mediaInfoItem mediaInfoIconItem"></i>'
|
|
: '<i class="md-icon mediaInfoItem mediaInfoIconItem mediaInfoTimerIcon"></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 += " – " + 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"></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;
|
|
});
|