-
+
diff --git a/dashboard-ui/scripts/editorsidebar.js b/dashboard-ui/scripts/editorsidebar.js
index 180cce89b..a2e7dcf54 100644
--- a/dashboard-ui/scripts/editorsidebar.js
+++ b/dashboard-ui/scripts/editorsidebar.js
@@ -147,7 +147,12 @@
function loadLiveTvChannels(service, openItems, callback) {
- ApiClient.getLiveTvChannels({ ServiceName: service, AddCurrentProgram: false }).then(function (result) {
+ ApiClient.getLiveTvChannels({
+
+ ServiceName: service,
+ AddCurrentProgram: false
+
+ }).then(function (result) {
var nodes = result.Items.map(function (i) {
diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js
index ed6fa82c5..7a1a765ca 100644
--- a/dashboard-ui/scripts/itemdetailpage.js
+++ b/dashboard-ui/scripts/itemdetailpage.js
@@ -1,4 +1,4 @@
-define(['layoutManager', 'datetime', 'jQuery', 'scrollStyles'], function (layoutManager, datetime, $) {
+define(['layoutManager', 'datetime', 'jQuery', 'mediaInfo', 'scrollStyles'], function (layoutManager, datetime, $, mediaInfo) {
var currentItem;
@@ -171,8 +171,6 @@
$('.chapterSettingsButton', page).hide();
}
- LiveTvHelpers.renderOriginalAirDate($('.airDate', page), item);
-
if (item.Type == "Person" && item.PremiereDate) {
try {
@@ -467,11 +465,13 @@
bottomOverview.classList.add('hide');
}
- $('.itemCommunityRating', page).html(LibraryBrowser.getRatingHtml(item));
-
LibraryBrowser.renderAwardSummary($('#awardSummary', page), item);
- $('.itemMiscInfo', page).html(LibraryBrowser.getMiscInfoHtml(item));
+ $('.itemMiscInfo', page).each(function () {
+ mediaInfo.fillPrimaryMediaInfo(this, item, {
+ interactive: true
+ });
+ });
LibraryBrowser.renderGenres($('.itemGenres', page), item, null, isStatic);
LibraryBrowser.renderStudios($('.itemStudios', page), item, isStatic);
@@ -1319,7 +1319,7 @@
IncludeItemTypes: "MusicVideo",
Recursive: true,
Fields: "DateCreated,SyncInfo,CanDelete",
- Albums: item.Name
+ AlbumNames: item.Name
}).then(function (result) {
if (result.Items.length) {
diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js
index e752a3fd2..fd353453b 100644
--- a/dashboard-ui/scripts/librarybrowser.js
+++ b/dashboard-ui/scripts/librarybrowser.js
@@ -1,4 +1,4 @@
-define(['playlistManager', 'appSettings', 'appStorage', 'apphost', 'datetime', 'jQuery', 'scrollStyles'], function (playlistManager, appSettings, appStorage, appHost, datetime, $) {
+define(['playlistManager', 'appSettings', 'appStorage', 'apphost', 'datetime', 'jQuery', 'itemHelper', 'mediaInfo', 'scrollStyles'], function (playlistManager, appSettings, appStorage, appHost, datetime, $, itemHelper, mediaInfo) {
function parentWithClass(elem, className) {
@@ -695,8 +695,8 @@
return commands;
},
- canIdentify: function(user, itemType) {
-
+ canIdentify: function (user, itemType) {
+
if (itemType == "Movie" ||
itemType == "Trailer" ||
itemType == "Series" ||
@@ -1332,7 +1332,7 @@
textlines.push(item.AlbumArtist || ' ');
}
- var displayName = LibraryBrowser.getPosterViewDisplayName(item);
+ var displayName = itemHelper.getDisplayName(item);
if (options.showIndexNumber && item.IndexNumber != null) {
displayName = item.IndexNumber + ". " + displayName;
@@ -1359,11 +1359,13 @@
else if (item.Type == 'TvChannel') {
if (item.CurrentProgram) {
- textlines.push(LibraryBrowser.getPosterViewDisplayName(item.CurrentProgram));
+ textlines.push(itemHelper.getDisplayName(item.CurrentProgram));
}
}
else {
- textlines.push(LibraryBrowser.getMiscInfoHtml(item));
+ textlines.push('
' + mediaInfo.getPrimaryMediaInfoHtml(item, {
+ endsAt: false
+ }) + '
');
}
if (textlines.length > 2) {
@@ -2281,7 +2283,7 @@
html += "
";
}
- var name = options.showTitle == 'auto' && !item.IsFolder && item.MediaType == 'Photo' ? '' : LibraryBrowser.getPosterViewDisplayName(item, options.displayAsSpecial);
+ var name = options.showTitle == 'auto' && !item.IsFolder && item.MediaType == 'Photo' ? '' : itemHelper.getDisplayName(item);
if (!imgUrl && !showTitle) {
html += "
";
@@ -2384,7 +2386,7 @@
if (item.Type == 'TvChannel') {
if (item.CurrentProgram) {
- lines.push(LibraryBrowser.getPosterViewDisplayName(item.CurrentProgram));
+ lines.push(itemHelper.getDisplayName(item.CurrentProgram));
} else {
lines.push('');
}
@@ -2541,48 +2543,6 @@
return day;
},
- getPosterViewDisplayName: function (item, displayAsSpecial, includeParentInfo) {
-
- if (!item) {
- throw new Error("null item passed into getPosterViewDisplayName");
- }
-
- var name = item.EpisodeTitle || item.Name || '';
-
- if (item.Type == "TvChannel") {
-
- if (item.Number) {
- return item.Number + ' ' + name;
- }
- return name;
- }
- if (displayAsSpecial && item.Type == "Episode" && item.ParentIndexNumber == 0) {
-
- name = Globalize.translate('ValueSpecialEpisodeName', name);
-
- } else if (item.Type == "Episode" && item.IndexNumber != null && item.ParentIndexNumber != null) {
-
- var displayIndexNumber = item.IndexNumber;
-
- var number = "E" + displayIndexNumber;
-
- if (includeParentInfo !== false) {
- number = "S" + item.ParentIndexNumber + ", " + number;
- }
-
- if (item.IndexNumberEnd) {
-
- displayIndexNumber = item.IndexNumberEnd;
- number += "-" + displayIndexNumber;
- }
-
- name = number + " - " + name;
-
- }
-
- return name;
- },
-
getOfflineIndicatorHtml: function (item) {
if (item.LocationType == "Offline") {
@@ -2735,7 +2695,9 @@
renderName: function (item, nameElem, linkToElement, context) {
- var name = LibraryBrowser.getPosterViewDisplayName(item, false, false);
+ var name = itemHelper.getDisplayName(item, {
+ includeParentInfo: false
+ });
Dashboard.setPageTitle(name);
@@ -3032,44 +2994,6 @@
});
},
- getRatingHtml: function (item, metascore) {
-
- var html = "";
-
- if (item.CommunityRating) {
-
- html += "
";
- html += '
';
- html += item.CommunityRating.toFixed(1);
- html += '
';
- }
-
- if (item.CriticRating != null) {
-
- if (item.CriticRating >= 60) {
- html += '
';
- } else {
- html += '
';
- }
-
- html += '
' + item.CriticRating + '%
';
- }
-
- //if (item.Metascore && metascore !== false) {
-
- // if (item.Metascore >= 60) {
- // html += '
' + item.Metascore + '
';
- // }
- // else if (item.Metascore >= 40) {
- // html += '
' + item.Metascore + '
';
- // } else {
- // html += '
' + item.Metascore + '
';
- // }
- //}
-
- return html;
- },
-
getItemProgressBarHtml: function (item) {
@@ -3328,180 +3252,6 @@
detailImageProgressContainer.innerHTML = progressHtml || '';
},
- getMiscInfoHtml: function (item) {
-
- var miscInfo = [];
- var text, date;
-
- if (item.IsSeries && !item.IsRepeat) {
-
- require(['livetvcss']);
- miscInfo.push('
' + Globalize.translate('AttributeNew') + ' ');
-
- }
-
- if (item.IsLive) {
-
- miscInfo.push('
' + Globalize.translate('AttributeLive') + ' ');
-
- }
-
- if (item.ChannelId && item.ChannelName) {
- if (item.Type == 'Program' || item.Type == 'Recording') {
- miscInfo.push('
' + item.ChannelName + ' ');
- }
- }
-
- if (item.Type == "Episode" || item.MediaType == 'Photo') {
-
- if (item.PremiereDate) {
-
- try {
- date = datetime.parseISO8601Date(item.PremiereDate, true);
-
- text = date.toLocaleDateString();
- miscInfo.push(text);
- }
- catch (e) {
- console.log("Error parsing date: " + item.PremiereDate);
- }
- }
- }
-
- if (item.StartDate) {
-
- try {
- date = datetime.parseISO8601Date(item.StartDate, true);
-
- text = date.toLocaleDateString();
- miscInfo.push(text);
-
- if (item.Type != "Recording") {
- text = datetime.getDisplayTime(date);
- miscInfo.push(text);
- }
- }
- catch (e) {
- console.log("Error parsing date: " + item.PremiereDate);
- }
- }
-
- if (item.ProductionYear && item.Type == "Series") {
-
- if (item.Status == "Continuing") {
- miscInfo.push(Globalize.translate('ValueSeriesYearToPresent', item.ProductionYear));
-
- }
- else if (item.ProductionYear) {
-
- text = item.ProductionYear;
-
- if (item.EndDate) {
-
- try {
-
- var endYear = datetime.parseISO8601Date(item.EndDate, true).getFullYear();
-
- if (endYear != item.ProductionYear) {
- text += "-" + datetime.parseISO8601Date(item.EndDate, true).getFullYear();
- }
-
- }
- catch (e) {
- console.log("Error parsing date: " + item.EndDate);
- }
- }
-
- miscInfo.push(text);
- }
- }
-
- if (item.Type != "Series" && item.Type != "Episode" && item.MediaType != 'Photo') {
-
- if (item.ProductionYear) {
-
- miscInfo.push(item.ProductionYear);
- }
- else if (item.PremiereDate) {
-
- try {
- text = datetime.parseISO8601Date(item.PremiereDate, true).getFullYear();
- miscInfo.push(text);
- }
- catch (e) {
- console.log("Error parsing date: " + item.PremiereDate);
- }
- }
- }
-
- var minutes;
-
- if (item.RunTimeTicks && item.Type != "Series") {
-
- if (item.Type == "Audio") {
-
- miscInfo.push(datetime.getDisplayRunningTime(item.RunTimeTicks));
-
- } else {
- minutes = item.RunTimeTicks / 600000000;
-
- minutes = minutes || 1;
-
- miscInfo.push(Math.round(minutes) + "min");
- }
- }
-
- if (item.CumulativeRunTimeTicks && item.Type != "Series" && item.Type != "Season") {
-
- miscInfo.push(datetime.getDisplayRunningTime(item.CumulativeRunTimeTicks));
- }
-
- if (item.OfficialRating && item.Type !== "Season" && item.Type !== "Episode") {
- miscInfo.push(item.OfficialRating);
- }
-
- if (item.IsHD) {
-
- miscInfo.push(Globalize.translate('LabelHDProgram'));
- }
-
- //if (item.Audio) {
-
- // miscInfo.push(item.Audio);
-
- //}
-
- if (item.Video3DFormat) {
- miscInfo.push("3D");
- }
-
- if (item.MediaType == 'Photo' && item.Width && item.Height) {
- miscInfo.push(item.Width + "x" + item.Height);
- }
-
- if (item.SeriesTimerId) {
- var html = '';
- html += '
';
- html += '
';
- html += '
';
- html += '
';
- html += ' ';
- miscInfo.push(html);
- require(['livetvcss']);
- }
- else if (item.TimerId) {
-
- var html = '';
- html += '
';
- html += '
';
- html += ' ';
- miscInfo.push(html);
- require(['livetvcss']);
- }
-
- return miscInfo.join(' ');
- },
-
renderOverview: function (elems, item) {
for (var i = 0, length = elems.length; i < length; i++) {
diff --git a/dashboard-ui/scripts/librarylist.js b/dashboard-ui/scripts/librarylist.js
index a98a88e34..7c474698d 100644
--- a/dashboard-ui/scripts/librarylist.js
+++ b/dashboard-ui/scripts/librarylist.js
@@ -1,4 +1,4 @@
-define(['appSettings', 'appStorage', 'libraryBrowser', 'apphost', 'jQuery'], function (appSettings, appStorage, LibraryBrowser, appHost, $) {
+define(['appSettings', 'appStorage', 'libraryBrowser', 'apphost', 'jQuery', 'itemHelper', 'mediaInfo'], function (appSettings, appStorage, LibraryBrowser, appHost, $, itemHelper, mediaInfo) {
var showOverlayTimeout;
@@ -81,7 +81,7 @@
var isSquare = className.indexOf('square') != -1;
var parentName = isSmallItem || isMiniItem || isPortrait ? null : item.SeriesName;
- var name = LibraryBrowser.getPosterViewDisplayName(item, true);
+ var name = itemHelper.getDisplayName(item);
html += '
';
var logoHeight = isSmallItem || isMiniItem ? 20 : 26;
@@ -118,28 +118,22 @@
html += name;
html += '';
} else if (!isSmallItem && !isMiniItem) {
- html += '
';
- html += LibraryBrowser.getMiscInfoHtml(item);
- html += '
';
+ html += '
';
+ html += mediaInfo.getPrimaryMediaInfoHtml(item, {
+ endsAt: false
+ });
+ html += '
';
}
if (!isMiniItem) {
html += '
';
if (isPortrait) {
- html += '';
-
html += '
';
html += LibraryBrowser.getUserDataIconsHtml(item);
html += '
';
} else {
- html += '';
-
html += '
';
html += LibraryBrowser.getUserDataIconsHtml(item);
html += ' ';
diff --git a/dashboard-ui/scripts/livetvcomponents.js b/dashboard-ui/scripts/livetvcomponents.js
index 4a562e705..652f1997a 100644
--- a/dashboard-ui/scripts/livetvcomponents.js
+++ b/dashboard-ui/scripts/livetvcomponents.js
@@ -114,25 +114,6 @@
});
},
- renderOriginalAirDate: function (elem, item) {
-
- var airDate = item.PremiereDate;
-
- if (airDate && item.IsRepeat) {
-
- try {
- airDate = datetime.parseISO8601Date(airDate, true).toLocaleDateString();
- }
- catch (e) {
- console.log("Error parsing date: " + airDate);
- }
-
-
- elem.html(Globalize.translate('ValueOriginalAirDate').replace('{0}', airDate)).show();
- } else {
- elem.hide();
- }
- },
getTimersHtml: getTimersHtml
};
diff --git a/dashboard-ui/scripts/livetvrecordings.js b/dashboard-ui/scripts/livetvrecordings.js
index 41b4c6ca4..a5097c85e 100644
--- a/dashboard-ui/scripts/livetvrecordings.js
+++ b/dashboard-ui/scripts/livetvrecordings.js
@@ -98,7 +98,7 @@
ApiClient.getLiveTvRecordings({
userId: Dashboard.getCurrentUserId(),
- limit: 12,
+ limit: 6,
IsInProgress: false,
Fields: 'CanDelete,PrimaryImageAspectRatio'
diff --git a/dashboard-ui/scripts/mediaplayer-video.js b/dashboard-ui/scripts/mediaplayer-video.js
index 5b266aa6e..c8d763ef7 100644
--- a/dashboard-ui/scripts/mediaplayer-video.js
+++ b/dashboard-ui/scripts/mediaplayer-video.js
@@ -1,4 +1,4 @@
-define(['appSettings', 'datetime', 'jQuery', 'scrollStyles', 'paper-icon-button-light'], function (appSettings, datetime, $) {
+define(['appSettings', 'datetime', 'jQuery', 'mediaInfo', 'scrollStyles', 'paper-icon-button-light'], function (appSettings, datetime, $, mediaInfo) {
function createVideoPlayer(self) {
@@ -444,18 +444,12 @@
var nameHtml = MediaController.getNowPlayingNameHtml(item, false);
nameHtml = '
' + nameHtml + '
';
- var miscInfo = LibraryBrowser.getMiscInfoHtml(item);
+ var miscInfo = mediaInfo.getPrimaryMediaInfoHtml(item);
if (miscInfo) {
nameHtml += '
' + miscInfo + '
';
}
- var ratingHtml = LibraryBrowser.getRatingHtml(item);
- if (ratingHtml) {
-
- nameHtml += '
' + ratingHtml + '
';
- }
-
if (item.Overview) {
nameHtml += '
' + item.Overview + '
';
diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js
index a13e4eeec..5b8d9fb54 100644
--- a/dashboard-ui/scripts/site.js
+++ b/dashboard-ui/scripts/site.js
@@ -1790,12 +1790,14 @@ var AppInfo = {};
focusManager: embyWebComponentsBowerPath + "/focusmanager",
datetime: embyWebComponentsBowerPath + "/datetime",
globalize: embyWebComponentsBowerPath + "/globalize",
+ itemHelper: embyWebComponentsBowerPath + '/itemhelper',
itemShortcuts: embyWebComponentsBowerPath + "/shortcuts",
imageLoader: embyWebComponentsBowerPath + "/images/imagehelper"
};
if (navigator.webkitPersistentStorage) {
paths.imageFetcher = embyWebComponentsBowerPath + "/images/persistentimagefetcher";
+ //paths.imageFetcher = embyWebComponentsBowerPath + "/images/basicimagefetcher";
} else if (Dashboard.isRunningInCordova()) {
paths.imageFetcher = 'cordova/imagestore';
} else {
@@ -1819,6 +1821,7 @@ var AppInfo = {};
define("libjass", [bowerPath + "/libjass/libjass", "css!" + bowerPath + "/libjass/libjass"], returnFirstDependency);
+ define("mediaInfo", [embyWebComponentsBowerPath + "/mediainfo/mediainfo"], returnFirstDependency);
define("backdrop", [embyWebComponentsBowerPath + "/backdrop/backdrop"], returnFirstDependency);
define("fetchHelper", [embyWebComponentsBowerPath + "/fetchhelper"], returnFirstDependency);
@@ -3288,12 +3291,6 @@ pageClassOn('viewshow', "page", function () {
page.classList.remove('ui-body-a');
}
- //if (currentTheme != 'a' && !browserInfo.mobile) {
- // document.documentElement.classList.add('darkScrollbars');
- //} else {
- // document.documentElement.classList.remove('darkScrollbars');
- //}
-
var apiClient = window.ApiClient;
Dashboard.ensureHeader(page);
diff --git a/dashboard-ui/shared.html b/dashboard-ui/shared.html
index 6bcab7625..525622586 100644
--- a/dashboard-ui/shared.html
+++ b/dashboard-ui/shared.html
@@ -27,11 +27,10 @@
-
-
@@ -44,9 +43,7 @@
diff --git a/dashboard-ui/strings/en-US.json b/dashboard-ui/strings/en-US.json
index 31194b083..4d08016d0 100644
--- a/dashboard-ui/strings/en-US.json
+++ b/dashboard-ui/strings/en-US.json
@@ -1887,7 +1887,6 @@
"OptionNewPlaylist": "New playlist...",
"MessageAddedToPlaylistSuccess": "Ok",
"ButtonViewSeriesRecording": "View series recording",
- "ValueOriginalAirDate": "Original air date: {0}",
"ButtonRemoveFromPlaylist": "Remove from playlist",
"HeaderSpecials": "Specials",
"HeaderTrailers": "Trailers",
@@ -2097,6 +2096,9 @@
"LabelFullReview": "Full review:",
"LabelShortRatingDescription": "Short rating summary:",
"OptionIRecommendThisItem": "I recommend this item",
+ "EndsAtValue": "Ends at {0}",
+ "ReleaseYearValue": "Release year: {0}",
+ "OriginalAirDateValue": "Original air date: {0}",
"WebClientTourContent": "View your recently added media, next episodes, and more. The green circles indicate how many unplayed items you have.",
"WebClientTourMovies": "Play movies, trailers and more from any device with a web browser",
"WebClientTourMouseOver": "Hold the mouse over any poster for quick access to important information",