diff --git a/dashboard-ui/scripts/mediacontroller.js b/dashboard-ui/scripts/mediacontroller.js index 8f9f9c489..fc69934b9 100644 --- a/dashboard-ui/scripts/mediacontroller.js +++ b/dashboard-ui/scripts/mediacontroller.js @@ -150,7 +150,7 @@ function onWebSocketMessageReceived(e, msg) { - var localPlayer = msg.MessageType === "Play" || msg.MessageType === "Play" ? + var localPlayer = msg.MessageType === "Play" || msg.MessageType === "Playstate" ? MediaController.getLocalPlayer() : null; diff --git a/dashboard-ui/scripts/mediaplayer.js b/dashboard-ui/scripts/mediaplayer.js index 6f9ffba5b..d5c39289d 100644 --- a/dashboard-ui/scripts/mediaplayer.js +++ b/dashboard-ui/scripts/mediaplayer.js @@ -305,16 +305,70 @@ return currentItem && currentItem.MediaType == mediaType; }; + function translateItemsForPlayback(items) { + + var deferred = $.Deferred(); + + var firstItem = items[0]; + var promise; + + if (firstItem.IsFolder) { + + promise = self.getItemsForPlayback({ + ParentId: firstItem.Id, + Filters: "IsNotFolder", + Recursive: true, + SortBy: "SortName", + MediaTypes: "Audio,Video" + }); + } + else if (firstItem.Type == "MusicArtist") { + + promise = self.getItemsForPlayback({ + Artists: firstItem.Name, + Filters: "IsNotFolder", + Recursive: true, + SortBy: "SortName", + MediaTypes: "Audio" + }); + + } + else if (firstItem.Type == "MusicGenre") { + + promise = self.getItemsForPlayback({ + Genres: firstItem.Name, + Filters: "IsNotFolder", + Recursive: true, + SortBy: "SortName", + MediaTypes: "Audio" + }); + } + + if (promise) { + promise.done(function (result) { + + deferred.resolveWith(null, [result.Items]); + }); + } else { + deferred.resolveWith(null, [items]); + } + + return deferred.promise(); + } + self.play = function (options) { Dashboard.getCurrentUser().done(function (user) { if (options.items) { - self.playInternal(options.items[0], options.startPositionTicks, user); + translateItemsForPlayback(options.items).done(function (items) { - self.playlist = options.items; - currentPlaylistIndex = 0; + self.playInternal(items[0], options.startPositionTicks, user); + + self.playlist = items; + currentPlaylistIndex = 0; + }); } else { @@ -324,12 +378,13 @@ }).done(function (result) { - options.items = result.Items; + translateItemsForPlayback(result.Items).done(function (items) { - self.playInternal(options.items[0], options.startPositionTicks, user); + self.playInternal(items[0], options.startPositionTicks, user); - self.playlist = options.items; - currentPlaylistIndex = 0; + self.playlist = items; + currentPlaylistIndex = 0; + }); }); } @@ -580,7 +635,10 @@ if (options.items) { - self.queueItems(options.items); + translateItemsForPlayback(options.items).done(function (items) { + + self.queueItems(items); + }); } else { @@ -590,13 +648,13 @@ }).done(function (result) { - options.items = result.Items; + translateItemsForPlayback(result.Items).done(function (items) { - self.queueItems(options.items); + self.queueItems(items); + }); }); } - }); }; diff --git a/dashboard-ui/scripts/remotecontrol.js b/dashboard-ui/scripts/remotecontrol.js index 5458cd3a1..7318926d9 100644 --- a/dashboard-ui/scripts/remotecontrol.js +++ b/dashboard-ui/scripts/remotecontrol.js @@ -472,11 +472,12 @@ var deferred = $.Deferred(); - ApiClient.getSessions({ + var sessionQuery = { + SupportsRemoteControl: true, + ControllableByUserId: Dashboard.getCurrentUserId() + }; - controllableByUserId: Dashboard.getCurrentUserId() - - }).done(function (sessions) { + ApiClient.getSessions(sessionQuery).done(function (sessions) { var targets = sessions.filter(function (s) {