diff --git a/dashboard-ui/css/remotecontrol.css b/dashboard-ui/css/remotecontrol.css index 524ff84329..9583421149 100644 --- a/dashboard-ui/css/remotecontrol.css +++ b/dashboard-ui/css/remotecontrol.css @@ -20,13 +20,13 @@ } .tblRemoteControl td { - padding: 2px 5px; + padding: 5px; border-top: 1px solid #ccc; text-align: left; } .tblRemoteControl th { - padding: 2px 5px; + padding: 3px 5px; text-align: left; } diff --git a/dashboard-ui/scripts/remotecontrol.js b/dashboard-ui/scripts/remotecontrol.js index c040f8d527..ec75b0a54b 100644 --- a/dashboard-ui/scripts/remotecontrol.js +++ b/dashboard-ui/scripts/remotecontrol.js @@ -1,6 +1,33 @@ (function (window, document, $) { - function showMenu(options, sessionsPromise, usersPromise) { + function sendPlayFolderCommand(item, sessionId, popup) { + + ApiClient.getItems(Dashboard.getCurrentUserId(), { + + ParentId: item.Id, + Filters: "IsNotFolder", + SortBy: "SortName", + Recursive: true, + Limit: 100 + + }).done(function (result) { + + ApiClient.sendPlayCommand(sessionId, { + + ItemIds: result.Items.map(function (i) { + return i.Id; + }).join(','), + + PlayCommand: $('#fldPlayCommand', popup).val() + }); + + popup.popup("close"); + + }); + + } + + function showMenu(options, sessionsPromise) { var playFromRendered; var trailersRendered; @@ -26,10 +53,10 @@ html += ''; - html += '
'; + html += '
'; html += ''; - + html += ''; html += ''; @@ -46,6 +73,12 @@ var popup = $('#remoteControlFlyout').popup({ history: false, tolerance: 0, corners: false }).trigger('create').popup("open").on("popupafterclose", function () { + if (ApiClient.isWebSocketOpen()) { + ApiClient.sendWebSocketMessage("SessionsStop"); + } + + $(ApiClient).off("websocketmessage.remotecontrol"); + $(this).off("popupafterclose").remove(); }); @@ -102,7 +135,23 @@ }); } - else if (command == "Play" || command == "PlayFromChapter") { + else if (command == "Play") { + + if (item.IsFolder) { + + sendPlayFolderCommand(item, sessionIds[0], popup); + + return false; + } + + promise = ApiClient.sendPlayCommand(sessionIds[0], { + + ItemIds: [item.Id].join(','), + PlayCommand: $('#fldPlayCommand', popup).val() + + }); + } + else if (command == "PlayFromChapter") { var checkedChapter = $('.chkSelectPlayTime:checked', popup); @@ -143,7 +192,7 @@ promise.done(function () { - $('#remoteControlFlyout').popup("close"); + popup.popup("close"); }); return false; @@ -151,15 +200,27 @@ var elem = $('.sessionsPopupContent'); - $.when(sessionsPromise, usersPromise).done(function (response1, response2) { + sessionsPromise.done(function (sessions) { var deviceId = ApiClient.deviceId(); - var sessions = response1[0].filter(function (s) { + sessions = sessions.filter(function (s) { return s.DeviceId != deviceId; }); - renderSessions(sessions, response2[0], options, elem); + renderSessions(sessions, options, elem); + + if (ApiClient.isWebSocketOpen()) { + ApiClient.sendWebSocketMessage("SessionsStart", "1500,1500"); + + $(ApiClient).on("websocketmessage.remotecontrol", function (e, msg) { + + if (msg.MessageType === "Sessions") { + refreshSessions(msg.Data, elem); + } + }); + + } $('#selectCommand', popup).on('change', function () { @@ -197,7 +258,7 @@ renderPlayFromOptions(playFromMenu, item); } - $('#remoteControlFlyout').popup("reposition", { tolerance: 0 }); + popup.popup("reposition", { tolerance: 0 }); } else if (value == "Trailer") { @@ -212,7 +273,7 @@ renderVideos(trailersElem, trailers, 'Trailers'); - $('#remoteControlFlyout').popup("reposition", { tolerance: 0 }); + popup.popup("reposition", { tolerance: 0 }); }); } } @@ -229,7 +290,7 @@ renderVideos(specialFeaturesElem, videos, 'Special Features'); - $('#remoteControlFlyout').popup("reposition", { tolerance: 0 }); + popup.popup("reposition", { tolerance: 0 }); }); } } @@ -263,7 +324,7 @@ renderVideos(themeVideosElem, result.Items, 'Theme Videos'); - $('#remoteControlFlyout').popup("reposition", { tolerance: 0 }); + popup.popup("reposition", { tolerance: 0 }); }); } } @@ -331,7 +392,7 @@ $('.chkSelectPlayTime:first', elem).checked(true); } - function renderSessions(sessions, users, options, elem) { + function renderSessions(sessions, options, elem) { if (!sessions.length) { elem.html('
There are currently no available media browser sessions to control.
'); @@ -350,7 +411,11 @@ if (item.Type != 'Person' && item.Type != 'Genre' && item.Type != 'Studio' && item.Type != 'Artist') { - html += '