aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukePulverenti Luke Pulverenti luke pulverenti <LukePulverenti Luke Pulverenti luke.pulverenti@gmail.com>2012-09-09 15:00:19 -0400
committerLukePulverenti Luke Pulverenti luke pulverenti <LukePulverenti Luke Pulverenti luke.pulverenti@gmail.com>2012-09-09 15:00:19 -0400
commit2441ba0c6d3221aed42d90e904767b4c64899a53 (patch)
tree0a2f8b45ae10b79d434c14dba96969d8419860fc
parentc1c4c85fc250ce76d91a2afbda06c13173a06ec6 (diff)
Added api methods to set user ratings for items
-rw-r--r--MediaBrowser.Api/HttpHandlers/UserItemRatingHandler.cs59
-rw-r--r--MediaBrowser.Api/MediaBrowser.Api.csproj1
-rw-r--r--MediaBrowser.ApiInteraction.Portable/ApiClient.cs41
-rw-r--r--MediaBrowser.ApiInteraction/BaseHttpApiClient.cs48
-rw-r--r--MediaBrowser.Model/DTO/DTOUser.cs6
-rw-r--r--MediaBrowser.Model/Entities/User.cs11
6 files changed, 164 insertions, 2 deletions
diff --git a/MediaBrowser.Api/HttpHandlers/UserItemRatingHandler.cs b/MediaBrowser.Api/HttpHandlers/UserItemRatingHandler.cs
new file mode 100644
index 000000000..6f3908d05
--- /dev/null
+++ b/MediaBrowser.Api/HttpHandlers/UserItemRatingHandler.cs
@@ -0,0 +1,59 @@
+using MediaBrowser.Common.Net.Handlers;
+using MediaBrowser.Model.DTO;
+using MediaBrowser.Model.Entities;
+using System.ComponentModel.Composition;
+using System.Net;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Api.HttpHandlers
+{
+ /// <summary>
+ /// Provides a handler to set a user's rating for an item
+ /// </summary>
+ [Export(typeof(BaseHandler))]
+ public class UserItemRatingHandler : BaseSerializationHandler<DTOUserItemData>
+ {
+ public override bool HandlesRequest(HttpListenerRequest request)
+ {
+ return ApiService.IsApiUrlMatch("UserItemRating", request);
+ }
+
+ protected override Task<DTOUserItemData> GetObjectToSerialize()
+ {
+ // Get the item
+ BaseItem item = ApiService.GetItemById(QueryString["id"]);
+
+ // Get the user
+ User user = ApiService.GetUserById(QueryString["userid"], true);
+
+ // Get the user data for this item
+ UserItemData data = item.GetUserData(user);
+
+ if (data == null)
+ {
+ data = new UserItemData();
+ item.AddUserData(user, data);
+ }
+
+ // If clearing the rating, set it to null
+ if (QueryString["clear"] == "1")
+ {
+ data.Rating = null;
+ }
+
+ // If the user's rating mode is set to like/dislike
+ else if (user.ItemRatingMode == ItemRatingMode.LikeOrDislike)
+ {
+ data.Likes = QueryString["likes"] == "1";
+ }
+
+ // If the user's rating mode is set to numeric
+ else if (user.ItemRatingMode == ItemRatingMode.Numeric)
+ {
+ data.Rating = float.Parse(QueryString["value"]);
+ }
+
+ return Task.FromResult<DTOUserItemData>(ApiService.GetDTOUserItemData(data));
+ }
+ }
+} \ No newline at end of file
diff --git a/MediaBrowser.Api/MediaBrowser.Api.csproj b/MediaBrowser.Api/MediaBrowser.Api.csproj
index 31bb8f7a7..bedb8d62e 100644
--- a/MediaBrowser.Api/MediaBrowser.Api.csproj
+++ b/MediaBrowser.Api/MediaBrowser.Api.csproj
@@ -75,6 +75,7 @@
<Compile Include="HttpHandlers\StudioHandler.cs" />
<Compile Include="HttpHandlers\StudiosHandler.cs" />
<Compile Include="HttpHandlers\UserAuthenticationHandler.cs" />
+ <Compile Include="HttpHandlers\UserItemRatingHandler.cs" />
<Compile Include="HttpHandlers\UsersHandler.cs" />
<Compile Include="HttpHandlers\VideoHandler.cs" />
<Compile Include="HttpHandlers\WeatherHandler.cs" />
diff --git a/MediaBrowser.ApiInteraction.Portable/ApiClient.cs b/MediaBrowser.ApiInteraction.Portable/ApiClient.cs
index f63847e5c..d83c6b1a6 100644
--- a/MediaBrowser.ApiInteraction.Portable/ApiClient.cs
+++ b/MediaBrowser.ApiInteraction.Portable/ApiClient.cs
@@ -398,7 +398,46 @@ namespace MediaBrowser.ApiInteraction.Portable
GetDataAsync(url, callback);
}
-
+
+ /// <summary>
+ /// Clears a user's rating for an item
+ /// </summary>
+ public void ClearUserItemRatingAsync(Guid itemId, Guid userId, Action<DTOUserItemData> callback)
+ {
+ string url = ApiUrl + "/UserItemRating?id=" + itemId;
+
+ url += "&userid=" + userId;
+ url += "&clear=1";
+
+ GetDataAsync(url, callback);
+ }
+
+ /// <summary>
+ /// Updates a user's rating for an item, based on a numeric scale
+ /// </summary>
+ public void UpdateUserItemRatingAsync(Guid itemId, Guid userId, float value, Action<DTOUserItemData> callback)
+ {
+ string url = ApiUrl + "/UserItemRating?id=" + itemId;
+
+ url += "&userid=" + userId;
+ url += "&value=" + value;
+
+ GetDataAsync(url, callback);
+ }
+
+ /// <summary>
+ /// Updates a user's rating for an item, based on likes or dislikes
+ /// </summary>
+ public void UpdateUserItemRatingAsync(Guid itemId, Guid userId, bool likes, Action<DTOUserItemData> callback)
+ {
+ string url = ApiUrl + "/UserItemRating?id=" + itemId;
+
+ url += "&userid=" + userId;
+ url += "&likes=" + (likes ? "1" : "0");
+
+ GetDataAsync(url, callback);
+ }
+
/// <summary>
/// Performs a GET request, and deserializes the response stream to an object of Type T
/// </summary>
diff --git a/MediaBrowser.ApiInteraction/BaseHttpApiClient.cs b/MediaBrowser.ApiInteraction/BaseHttpApiClient.cs
index 3c3daa209..b6a4539ee 100644
--- a/MediaBrowser.ApiInteraction/BaseHttpApiClient.cs
+++ b/MediaBrowser.ApiInteraction/BaseHttpApiClient.cs
@@ -455,6 +455,54 @@ namespace MediaBrowser.ApiInteraction
}
/// <summary>
+ /// Clears a user's rating for an item
+ /// </summary>
+ public async Task<DTOUserItemData> ClearUserItemRatingAsync(Guid itemId, Guid userId)
+ {
+ string url = ApiUrl + "/UserItemRating?id=" + itemId;
+
+ url += "&userid=" + userId;
+ url += "&clear=1";
+
+ using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
+ {
+ return DeserializeFromStream<DTOUserItemData>(stream);
+ }
+ }
+
+ /// <summary>
+ /// Updates a user's rating for an item, based on a numeric scale
+ /// </summary>
+ public async Task<DTOUserItemData> UpdateUserItemRatingAsync(Guid itemId, Guid userId, float value)
+ {
+ string url = ApiUrl + "/UserItemRating?id=" + itemId;
+
+ url += "&userid=" + userId;
+ url += "&value=" + value;
+
+ using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
+ {
+ return DeserializeFromStream<DTOUserItemData>(stream);
+ }
+ }
+
+ /// <summary>
+ /// Updates a user's rating for an item, based on likes or dislikes
+ /// </summary>
+ public async Task<DTOUserItemData> UpdateUserItemRatingAsync(Guid itemId, Guid userId, bool likes)
+ {
+ string url = ApiUrl + "/UserItemRating?id=" + itemId;
+
+ url += "&userid=" + userId;
+ url += "&likes=" + (likes ? "1" : "0");
+
+ using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
+ {
+ return DeserializeFromStream<DTOUserItemData>(stream);
+ }
+ }
+
+ /// <summary>
/// Authenticates a user and returns the result
/// </summary>
public async Task<AuthenticationResult> AuthenticateUserAsync(Guid userId, string password)
diff --git a/MediaBrowser.Model/DTO/DTOUser.cs b/MediaBrowser.Model/DTO/DTOUser.cs
index aa066a3bd..802bc8d8d 100644
--- a/MediaBrowser.Model/DTO/DTOUser.cs
+++ b/MediaBrowser.Model/DTO/DTOUser.cs
@@ -1,4 +1,5 @@
-using ProtoBuf;
+using MediaBrowser.Model.Entities;
+using ProtoBuf;
using System;
namespace MediaBrowser.Model.DTO
@@ -23,5 +24,8 @@ namespace MediaBrowser.Model.DTO
[ProtoMember(6)]
public DateTime? LastActivityDate { get; set; }
+
+ [ProtoMember(7)]
+ public ItemRatingMode ItemRatingMode { get; set; }
}
}
diff --git a/MediaBrowser.Model/Entities/User.cs b/MediaBrowser.Model/Entities/User.cs
index 3c6117fca..68e130c7a 100644
--- a/MediaBrowser.Model/Entities/User.cs
+++ b/MediaBrowser.Model/Entities/User.cs
@@ -17,5 +17,16 @@ namespace MediaBrowser.Model.Entities
public DateTime? LastLoginDate { get; set; }
public DateTime? LastActivityDate { get; set; }
+
+ /// <summary>
+ /// This allows the user to configure how they want to rate items
+ /// </summary>
+ public ItemRatingMode ItemRatingMode { get; set; }
+ }
+
+ public enum ItemRatingMode
+ {
+ LikeOrDislike,
+ Numeric
}
}