diff --git a/ApiClient.js b/ApiClient.js index 65012f94d2..4c88b35c3f 100644 --- a/ApiClient.js +++ b/ApiClient.js @@ -1724,12 +1724,12 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { }; /** - * Updates a user's favorite status for a person. + * Updates a user's favorite status for an item by name. * @param {String} userId * @param {String} name * @param {Boolean} isFavorite */ - self.updateFavoritePersonStatus = function (userId, name, isFavorite) { + self.updateItemByNameFavoriteStatus = function (userId, name, isFavorite) { if (!userId) { throw new Error("null userId"); @@ -1739,7 +1739,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { throw new Error("null name"); } - var url = self.getUrl("Users/" + userId + "/FavoritePersons/" + name); + var url = self.getUrl("Users/" + userId + "/ItemsByName/Favorites/" + name); var method = isFavorite ? "POST" : "DELETE"; @@ -1751,12 +1751,12 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { }; /** - * Updates a user's favorite status for a genre. - * @param {String} userId - * @param {String} name - * @param {Boolean} isFavorite - */ - self.updateFavoriteGenreStatus = function (userId, name, isFavorite) { + * Updates a user's rating for an item by name. + * @param {String} userId + * @param {String} name + * @param {Boolean} likes + */ + self.updateItemByNameRating = function (userId, name, likes) { if (!userId) { throw new Error("null userId"); @@ -1766,24 +1766,46 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { throw new Error("null name"); } - var url = self.getUrl("Users/" + userId + "/FavoriteGenre/" + name); - - var method = isFavorite ? "POST" : "DELETE"; + var url = self.getUrl("Users/" + userId + "/ItemsByName/" + name + "/Rating", { + likes: likes + }); return self.ajax({ - type: method, + type: "POST", + url: url + }); + }; + + /** + * Clears a user's rating for an item by name. + * @param {String} userId + * @param {String} name + */ + self.clearItemByNameRating = function (userId, name) { + + if (!userId) { + throw new Error("null userId"); + } + + if (!name) { + throw new Error("null name"); + } + + var url = self.getUrl("Users/" + userId + "/ItemsByName/" + name + "/Rating"); + + return self.ajax({ + type: "DELETE", url: url, dataType: "json" }); }; /** - * Updates a user's favorite status for a studio. - * @param {String} userId - * @param {String} name - * @param {Boolean} isFavorite - */ - self.updateFavoriteStudioStatus = function (userId, name, isFavorite) { + * Gets the full user data object for an item by name. + * @param {String} userId + * @param {String} name + */ + self.getItembyNameUserData = function (userId, name) { if (!userId) { throw new Error("null userId"); @@ -1793,12 +1815,10 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { throw new Error("null name"); } - var url = self.getUrl("Users/" + userId + "/FavoriteStudios/" + name); - - var method = isFavorite ? "POST" : "DELETE"; + var url = self.getUrl("Users/" + userId + "/ItemsByName/" + name + "/UserData"); return self.ajax({ - type: method, + type: "GET", url: url, dataType: "json" }); diff --git a/dashboard-ui/scripts/itembynamedetailpage.js b/dashboard-ui/scripts/itembynamedetailpage.js index db5a2fdeef..5b94501b2c 100644 --- a/dashboard-ui/scripts/itembynamedetailpage.js +++ b/dashboard-ui/scripts/itembynamedetailpage.js @@ -6,24 +6,40 @@ var getItemPromise; - var person = getParameterByName('person'); + var name = getParameterByName('person'); - if (person) { - getItemPromise = ApiClient.getPerson(person); - } - - else if (getParameterByName('studio')) { - getItemPromise = ApiClient.getStudio(getParameterByName('studio')); - } - else if (getParameterByName('genre')) { - getItemPromise = ApiClient.getGenre(getParameterByName('genre')); + if (name) { + getItemPromise = ApiClient.getPerson(name); } else { - throw new Error('Invalid request'); + + name = getParameterByName('studio'); + + if (name) { + + getItemPromise = ApiClient.getStudio(name); + + } else { + + name = getParameterByName('genre'); + + if (name) { + getItemPromise = ApiClient.getGenre(name); + } + else { + throw new Error('Invalid request'); + } + } } - getItemPromise.done(function (item) { + var getUserDataPromise = ApiClient.getItembyNameUserData(Dashboard.getCurrentUserId(), name); - var name = item.Name; + $.when(getItemPromise, getUserDataPromise).done(function (response1, response2) { + + var item = response1[0]; + var userdata = response2[0]; + + item.UserData = userdata; + name = item.Name; $('#itemImage', page).html(LibraryBrowser.getDetailImageHtml(item)); diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index 927c027fe9..93a60f3fc9 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -632,14 +632,8 @@ var markAsFavorite = $link.hasClass('imgFavoriteOff'); - if (type == "Person") { - ApiClient.updateFavoritePersonStatus(Dashboard.getCurrentUserId(), id, markAsFavorite); - } - else if (type == "Studio") { - ApiClient.updateFavoriteStudioStatus(Dashboard.getCurrentUserId(), id, markAsFavorite); - } - else if (type == "Genre") { - ApiClient.updateFavoriteGenreStatus(Dashboard.getCurrentUserId(), id, markAsFavorite); + if (type == "Person" || type == "Studio" || type == "Genre") { + ApiClient.updateItemByNameFavoriteStatus(Dashboard.getCurrentUserId(), id, markAsFavorite); } else { ApiClient.updateFavoriteStatus(Dashboard.getCurrentUserId(), id, markAsFavorite); @@ -657,19 +651,30 @@ markLike: function (link) { var id = link.getAttribute('data-itemid'); + var type = link.getAttribute('data-type'); var $link = $(link); if ($link.hasClass('imgLikeOff')) { - ApiClient.updateUserItemRating(Dashboard.getCurrentUserId(), id, true); + if (type == "Person" || type == "Studio" || type == "Genre") { + ApiClient.updateItemByNameRating(Dashboard.getCurrentUserId(), id, true); + } + else { + ApiClient.updateUserItemRating(Dashboard.getCurrentUserId(), id, true); + } link.src = "css/images/userdata/thumbs_up_on.png"; $link.addClass('imgLike').removeClass('imgLikeOff'); } else { - ApiClient.clearUserItemRating(Dashboard.getCurrentUserId(), id); + if (type == "Person" || type == "Studio" || type == "Genre") { + ApiClient.clearItemByNameRating(Dashboard.getCurrentUserId(), id); + } + else { + ApiClient.clearUserItemRating(Dashboard.getCurrentUserId(), id); + } link.src = "css/images/userdata/thumbs_up_off.png"; $link.addClass('imgLikeOff').removeClass('imgLike'); @@ -683,19 +688,30 @@ markDislike: function (link) { var id = link.getAttribute('data-itemid'); + var type = link.getAttribute('data-type'); var $link = $(link); if ($link.hasClass('imgDislikeOff')) { - ApiClient.updateUserItemRating(Dashboard.getCurrentUserId(), id, false); + if (type == "Person" || type == "Studio" || type == "Genre") { + ApiClient.updateItemByNameRating(Dashboard.getCurrentUserId(), id, false); + } + else { + ApiClient.updateUserItemRating(Dashboard.getCurrentUserId(), id, false); + } link.src = "css/images/userdata/thumbs_down_on.png"; $link.addClass('imgDislike').removeClass('imgDislikeOff'); } else { - ApiClient.clearUserItemRating(Dashboard.getCurrentUserId(), id); + if (type == "Person" || type == "Studio" || type == "Genre") { + ApiClient.clearItemByNameRating(Dashboard.getCurrentUserId(), id); + } + else { + ApiClient.clearUserItemRating(Dashboard.getCurrentUserId(), id); + } link.src = "css/images/userdata/thumbs_down_off.png"; $link.addClass('imgDislikeOff').removeClass('imgDislike'); diff --git a/packages.config b/packages.config index 74c1b370fa..01740f591a 100644 --- a/packages.config +++ b/packages.config @@ -1,6 +1,6 @@  - + \ No newline at end of file