diff --git a/dashboard-ui/dlnaserversettings.html b/dashboard-ui/dlnaserversettings.html
index 7227cd1191..634e0f34b5 100644
--- a/dashboard-ui/dlnaserversettings.html
+++ b/dashboard-ui/dlnaserversettings.html
@@ -1,7 +1,7 @@
-
diff --git a/dashboard-ui/dlnasettings.html b/dashboard-ui/dlnasettings.html
index 8a0e1f3b13..1b78f8e0b3 100644
--- a/dashboard-ui/dlnasettings.html
+++ b/dashboard-ui/dlnasettings.html
@@ -1,7 +1,7 @@
-
DLNA
+
${TitleDlna}
diff --git a/dashboard-ui/scripts/chromecast.js b/dashboard-ui/scripts/chromecast.js
index 4b537b4c9b..41887d2044 100644
--- a/dashboard-ui/scripts/chromecast.js
+++ b/dashboard-ui/scripts/chromecast.js
@@ -213,7 +213,7 @@
Dashboard.alert({
title: "Error Launching Chromecast",
- message: "There was an error launching chromecast. Please ensure your device is connected to your wifi network."
+ message: "There was an error launching chromecast. Please ensure your device is connected to your wireless network."
});
@@ -1377,15 +1377,55 @@
self.getPlayerStateInternal = function () {
- return {
- itemName: "Chromecast",
- canSeek: self.positionTicks < self.runtimeTicks,
- positionTicks: self.positionTicks,
- runtimeTicks: self.runtimeTicks,
- volumeLevel: castPlayer.currentVolume * 100,
- isPaused: self.isPaused,
- isMuted: self.isMuted
+ var state = {
+ PlayState: {
+
+ CanSeek: self.positionTicks < self.runtimeTicks,
+ PositionTicks: self.positionTicks,
+ RunTimeTicks: self.runtimeTicks,
+ VolumeLevel: castPlayer.currentVolume * 100,
+ IsPaused: self.isPaused,
+ IsMuted: self.isMuted
+
+ // TODO: Implement
+ // AudioStreamIndex: null,
+ // SubtitleStreamIndex: null,
+ // PlayMethod: 'DirectStream' or 'Transcode'
+ }
};
+
+ // TODO: Implement
+ var isPlaying = false;
+
+ if (isPlaying) {
+
+ //state.PlayState.MediaSourceId = 'xxx';
+
+ state.NowPlayingItem = {
+
+ Name: 'Chromecast'
+ };
+
+ var nowPlayingItem = state.NowPlayingItem;
+
+ // TODO: Fill in these properties using chromecast mediainfo and/or custom data
+ //nowPlayingItem.Id = item.Id;
+ //nowPlayingItem.MediaType = item.MediaType;
+ //nowPlayingItem.Type = item.Type;
+ //nowPlayingItem.Name = item.Name;
+
+ //nowPlayingItem.IndexNumber = item.IndexNumber;
+ //nowPlayingItem.IndexNumberEnd = item.IndexNumberEnd;
+ //nowPlayingItem.ParentIndexNumber = item.ParentIndexNumber;
+ //nowPlayingItem.ProductionYear = item.ProductionYear;
+ //nowPlayingItem.PremiereDate = item.PremiereDate;
+ //nowPlayingItem.SeriesName = item.SeriesName;
+ //nowPlayingItem.Album = item.Album;
+ //nowPlayingItem.Artists = item.Artists;
+
+ }
+
+ return state;
};
}
diff --git a/dashboard-ui/scripts/dlnaprofile.js b/dashboard-ui/scripts/dlnaprofile.js
index f04b9f5167..44938c5f2a 100644
--- a/dashboard-ui/scripts/dlnaprofile.js
+++ b/dashboard-ui/scripts/dlnaprofile.js
@@ -67,6 +67,10 @@
$('#chkRequiresPlainFolders', page).checked(profile.RequiresPlainFolders).checkboxradio('refresh');
$('#chkRequiresPlainVideoItems', page).checked(profile.RequiresPlainVideoItems).checkboxradio('refresh');
+ $('#txtXDlnaCap', page).val(profile.XDlnaCap || '');
+ $('#txtXDlnaDoc', page).val(profile.XDlnaDoc || '');
+ $('#txtSonyAggregationFlags', page).val(profile.SonyAggregationFlags || '');
+
profile.DirectPlayProfiles = (profile.DirectPlayProfiles || []);
profile.TranscodingProfiles = (profile.TranscodingProfiles || []);
profile.ContainerProfiles = (profile.ContainerProfiles || []);
@@ -674,6 +678,10 @@
profile.IgnoreTranscodeByteRangeRequests = $('#chkIgnoreTranscodeByteRangeRequests', page).checked();
profile.MaxBitrate = $('#txtMaxAllowedBitrate', page).val();
+ profile.XDlnaCap = $('#txtXDlnaCap', page).val();
+ profile.XDlnaDoc = $('#txtXDlnaDoc', page).val();
+ profile.SonyAggregationFlags = $('#txtSonyAggregationFlags', page).val();
+
profile.UserId = $('#selectUser', page).val();
}
diff --git a/dashboard-ui/scripts/mediaplayer.js b/dashboard-ui/scripts/mediaplayer.js
index 644c159477..33e17ddaa7 100644
--- a/dashboard-ui/scripts/mediaplayer.js
+++ b/dashboard-ui/scripts/mediaplayer.js
@@ -537,29 +537,30 @@
self.getNowPlayingNameHtml = function (playerState) {
- var topText = playerState.itemName;
+ var nowPlayingItem = playerState.NowPlayingItem;
+ var topText = nowPlayingItem.Name;
- if (playerState.mediaType == 'Video') {
- if (playerState.indexNumber != null) {
- topText = playerState.indexNumber + " - " + topText;
+ if (nowPlayingItem.MediaType == 'Video') {
+ if (nowPlayingItem.IndexNumber != null) {
+ topText = nowPlayingItem.IndexNumber + " - " + topText;
}
- if (playerState.parentIndexNumber != null) {
- topText = playerState.parentIndexNumber + "." + topText;
+ if (nowPlayingItem.ParentIndexNumber != null) {
+ topText = nowPlayingItem.ParentIndexNumber + "." + topText;
}
}
var bottomText = '';
- if (playerState.artists && playerState.artists.length) {
+ if (nowPlayingItem.Artists && nowPlayingItem.Artists.length) {
bottomText = topText;
- topText = playerState.artists[0];
+ topText = nowPlayingItem.Artists[0];
}
- else if (playerState.seriesName || playerState.album) {
+ else if (nowPlayingItem.SeriesName || nowPlayingItem.Album) {
bottomText = topText;
- topText = playerState.seriesName || playerState.album;
+ topText = nowPlayingItem.SeriesName || nowPlayingItem.Album;
}
- else if (playerState.productionYear) {
- bottomText = playerState.productionYear;
+ else if (nowPlayingItem.ProductionYear) {
+ bottomText = nowPlayingItem.ProductionYear;
}
return bottomText ? topText + '
' + bottomText : topText;
@@ -950,67 +951,96 @@
self.getPlayerStateInternal = function (playerElement, item, mediaSource) {
- var state = {};
+ var state = {
+ PlayState: {}
+ };
if (playerElement) {
- state.volumeLevel = playerElement.volume * 100;
- state.isMuted = playerElement.volume == 0;
- state.isPaused = playerElement.paused;
- state.positionTicks = self.getCurrentTicks(playerElement);
+ state.PlayState.VolumeLevel = playerElement.volume * 100;
+ state.PlayState.IsMuted = playerElement.volume == 0;
+ state.PlayState.IsPaused = playerElement.paused;
+ state.PlayState.PositionTicks = self.getCurrentTicks(playerElement);
+
+ var currentSrc = playerElement.currentSrc;
+
+ if (currentSrc) {
+
+ var audioStreamIndex = getParameterByName('AudioStreamIndex', currentSrc);
+
+ if (audioStreamIndex) {
+ state.PlayState.AudioStreamIndex = parseInt(audioStreamIndex);
+ }
+ var subtitleStreamIndex = getParameterByName('SubtitleStreamIndex', currentSrc);
+
+ if (subtitleStreamIndex) {
+ state.PlayState.SubtitleStreamIndex = parseInt(subtitleStreamIndex);
+ }
+
+ state.PlayState.PlayMethod = getParameterByName('static', currentSrc) == 'true' ?
+ 'DirectStream' :
+ 'Transcode';
+ }
}
if (mediaSource) {
- state.mediaSourceId = mediaSource.Id;
- state.runtimeTicks = mediaSource.RunTimeTicks;
+ state.PlayState.MediaSourceId = mediaSource.Id;
- state.canSeek = mediaSource.RunTimeTicks && mediaSource.RunTimeTicks > 0;
+ state.NowPlayingItem = {
+ RunTimeTicks: mediaSource.RunTimeTicks
+ };
+
+ state.PlayState.CanSeek = mediaSource.RunTimeTicks && mediaSource.RunTimeTicks > 0;
}
if (item) {
- state.itemId = item.Id;
- state.mediaType = item.MediaType;
- state.itemType = item.Type;
- state.indexNumber = item.IndexNumber;
- state.indexNumberEnd = item.IndexNumberEnd;
- state.parentIndexNumber = item.ParentIndexNumber;
- state.productionYear = item.ProductionYear;
- state.premiereDate = item.PremiereDate;
- state.seriesName = item.SeriesName;
- state.album = item.Album;
- state.itemName = item.Name;
- state.artists = item.Artists;
+ state.NowPlayingItem = state.NowPlayingItem || {};
+ var nowPlayingItem = state.NowPlayingItem;
+
+ nowPlayingItem.Id = item.Id;
+ nowPlayingItem.MediaType = item.MediaType;
+ nowPlayingItem.Type = item.Type;
+ nowPlayingItem.Name = item.Name;
+
+ nowPlayingItem.IndexNumber = item.IndexNumber;
+ nowPlayingItem.IndexNumberEnd = item.IndexNumberEnd;
+ nowPlayingItem.ParentIndexNumber = item.ParentIndexNumber;
+ nowPlayingItem.ProductionYear = item.ProductionYear;
+ nowPlayingItem.PremiereDate = item.PremiereDate;
+ nowPlayingItem.SeriesName = item.SeriesName;
+ nowPlayingItem.Album = item.Album;
+ nowPlayingItem.Artists = item.Artists;
var imageTags = item.ImageTags || {};
if (imageTags.Primary) {
- state.primaryImageItemId = item.Id;
- state.primaryImageTag = imageTags.Primary;
+ nowPlayingItem.PrimaryImageItemId = item.Id;
+ nowPlayingItem.PrimaryImageTag = imageTags.Primary;
}
else if (item.AlbumPrimaryImageTag) {
- state.primaryImageItemId = item.AlbumId;
- state.primaryImageTag = item.AlbumPrimaryImageTag;
+ nowPlayingItem.PrimaryImageItemId = item.AlbumId;
+ nowPlayingItem.PrimaryImageTag = item.AlbumPrimaryImageTag;
}
else if (item.SeriesPrimaryImageTag) {
- state.primaryImageItemId = item.SeriesId;
- state.primaryImageTag = item.SeriesPrimaryImageTag;
+ nowPlayingItem.PrimaryImageItemId = item.SeriesId;
+ nowPlayingItem.PrimaryImageTag = item.SeriesPrimaryImageTag;
}
if (item.BackdropImageTags && item.BackdropImageTags.length) {
- state.backdropItemId = item.Id;
- state.backdropImageTag = item.BackdropImageTags[0];
+ nowPlayingItem.BackdropItemId = item.Id;
+ nowPlayingItem.BackdropImageTag = item.BackdropImageTags[0];
}
if (imageTags.Thumb) {
- state.thumbItemId = item.Id;
- state.thumbImageTag = imageTags.Thumb;
+ nowPlayingItem.ThumbItemId = item.Id;
+ nowPlayingItem.ThumbImageTag = imageTags.Thumb;
}
}
@@ -1073,7 +1103,7 @@
var mediaSource = currentMediaSource;
ApiClient.reportPlaybackStopped({
-
+
itemId: item.Id,
mediaSourceId: mediaSource.Id,
positionTicks: position
diff --git a/dashboard-ui/scripts/nowplayingbar.js b/dashboard-ui/scripts/nowplayingbar.js
index b64b118988..2d18c829f2 100644
--- a/dashboard-ui/scripts/nowplayingbar.js
+++ b/dashboard-ui/scripts/nowplayingbar.js
@@ -131,7 +131,8 @@
if (currentPlayer && lastPlayerState) {
var newPercent = parseFloat(this.value);
- var newPositionTicks = (newPercent / 100) * lastPlayerState.runtimeTicks;
+ var newPositionTicks = (newPercent / 100) * lastPlayerState.NowPlayingItem.RunTimeTicks;
+
currentPlayer.seek(Math.floor(newPositionTicks));
}
});
@@ -162,7 +163,7 @@
function updatePlayerState(state) {
- if (state.itemName) {
+ if (state.NowPlayingItem) {
showNowPlayingBar();
} else {
hideNowPlayingBar();
@@ -197,7 +198,9 @@
unmuteButton.prop('disabled', '');
}
- if (state.isMuted) {
+ var playState = state.PlayState || {};
+
+ if (playState.IsMuted) {
hideButton(muteButton);
showButton(unmuteButton);
@@ -208,7 +211,7 @@
hideButton(unmuteButton);
}
- if (state.isPaused) {
+ if (playState.IsPaused) {
hideButton(pauseButton);
showButton(unpauseButton);
@@ -220,16 +223,17 @@
}
if (!isVolumeSliderActive) {
- volumeSlider.val(state.volumeLevel || 0);
+ volumeSlider.val(playState.VolumeLevel || 0);
}
volumeSlider.slider('refresh');
+ var nowPlayingItem = state.NowPlayingItem || {};
if (!isPositionSliderActive) {
- if (state.canSeek) {
+ if (playState.CanSeek) {
- var pct = state.positionTicks / state.runtimeTicks;
+ var pct = playState.PositionTicks / nowPlayingItem.RunTimeTicks;
pct *= 100;
positionSlider.val(pct).slider("enable");
@@ -242,11 +246,11 @@
positionSlider.slider('refresh');
}
- var timeText = Dashboard.getDisplayTime(state.positionTicks);
+ var timeText = Dashboard.getDisplayTime(playState.PositionTicks);
- if (state.runtimeTicks) {
+ if (nowPlayingItem.RunTimeTicks) {
- timeText += " / " + Dashboard.getDisplayTime(state.runtimeTicks);
+ timeText += " / " + Dashboard.getDisplayTime(nowPlayingItem.RunTimeTicks);
}
@@ -269,37 +273,39 @@
nowPlayingTextElement.html(nameHtml);
var url;
+
+ var nowPlayingItem = state.NowPlayingItem;
- if (state.primaryImageTag) {
+ if (nowPlayingItem.PrimaryImageTag) {
- url = ApiClient.getImageUrl(state.primaryImageItemId, {
+ url = ApiClient.getImageUrl(nowPlayingItem.PrimaryImageItemId, {
type: "Primary",
height: 80,
- tag: state.primaryImageTag
+ tag: nowPlayingItem.PrimaryImageTag
});
}
- else if (state.backdropImageTag) {
+ else if (nowPlayingItem.BackdropImageTag) {
- url = ApiClient.getImageUrl(state.backdropItemId, {
+ url = ApiClient.getImageUrl(nowPlayingItem.BackdropItemId, {
type: "Backdrop",
height: 80,
- tag: state.backdropImageTag,
+ tag: nowPlayingItem.BackdropImageTag,
index: 0
});
- } else if (state.thumbImageTag) {
+ } else if (nowPlayingItem.ThumbImageTag) {
- url = ApiClient.getImageUrl(state.thumbImageItemId, {
+ url = ApiClient.getImageUrl(nowPlayingItem.ThumbImageItemId, {
type: "Thumb",
height: 80,
- tag: state.thumbImageTag
+ tag: nowPlayingItem.ThumbImageTag
});
}
- else if (state.itemType == "TvChannel" || state.itemType == "Recording") {
+ else if (nowPlayingItem.Type == "TvChannel" || nowPlayingItem.Type == "Recording") {
url = "css/images/items/detail/tv.png";
}
- else if (state.mediaType == "Audio") {
+ else if (nowPlayingItem.MediaType == "Audio") {
url = "css/images/items/detail/audio.png";
}
else {
@@ -355,7 +361,7 @@
//console.log('nowplaying event: ' + e.type);
var player = this;
- if (player.isDefaultPlayer && state.mediaType == 'Video') {
+ if (player.isDefaultPlayer && state.NowPlayingItem && state.NowPlayingItem.MediaType == 'Video') {
return;
}
diff --git a/dashboard-ui/scripts/remotecontrol.js b/dashboard-ui/scripts/remotecontrol.js
index acaef475b9..15dfc6a13b 100644
--- a/dashboard-ui/scripts/remotecontrol.js
+++ b/dashboard-ui/scripts/remotecontrol.js
@@ -103,7 +103,7 @@
};
self.unMute = function () {
- sendCommand('Unmnute');
+ sendCommand('Unmute');
};
self.toggleMute = function () {
@@ -238,53 +238,7 @@
function getPlayerState(session) {
- var state = {};
-
- var playerState = session.PlayState;
-
- if (playerState) {
-
- state.isMuted = playerState.IsMuted;
- state.isPaused = playerState.IsPaused;
- state.canSeek = playerState.CanSeek;
- state.positionTicks = playerState.PositionTicks || 0;
-
- state.mediaSource = playerState.MediaSourceId;
- state.volumeLevel = playerState.VolumeLevel;
- state.audioStreamIndex = playerState.AudioStreamIndex;
- state.subtitleStreamIndex = playerState.SubtitleStreamIndex;
- }
-
- var item = session.NowPlayingItem;
-
- if (item) {
-
- state.itemId = item.Id;
- state.mediaType = item.MediaType;
- state.itemType = item.Type;
- state.indexNumber = item.IndexNumber;
- state.indexNumberEnd = item.IndexNumberEnd;
- state.parentIndexNumber = item.ParentIndexNumber;
- state.productionYear = item.ProductionYear;
- state.premiereDate = item.PremiereDate;
- state.seriesName = item.SeriesName;
- state.album = item.Album;
- state.itemName = item.Name;
- state.artists = item.Artists;
-
- state.primaryImageItemId = item.PrimaryImageItemId;
- state.primaryImageTag = item.PrimaryImageTag;
-
- state.backdropItemId = item.BackdropItemId;
- state.backdropImageTag = item.BackdropImageTag;
-
- state.thumbItemId = item.ThumbItemId;
- state.thumbImageTag = item.ThumbImageTag;
-
- state.runtimeTicks = item.RunTimeTicks;
- }
-
- return state;
+ return session;
}
function firePlaybackEvent(name, session) {