diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js
index f4dd3911bd..9a29a6507a 100644
--- a/dashboard-ui/scripts/librarybrowser.js
+++ b/dashboard-ui/scripts/librarybrowser.js
@@ -289,9 +289,7 @@
showPlayMenu: function (positionTo, itemId, itemType, isFolder, mediaType, resumePositionTicks) {
- var isPlaying = MediaPlayer.isPlaying();
-
- if (!isPlaying && !resumePositionTicks && mediaType != "Audio" && !isFolder) {
+ if (!resumePositionTicks && mediaType != "Audio" && !isFolder) {
MediaController.play(itemId);
return;
}
diff --git a/dashboard-ui/scripts/librarymenu.js b/dashboard-ui/scripts/librarymenu.js
index 2b905c9779..314107964c 100644
--- a/dashboard-ui/scripts/librarymenu.js
+++ b/dashboard-ui/scripts/librarymenu.js
@@ -174,6 +174,20 @@
window.LibraryMenu = {
showLibraryMenu: showLibraryMenu
};
+
+ function updateCastIcon() {
+
+ var info = MediaController.getPlayerInfo();
+
+ if (info.isLocalPlayer) {
+
+ $('.btnCast').addClass('btnDefaultCast').removeClass('btnActiveCast');
+
+ } else {
+
+ $('.btnCast').removeClass('btnDefaultCast').addClass('btnActiveCast');
+ }
+ }
$(document).on('pageinit', ".libraryPage", function () {
@@ -211,6 +225,8 @@
});
}
+ updateCastIcon();
+
}).on('pageshow', ".libraryPage", function () {
var page = this;
@@ -228,17 +244,7 @@
$(function() {
$(MediaController).on('playerchange', function () {
-
- var info = MediaController.getPlayerInfo();
-
- if (info.isLocalPlayer) {
-
- $('.btnCast').addClass('btnDefaultCast').removeClass('btnActiveCast');
-
- } else {
-
- $('.btnCast').removeClass('btnDefaultCast').addClass('btnActiveCast');
- }
+ updateCastIcon();
});
});
diff --git a/dashboard-ui/scripts/mediacontroller.js b/dashboard-ui/scripts/mediacontroller.js
index 6943a5f85d..8f9f9c4892 100644
--- a/dashboard-ui/scripts/mediacontroller.js
+++ b/dashboard-ui/scripts/mediacontroller.js
@@ -19,7 +19,9 @@
name: currentPlayer.name,
isLocalPlayer: currentPlayer.isLocalPlayer,
- targetInfo: currentTargetInfo
+ id: currentTargetInfo.id,
+ deviceName: currentTargetInfo.deviceName,
+ playableMediaTypes: currentTargetInfo.playableMediaTypes
};
};
@@ -124,7 +126,7 @@
return true;
}
- return currentPlayer.canPlayMediaType(item.MediaType);
+ return self.getPlayerInfo().playableMediaTypes.indexOf(item.MediaType) != -1;
};
self.canQueueMediaType = function (mediaType) {
@@ -132,11 +134,6 @@
return currentPlayer.canQueueMediaType(mediaType);
};
- self.isPlaying = function () {
-
- return currentPlayer.isPlaying();
- };
-
self.getLocalPlayer = function () {
return currentPlayer.isLocalPlayer ?
@@ -151,7 +148,7 @@
window.MediaController = new mediaController();
- function onWebSocketMessageReceived(msg) {
+ function onWebSocketMessageReceived(e, msg) {
var localPlayer = msg.MessageType === "Play" || msg.MessageType === "Play" ?
MediaController.getLocalPlayer() :
@@ -212,11 +209,17 @@
var id = 'radioPlayerTarget' + i;
- var isChecked = target.id == playerInfo.targetInfo.id;
+ var isChecked = target.id == playerInfo.id;
var checkedHtml = isChecked ? ' checked="checked"' : '';
- html += '';
- html += '';
+ html += '';
+ html += '';
}
html += '';
@@ -249,10 +252,12 @@
var playerName = this.getAttribute('data-playername');
var targetId = this.getAttribute('data-targetid');
var targetName = this.getAttribute('data-targetname');
+ var playableMediaTypes = this.getAttribute('data-mediatypes').split(',');
MediaController.setActivePlayer(playerName, {
id: targetId,
- name: targetName
+ name: targetName,
+ playableMediaTypes: playableMediaTypes
});
});
diff --git a/dashboard-ui/scripts/mediaplayer.js b/dashboard-ui/scripts/mediaplayer.js
index 818bcff687..6f9ffba5bc 100644
--- a/dashboard-ui/scripts/mediaplayer.js
+++ b/dashboard-ui/scripts/mediaplayer.js
@@ -30,8 +30,9 @@
var targets = [{
name: 'My Browser',
- id: self.name,
- playerName: self.name
+ id: ApiClient.deviceId(),
+ playerName: self.name,
+ playableMediaTypes: ['Audio', 'Video']
}];
return targets;
@@ -299,19 +300,6 @@
return params;
};
- self.canPlayMediaType = function (mediaType) {
-
- if (mediaType === "Video") {
- return true;
- }
-
- if (mediaType === "Audio") {
- return true;
- }
-
- return false;
- };
-
self.canQueueMediaType = function (mediaType) {
return currentItem && currentItem.MediaType == mediaType;
@@ -1114,12 +1102,7 @@
window.MediaPlayer = new mediaPlayer();
window.MediaController.registerPlayer(window.MediaPlayer);
- window.MediaController.setActivePlayer(window.MediaPlayer, {
-
- id: window.MediaPlayer.name,
- name: window.MediaPlayer.name
-
- });
+ window.MediaController.setActivePlayer(window.MediaPlayer, window.MediaPlayer.getTargets()[0]);
})(document, setTimeout, clearTimeout, screen, localStorage, $, setInterval, window);
\ No newline at end of file
diff --git a/dashboard-ui/scripts/remotecontrol.js b/dashboard-ui/scripts/remotecontrol.js
index 0d133af075..5458cd3a1f 100644
--- a/dashboard-ui/scripts/remotecontrol.js
+++ b/dashboard-ui/scripts/remotecontrol.js
@@ -411,6 +411,27 @@
window.RemoteControl = new remoteControl();
+ function sendPlayCommand(options, playType) {
+
+ var sessionId = MediaController.getPlayerInfo().id;
+
+ var ids = options.ids || options.items.map(function (i) {
+ return i.Id;
+ });
+
+ var remoteOptions = {
+ ItemIds: ids.join(','),
+
+ PlayCommand: playType
+ };
+
+ if (options.startPositionTicks) {
+ remoteOptions.startPositionTicks = options.startPositionTicks;
+ }
+
+ ApiClient.sendPlayCommand(sessionId, remoteOptions);
+ }
+
function remoteControlPlayer() {
var self = this;
@@ -419,36 +440,32 @@
self.play = function (options) {
+ sendPlayCommand(options, 'PlayNow');
};
self.shuffle = function (id) {
+ sendPlayCommand({ ids: [id] }, 'PlayShuffle');
};
self.instantMix = function (id) {
+ sendPlayCommand({ ids: [id] }, 'PlayInstantMix');
};
self.queue = function (options) {
+ sendPlayCommand(options, 'PlayNext');
};
self.queueNext = function (options) {
- };
-
- self.isPlaying = function () {
-
- };
-
- self.canPlayMediaType = function (mediaType) {
-
- return false;
+ sendPlayCommand(options, 'PlayLast');
};
self.canQueueMediaType = function (mediaType) {
- return false;
+ return mediaType == 'Audio' || mediaType == 'Video';
};
self.getTargets = function () {
@@ -460,23 +477,25 @@
controllableByUserId: Dashboard.getCurrentUserId()
}).done(function (sessions) {
-
- var targets = sessions.filter(function(s) {
+
+ var targets = sessions.filter(function (s) {
return s.DeviceId != ApiClient.deviceId();
- }).map(function(s) {
+ }).map(function (s) {
return {
name: s.DeviceName,
id: s.Id,
- playerName: self.name
+ playerName: self.name,
+ appName: s.Client,
+ playableMediaTypes: s.PlayableMediaTypes
};
});
deferred.resolveWith(null, [targets]);
- }).fail(function() {
-
+ }).fail(function () {
+
deferred.reject();
});