diff --git a/ApiClient.js b/ApiClient.js index 2982a40a9d..999a7d9180 100644 --- a/ApiClient.js +++ b/ApiClient.js @@ -2379,6 +2379,16 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { throw new Error("null itemId"); } + if (self.isWebSocketOpen()) { + + var deferred = $.Deferred(); + + self.sendWebSocketMessage("PlaybackStart", itemId); + + deferred.resolveWith(null, []); + return deferred.promise(); + } + var url = self.getUrl("Users/" + userId + "/PlayingItems/" + itemId); return self.ajax({ @@ -2392,7 +2402,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { * @param {String} userId * @param {String} itemId */ - self.reportPlaybackProgress = function (userId, itemId, positionTicks) { + self.reportPlaybackProgress = function (userId, itemId, positionTicks, isPaused) { if (!userId) { throw new Error("null userId"); @@ -2402,6 +2412,16 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { throw new Error("null itemId"); } + if (self.isWebSocketOpen()) { + + var deferred = $.Deferred(); + + self.sendWebSocketMessage("PlaybackProgress", itemId + "|" + (positionTicks == null ? "" : positionTicks) + "|" + (isPaused == null ? "" : isPaused)); + + deferred.resolveWith(null, []); + return deferred.promise(); + } + var params = { }; @@ -2433,6 +2453,16 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { throw new Error("null itemId"); } + if (self.isWebSocketOpen()) { + + var deferred = $.Deferred(); + + self.sendWebSocketMessage("PlaybackStopped", itemId + "|" + (positionTicks == null ? "" : positionTicks)); + + deferred.resolveWith(null, []); + return deferred.promise(); + } + var params = { }; diff --git a/dashboard-ui/scripts/Itemdetailpage.js b/dashboard-ui/scripts/Itemdetailpage.js index 7368623522..7ed0a4d6d4 100644 --- a/dashboard-ui/scripts/Itemdetailpage.js +++ b/dashboard-ui/scripts/Itemdetailpage.js @@ -40,6 +40,10 @@ $(".autoNumeric").autoNumeric('init'); + if (ApiClient.isWebSocketOpen()) { + ApiClient.sendWebSocketMessage("Context", [item.Type, item.Id, context].join('|')); + } + Dashboard.hideLoadingMsg(); }); } diff --git a/dashboard-ui/scripts/itembynamedetailpage.js b/dashboard-ui/scripts/itembynamedetailpage.js index 2775940461..dd6822d2a7 100644 --- a/dashboard-ui/scripts/itembynamedetailpage.js +++ b/dashboard-ui/scripts/itembynamedetailpage.js @@ -59,6 +59,19 @@ renderDetails(page, item); renderTabs(page, item); + if (ApiClient.isWebSocketOpen()) { + + var vals = [item.Type, item.Name]; + + var context = getParameterByName('context'); + + if (context) { + vals.push(vals); + } + + ApiClient.sendWebSocketMessage("Context", vals.join('|')); + } + Dashboard.hideLoadingMsg(); }); } diff --git a/dashboard-ui/scripts/itemlistpage.js b/dashboard-ui/scripts/itemlistpage.js index c850d08dc0..99ed09b82e 100644 --- a/dashboard-ui/scripts/itemlistpage.js +++ b/dashboard-ui/scripts/itemlistpage.js @@ -76,7 +76,13 @@ } $('#itemName', page).html(name); + Dashboard.setPageTitle(name); + + if (ApiClient.isWebSocketOpen()) { + ApiClient.sendWebSocketMessage("Context", [item.Type, item.Id].join('|')); + } + }); Dashboard.getCurrentUser().done(function (user) { diff --git a/dashboard-ui/scripts/mediaplayer.js b/dashboard-ui/scripts/mediaplayer.js index 1d08768844..b2467c9e7d 100644 --- a/dashboard-ui/scripts/mediaplayer.js +++ b/dashboard-ui/scripts/mediaplayer.js @@ -264,6 +264,8 @@ ApiClient.reportPlaybackStart(Dashboard.getCurrentUserId(), itemId); + var intervalTime = ApiClient.isWebSocketOpen() ? 10000 : 30000; + currentProgressInterval = setInterval(function () { var player = _V_("videoWindow"); @@ -276,7 +278,8 @@ var positionTicks = parseInt(startTime) + Math.floor(10000000 * player.currentTime()); ApiClient.reportPlaybackProgress(Dashboard.getCurrentUserId(), itemId, positionTicks); - }, 30000); + + }, intervalTime); } self.canPlay = function (item) { diff --git a/dashboard-ui/scripts/site.js b/dashboard-ui/scripts/site.js index 1d29c4974b..9bfdba307f 100644 --- a/dashboard-ui/scripts/site.js +++ b/dashboard-ui/scripts/site.js @@ -17,7 +17,7 @@ }); if ($.browser.msie) { - + // This is unfortuantely required due to IE's over-aggressive caching. // https://github.com/MediaBrowser/MediaBrowser/issues/179 $.ajaxSetup({ @@ -734,7 +734,7 @@ var Dashboard = { } }); }, - + ensureToolsMenu: function (page) { if (!page.hasClass('type-interior')) { @@ -886,6 +886,53 @@ var Dashboard = { Dashboard.showTaskCompletionNotification(msg.Data); } + else if (msg.MessageType === "Browse") { + + Dashboard.onBrowseCommand(msg.Data); + } + else if (msg.MessageType === "Play") { + + + + } + else if (msg.MessageType === "UpdatePlaystate") { + + // TODO for Craig + } + }, + + onBrowseCommand: function (cmd) { + + var context = cmd.Context || ""; + + var url; + + var type = cmd.ItemType.toLowerCase(); + + if (type == "genre") { + url = "itembynamedetails.html?genre=" + ApiClient.encodeName(cmd.ItemIdentifier) + "&context=" + context; + } + else if (type == "studio") { + url = "itembynamedetails.html?studio=" + ApiClient.encodeName(cmd.ItemIdentifier) + "&context=" + context; + } + else if (type == "person") { + url = "itembynamedetails.html?person=" + ApiClient.encodeName(cmd.ItemIdentifier) + "&context=" + context; + } + else if (type == "artist") { + url = "itembynamedetails.html?artist=" + ApiClient.encodeName(cmd.ItemIdentifier) + "&context=" + (context || "music"); + } + + if (url) { + Dashboard.navigate(url); + return; + } + + ApiClient.getItem(Dashboard.getCurrentUserId(), cmd.ItemIdentifier).done(function (item) { + + Dashboard.navigate(LibraryBrowser.getHref(item, context)); + + }); + }, showTaskCompletionNotification: function (result) { @@ -983,7 +1030,7 @@ var Dashboard = { clearTimeout(Dashboard.newItemTimeout); } - Dashboard.newItemTimeout = setTimeout(function() { + Dashboard.newItemTimeout = setTimeout(function () { Dashboard.onNewItemTimerStopped(data); @@ -993,7 +1040,7 @@ var Dashboard = { onNewItemTimerStopped: function (data) { var newItems = data.ItemsAdded; - + if (!newItems.length) { return; } @@ -1129,7 +1176,7 @@ $(document).on('pageinit', ".page", function () { } }); } - + }).on('pagebeforeshow', ".page", function () { Dashboard.refreshSystemInfoFromServer(); diff --git a/packages.config b/packages.config index 8072ff77df..be16737802 100644 --- a/packages.config +++ b/packages.config @@ -1,6 +1,6 @@  - + \ No newline at end of file