mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-06-08 00:39:25 +01:00
Added api methods to mark an item as played or unplayed
This commit is contained in:
parent
f68137ec4a
commit
614668a447
@@ -72,17 +72,24 @@ namespace MediaBrowser.Model.Entities
|
||||
|
||||
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))
|
||||
{
|
||||
return null;
|
||||
if (createIfNull)
|
||||
{
|
||||
AddUserData(user, new UserItemData());
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
return UserData[user.Id];
|
||||
}
|
||||
|
||||
public void AddUserData(User user, UserItemData data)
|
||||
private void AddUserData(User user, UserItemData data)
|
||||
{
|
||||
if (UserData == null)
|
||||
{
|
||||
@@ -143,5 +150,23 @@ namespace MediaBrowser.Model.Entities
|
||||
|
||||
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 =>
|
||||
{
|
||||
UserItemData data = c.GetUserData(user);
|
||||
UserItemData data = c.GetUserData(user, false);
|
||||
|
||||
if (data != null)
|
||||
{
|
||||
@@ -171,21 +171,30 @@ namespace MediaBrowser.Model.Entities
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
return GetRecentlyAddedItems(itemSet, user).Where(i =>
|
||||
{
|
||||
var userdata = i.GetUserData(user);
|
||||
var userdata = i.GetUserData(user, false);
|
||||
|
||||
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)
|
||||
{
|
||||
return itemSet.Where(i =>
|
||||
@@ -195,12 +204,15 @@ namespace MediaBrowser.Model.Entities
|
||||
return false;
|
||||
}
|
||||
|
||||
var userdata = i.GetUserData(user);
|
||||
var userdata = i.GetUserData(user, false);
|
||||
|
||||
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)
|
||||
{
|
||||
itemSet = itemSet.Where(i => !(i.IsFolder));
|
||||
@@ -214,7 +226,7 @@ namespace MediaBrowser.Model.Entities
|
||||
|
||||
foreach (BaseItem item in itemSet)
|
||||
{
|
||||
UserItemData data = item.GetUserData(user);
|
||||
UserItemData data = item.GetUserData(user, false);
|
||||
|
||||
if (data == null)
|
||||
{
|
||||
@@ -236,6 +248,20 @@ namespace MediaBrowser.Model.Entities
|
||||
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>
|
||||
/// Finds an item by ID, recursively
|
||||
/// </summary>
|
||||
|
||||
Reference in New Issue
Block a user