aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Model
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Model')
-rw-r--r--MediaBrowser.Model/Entities/BaseItem.cs31
-rw-r--r--MediaBrowser.Model/Entities/Folder.cs34
2 files changed, 58 insertions, 7 deletions
diff --git a/MediaBrowser.Model/Entities/BaseItem.cs b/MediaBrowser.Model/Entities/BaseItem.cs
index 7751207425..51cb34a531 100644
--- a/MediaBrowser.Model/Entities/BaseItem.cs
+++ b/MediaBrowser.Model/Entities/BaseItem.cs
@@ -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;
+ }
+ }
}
}
diff --git a/MediaBrowser.Model/Entities/Folder.cs b/MediaBrowser.Model/Entities/Folder.cs
index ec37107c30..ef05071385 100644
--- a/MediaBrowser.Model/Entities/Folder.cs
+++ b/MediaBrowser.Model/Entities/Folder.cs
@@ -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)
{
@@ -237,6 +249,20 @@ namespace MediaBrowser.Model.Entities
}
/// <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>
public override BaseItem FindItemById(Guid id)