diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js
index 60c840574d..6b681edb42 100644
--- a/dashboard-ui/scripts/itemdetailpage.js
+++ b/dashboard-ui/scripts/itemdetailpage.js
@@ -310,7 +310,7 @@
function renderDetails(page, item, context) {
renderSimilarItems(page, item, context);
- renderSiblingLinks(page, item);
+ renderSiblingLinks(page, item, context);
if (item.Taglines && item.Taglines.length) {
$('#itemTagline', page).html(item.Taglines[0]).show();
@@ -479,10 +479,9 @@
});
}
- function renderSiblingLinks(page, item) {
+ function renderSiblingLinks(page, item, context) {
$('.lnkSibling', page).addClass('hide');
- return;
if ((item.Type != "Episode" && item.Type != "Season" && item.Type != "Audio") || item.IndexNumber == null) {
return;
@@ -515,6 +514,8 @@
});
}
+ context = context || '';
+
promise.done(function (result) {
for (var i = 0, length = result.Items.length; i < length; i++) {
@@ -527,11 +528,11 @@
if (curr.IndexNumber < item.IndexNumber) {
- $('.lnkPreviousItem', page).removeClass('hide').attr('href', 'itemdetails.html?id=' + curr.Id);
+ $('.lnkPreviousItem', page).removeClass('hide').attr('href', 'itemdetails.html?id=' + curr.Id + '&context=' + context);
}
else if (curr.IndexNumber > item.IndexNumber) {
- $('.lnkNextItem', page).removeClass('hide').attr('href', 'itemdetails.html?id=' + curr.Id);
+ $('.lnkNextItem', page).removeClass('hide').attr('href', 'itemdetails.html?id=' + curr.Id + '&context=' + context);
}
}
});
diff --git a/dashboard-ui/scripts/mediaplayer-video.js b/dashboard-ui/scripts/mediaplayer-video.js
index 7d9b57bc74..835a7c18f4 100644
--- a/dashboard-ui/scripts/mediaplayer-video.js
+++ b/dashboard-ui/scripts/mediaplayer-video.js
@@ -14,8 +14,6 @@
var self = mediaPlayer;
- var currentItem;
- var currentMediaSource;
var timeout;
var video;
var initialVolume;
@@ -30,6 +28,8 @@
var isPositionSliderActive;
var currentTimeElement;
+ self.currentSubtitleStreamIndex = null;
+
self.initVideoPlayer = function () {
video = playVideo(item, mediaSource, startPosition);
@@ -176,7 +176,7 @@
var newPercent = parseInt(this.value);
- var newPositionTicks = (newPercent / 100) * currentMediaSource.RunTimeTicks;
+ var newPositionTicks = (newPercent / 100) * self.currentMediaSource.RunTimeTicks;
self.changeStream(Math.floor(newPositionTicks));
}
@@ -405,7 +405,7 @@
var currentTicks = self.getCurrentTicks();
- var chapters = currentItem.Chapters || [];
+ var chapters = self.currentItem.Chapters || [];
for (var i = 0, length = chapters.length; i < length; i++) {
@@ -430,7 +430,7 @@
if (chapter.ImageTag) {
- imgUrl = ApiClient.getScaledImageUrl(currentItem.Id, {
+ imgUrl = ApiClient.getScaledImageUrl(self.currentItem.Id, {
maxWidth: 100,
tag: chapter.ImageTag,
type: "Chapter",
@@ -460,7 +460,7 @@
function getAudioTracksHtml() {
- var streams = currentMediaSource.MediaStreams.filter(function (currentStream) {
+ var streams = self.currentMediaSource.MediaStreams.filter(function (currentStream) {
return currentStream.Type == "Audio";
});
@@ -528,11 +528,11 @@
function getSubtitleTracksHtml() {
- var streams = currentMediaSource.MediaStreams.filter(function (currentStream) {
+ var streams = self.currentMediaSource.MediaStreams.filter(function (currentStream) {
return currentStream.Type == "Subtitle";
});
- var currentIndex = getParameterByName('SubtitleStreamIndex', video.currentSrc) || -1;
+ var currentIndex = self.currentSubtitleStreamIndex;
var html = '';
@@ -610,7 +610,7 @@
var currentAudioStreamIndex = getParameterByName('AudioStreamIndex', video.currentSrc);
- var options = getVideoQualityOptions(currentMediaSource.MediaStreams, currentAudioStreamIndex, transcodingExtension);
+ var options = getVideoQualityOptions(self.currentMediaSource.MediaStreams, currentAudioStreamIndex, transcodingExtension);
if (isStatic) {
options[0].name = "Direct";
@@ -688,7 +688,7 @@
options.push({ name: '720p - 4Mbps', maxWidth: 1280, bitrate: 4000000 });
options.push({ name: '720p - 3Mbps', maxWidth: 1280, bitrate: 3000000 });
options.push({ name: '720p - 2Mbps', maxWidth: 1280, bitrate: 2000000 });
-
+
// The extra 1 is because they're keyed off the bitrate value
options.push({ name: '720p - 1Mbps', maxWidth: 1280, bitrate: 1000001 });
}
@@ -724,16 +724,28 @@
var mediaStreams = mediaSource.MediaStreams || [];
+ var subtitleStreams = mediaStreams.filter(function (s) {
+ return s.Type == 'Subtitle';
+ });
+
+ var selectedSubtitleStream = subtitleStreams.filter(function (s) {
+ return s.Index == mediaSource.DefaultSubtitleStreamIndex;
+
+ })[0];
+
var baseParams = {
audioChannels: 2,
StartTimeTicks: startPosition,
- SubtitleStreamIndex: mediaSource.DefaultSubtitleStreamIndex,
AudioStreamIndex: mediaSource.DefaultAudioStreamIndex,
deviceId: ApiClient.deviceId(),
Static: false,
mediaSourceId: mediaSource.Id
};
+ if (selectedSubtitleStream && selectedSubtitleStream.IsGraphicalSubtitleStream) {
+ baseParams.SubtitleStreamIndex = mediaSource.DefaultSubtitleStreamIndex;
+ }
+
var mp4Quality = getVideoQualityOptions(mediaStreams).filter(function (opt) {
return opt.selected;
})[0];
@@ -830,6 +842,22 @@
html += '';
+ var textStreams = subtitleStreams.filter(function (s) {
+ return !s.IsGraphicalSubtitleStream;
+ });
+
+ for (var i = 0, length = textStreams.length; i < length; i++) {
+
+ var textStream = textStreams[i];
+ var textStreamUrl = ApiClient.getUrl('Videos/' + item.Id + '/Subtitles/' + textStream.Index + '/Stream.vtt', {
+ mediaSourceId: mediaSource.Id
+ });
+
+ var defaultAttribute = i.Index == mediaSource.DefaultSubtitleStreamIndex ? ' default' : '';
+
+ html += '