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(); });