Added api methods to mark an item as played or unplayed
This commit is contained in:
parent
f68137ec4a
commit
614668a447
|
@ -172,7 +172,7 @@ namespace MediaBrowser.Api
|
||||||
dto.Type = item.GetType().Name;
|
dto.Type = item.GetType().Name;
|
||||||
dto.UserRating = item.UserRating;
|
dto.UserRating = item.UserRating;
|
||||||
|
|
||||||
dto.UserData = GetDTOUserItemData(item.GetUserData(user));
|
dto.UserData = GetDTOUserItemData(item.GetUserData(user, false));
|
||||||
|
|
||||||
Folder folder = item as Folder;
|
Folder folder = item as Folder;
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ namespace MediaBrowser.Api.HttpHandlers
|
||||||
/// Provides a handler to set user favorite status for an item
|
/// Provides a handler to set user favorite status for an item
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Export(typeof(BaseHandler))]
|
[Export(typeof(BaseHandler))]
|
||||||
public class FavoriteStatus : BaseSerializationHandler<DTOUserItemData>
|
public class FavoriteStatusHandler : BaseSerializationHandler<DTOUserItemData>
|
||||||
{
|
{
|
||||||
public override bool HandlesRequest(HttpListenerRequest request)
|
public override bool HandlesRequest(HttpListenerRequest request)
|
||||||
{
|
{
|
||||||
|
@ -27,13 +27,7 @@ namespace MediaBrowser.Api.HttpHandlers
|
||||||
User user = ApiService.GetUserById(QueryString["userid"], true);
|
User user = ApiService.GetUserById(QueryString["userid"], true);
|
||||||
|
|
||||||
// Get the user data for this item
|
// Get the user data for this item
|
||||||
UserItemData data = item.GetUserData(user);
|
UserItemData data = item.GetUserData(user, true);
|
||||||
|
|
||||||
if (data == null)
|
|
||||||
{
|
|
||||||
data = new UserItemData();
|
|
||||||
item.AddUserData(user, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set favorite status
|
// Set favorite status
|
||||||
data.IsFavorite = QueryString["isfavorite"] == "1";
|
data.IsFavorite = QueryString["isfavorite"] == "1";
|
||||||
|
|
38
MediaBrowser.Api/HttpHandlers/PlayedStatusHandler.cs
Normal file
38
MediaBrowser.Api/HttpHandlers/PlayedStatusHandler.cs
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
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 played status for an item
|
||||||
|
/// </summary>
|
||||||
|
[Export(typeof(BaseHandler))]
|
||||||
|
public class PlayedStatusHandler : BaseSerializationHandler<DTOUserItemData>
|
||||||
|
{
|
||||||
|
public override bool HandlesRequest(HttpListenerRequest request)
|
||||||
|
{
|
||||||
|
return ApiService.IsApiUrlMatch("PlayedStatus", 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);
|
||||||
|
|
||||||
|
bool wasPlayed = QueryString["played"] == "1";
|
||||||
|
|
||||||
|
item.SetPlayedStatus(user, wasPlayed);
|
||||||
|
|
||||||
|
UserItemData data = item.GetUserData(user, true);
|
||||||
|
|
||||||
|
return Task.FromResult<DTOUserItemData>(ApiService.GetDTOUserItemData(data));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -27,13 +27,7 @@ namespace MediaBrowser.Api.HttpHandlers
|
||||||
User user = ApiService.GetUserById(QueryString["userid"], true);
|
User user = ApiService.GetUserById(QueryString["userid"], true);
|
||||||
|
|
||||||
// Get the user data for this item
|
// Get the user data for this item
|
||||||
UserItemData data = item.GetUserData(user);
|
UserItemData data = item.GetUserData(user, true);
|
||||||
|
|
||||||
if (data == null)
|
|
||||||
{
|
|
||||||
data = new UserItemData();
|
|
||||||
item.AddUserData(user, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If clearing the rating, set it to null
|
// If clearing the rating, set it to null
|
||||||
if (QueryString["clear"] == "1")
|
if (QueryString["clear"] == "1")
|
||||||
|
|
|
@ -62,6 +62,7 @@
|
||||||
<Compile Include="HttpHandlers\BaseMediaHandler.cs" />
|
<Compile Include="HttpHandlers\BaseMediaHandler.cs" />
|
||||||
<Compile Include="HttpHandlers\FavoriteStatusHandler.cs" />
|
<Compile Include="HttpHandlers\FavoriteStatusHandler.cs" />
|
||||||
<Compile Include="HttpHandlers\MovieSpecialFeaturesHandler.cs" />
|
<Compile Include="HttpHandlers\MovieSpecialFeaturesHandler.cs" />
|
||||||
|
<Compile Include="HttpHandlers\PlayedStatusHandler.cs" />
|
||||||
<Compile Include="HttpHandlers\UserHandler.cs" />
|
<Compile Include="HttpHandlers\UserHandler.cs" />
|
||||||
<Compile Include="HttpHandlers\GenreHandler.cs" />
|
<Compile Include="HttpHandlers\GenreHandler.cs" />
|
||||||
<Compile Include="HttpHandlers\GenresHandler.cs" />
|
<Compile Include="HttpHandlers\GenresHandler.cs" />
|
||||||
|
|
|
@ -410,6 +410,19 @@ namespace MediaBrowser.ApiInteraction.Portable
|
||||||
GetDataAsync(url, callback);
|
GetDataAsync(url, callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates played status for an item
|
||||||
|
/// </summary>
|
||||||
|
public void UpdatePlayedStatusAsync(Guid itemId, Guid userId, bool wasPlayed, Action<DTOUserItemData> callback)
|
||||||
|
{
|
||||||
|
string url = ApiUrl + "/PlayedStatus?id=" + itemId;
|
||||||
|
|
||||||
|
url += "&userid=" + userId;
|
||||||
|
url += "&played=" + (wasPlayed ? "1" : "0");
|
||||||
|
|
||||||
|
GetDataAsync(url, callback);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Clears a user's rating for an item
|
/// Clears a user's rating for an item
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -464,6 +464,22 @@ namespace MediaBrowser.ApiInteraction
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Updates played status for an item
|
||||||
|
/// </summary>
|
||||||
|
public async Task<DTOUserItemData> UpdatePlayedStatusAsync(Guid itemId, Guid userId, bool wasPlayed)
|
||||||
|
{
|
||||||
|
string url = ApiUrl + "/PlayedStatus?id=" + itemId;
|
||||||
|
|
||||||
|
url += "&userid=" + userId;
|
||||||
|
url += "&played=" + (wasPlayed ? "1" : "0");
|
||||||
|
|
||||||
|
using (Stream stream = await GetSerializedStreamAsync(url).ConfigureAwait(false))
|
||||||
|
{
|
||||||
|
return DeserializeFromStream<DTOUserItemData>(stream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Updates a user's favorite status for an item and returns the updated UserItemData object.
|
/// Updates a user's favorite status for an item and returns the updated UserItemData object.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -72,17 +72,24 @@ namespace MediaBrowser.Model.Entities
|
||||||
|
|
||||||
public Dictionary<Guid, UserItemData> UserData { get; set; }
|
public Dictionary<Guid, UserItemData> UserData { get; set; }
|
||||||
|
|
||||||
public UserItemData GetUserData(User user)
|
public UserItemData GetUserData(User user, bool createIfNull)
|
||||||
{
|
{
|
||||||
if (UserData == null || !UserData.ContainsKey(user.Id))
|
if (UserData == null || !UserData.ContainsKey(user.Id))
|
||||||
{
|
{
|
||||||
return null;
|
if (createIfNull)
|
||||||
|
{
|
||||||
|
AddUserData(user, new UserItemData());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return UserData[user.Id];
|
return UserData[user.Id];
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddUserData(User user, UserItemData data)
|
private void AddUserData(User user, UserItemData data)
|
||||||
{
|
{
|
||||||
if (UserData == null)
|
if (UserData == null)
|
||||||
{
|
{
|
||||||
|
@ -143,5 +150,23 @@ namespace MediaBrowser.Model.Entities
|
||||||
|
|
||||||
People[person.Name] = person;
|
People[person.Name] = person;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Marks the item as either played or unplayed
|
||||||
|
/// </summary>
|
||||||
|
public virtual void SetPlayedStatus(User user, bool wasPlayed)
|
||||||
|
{
|
||||||
|
UserItemData data = GetUserData(user, true);
|
||||||
|
|
||||||
|
if (wasPlayed)
|
||||||
|
{
|
||||||
|
data.PlayCount = Math.Max(data.PlayCount, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
data.PlayCount = 0;
|
||||||
|
data.PlaybackPositionTicks = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,7 +103,7 @@ namespace MediaBrowser.Model.Entities
|
||||||
{
|
{
|
||||||
return GetParentalAllowedRecursiveChildren(user).Where(c =>
|
return GetParentalAllowedRecursiveChildren(user).Where(c =>
|
||||||
{
|
{
|
||||||
UserItemData data = c.GetUserData(user);
|
UserItemData data = c.GetUserData(user, false);
|
||||||
|
|
||||||
if (data != null)
|
if (data != null)
|
||||||
{
|
{
|
||||||
|
@ -171,21 +171,30 @@ namespace MediaBrowser.Model.Entities
|
||||||
return GetInProgressItems(GetParentalAllowedRecursiveChildren(user), user);
|
return GetInProgressItems(GetParentalAllowedRecursiveChildren(user), user);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Takes a list of items and returns the ones that are recently added
|
||||||
|
/// </summary>
|
||||||
private static IEnumerable<BaseItem> GetRecentlyAddedItems(IEnumerable<BaseItem> itemSet, User user)
|
private static IEnumerable<BaseItem> GetRecentlyAddedItems(IEnumerable<BaseItem> itemSet, User user)
|
||||||
{
|
{
|
||||||
return itemSet.Where(i => !(i.IsFolder) && i.IsRecentlyAdded(user));
|
return itemSet.Where(i => !(i.IsFolder) && i.IsRecentlyAdded(user));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Takes a list of items and returns the ones that are recently added and unplayed
|
||||||
|
/// </summary>
|
||||||
private static IEnumerable<BaseItem> GetRecentlyAddedUnplayedItems(IEnumerable<BaseItem> itemSet, User user)
|
private static IEnumerable<BaseItem> GetRecentlyAddedUnplayedItems(IEnumerable<BaseItem> itemSet, User user)
|
||||||
{
|
{
|
||||||
return GetRecentlyAddedItems(itemSet, user).Where(i =>
|
return GetRecentlyAddedItems(itemSet, user).Where(i =>
|
||||||
{
|
{
|
||||||
var userdata = i.GetUserData(user);
|
var userdata = i.GetUserData(user, false);
|
||||||
|
|
||||||
return userdata == null || userdata.PlayCount == 0;
|
return userdata == null || userdata.PlayCount == 0;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Takes a list of items and returns the ones that are in progress
|
||||||
|
/// </summary>
|
||||||
private static IEnumerable<BaseItem> GetInProgressItems(IEnumerable<BaseItem> itemSet, User user)
|
private static IEnumerable<BaseItem> GetInProgressItems(IEnumerable<BaseItem> itemSet, User user)
|
||||||
{
|
{
|
||||||
return itemSet.Where(i =>
|
return itemSet.Where(i =>
|
||||||
|
@ -195,12 +204,15 @@ namespace MediaBrowser.Model.Entities
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var userdata = i.GetUserData(user);
|
var userdata = i.GetUserData(user, false);
|
||||||
|
|
||||||
return userdata != null && userdata.PlaybackPositionTicks > 0;
|
return userdata != null && userdata.PlaybackPositionTicks > 0;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the total played percentage for a set of items
|
||||||
|
/// </summary>
|
||||||
private static decimal GetPlayedPercentage(IEnumerable<BaseItem> itemSet, User user)
|
private static decimal GetPlayedPercentage(IEnumerable<BaseItem> itemSet, User user)
|
||||||
{
|
{
|
||||||
itemSet = itemSet.Where(i => !(i.IsFolder));
|
itemSet = itemSet.Where(i => !(i.IsFolder));
|
||||||
|
@ -214,7 +226,7 @@ namespace MediaBrowser.Model.Entities
|
||||||
|
|
||||||
foreach (BaseItem item in itemSet)
|
foreach (BaseItem item in itemSet)
|
||||||
{
|
{
|
||||||
UserItemData data = item.GetUserData(user);
|
UserItemData data = item.GetUserData(user, false);
|
||||||
|
|
||||||
if (data == null)
|
if (data == null)
|
||||||
{
|
{
|
||||||
|
@ -236,6 +248,20 @@ namespace MediaBrowser.Model.Entities
|
||||||
return totalPercent / itemSet.Count();
|
return totalPercent / itemSet.Count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Marks the item as either played or unplayed
|
||||||
|
/// </summary>
|
||||||
|
public override void SetPlayedStatus(User user, bool wasPlayed)
|
||||||
|
{
|
||||||
|
base.SetPlayedStatus(user, wasPlayed);
|
||||||
|
|
||||||
|
// Now sweep through recursively and update status
|
||||||
|
foreach (BaseItem item in GetParentalAllowedChildren(user))
|
||||||
|
{
|
||||||
|
item.SetPlayedStatus(user, wasPlayed);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Finds an item by ID, recursively
|
/// Finds an item by ID, recursively
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user