aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Controller
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2016-05-11 10:36:28 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2016-05-11 10:36:28 -0400
commit3118196ac6639dd719f63888ccb16a33b4a4bc7e (patch)
treea8b4f6e5a64b753b789ae03b31ccde2e4ddc49f9 /MediaBrowser.Controller
parent66d2f2555565f46816051829b7418ec4296cc873 (diff)
update user data queries
Diffstat (limited to 'MediaBrowser.Controller')
-rw-r--r--MediaBrowser.Controller/Entities/BaseItem.cs6
-rw-r--r--MediaBrowser.Controller/Entities/Folder.cs3
-rw-r--r--MediaBrowser.Controller/Entities/TV/Episode.cs6
-rw-r--r--MediaBrowser.Controller/Entities/TV/Season.cs33
-rw-r--r--MediaBrowser.Controller/Entities/TV/Series.cs70
-rw-r--r--MediaBrowser.Controller/Entities/UserViewBuilder.cs2
-rw-r--r--MediaBrowser.Controller/Library/IUserDataManager.cs16
7 files changed, 71 insertions, 65 deletions
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index 1c8817afed..61060766f9 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -149,6 +149,12 @@ namespace MediaBrowser.Controller.Entities
}
}
+ [IgnoreDataMember]
+ public bool IsUnaired
+ {
+ get { return PremiereDate.HasValue && PremiereDate.Value.ToLocalTime().Date >= DateTime.Now.Date; }
+ }
+
public string OriginalTitle { get; set; }
/// <summary>
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index 79cbd7bd30..77e3624191 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -1316,7 +1316,8 @@ namespace MediaBrowser.Controller.Entities
{
var folder = (Folder)child;
- folder.AddChildrenToList(result, includeLinkedChildren, true, filter);
+ // We can only support includeLinkedChildren for the first folder, or we might end up stuck in a loop of linked items
+ folder.AddChildrenToList(result, false, true, filter);
}
}
diff --git a/MediaBrowser.Controller/Entities/TV/Episode.cs b/MediaBrowser.Controller/Entities/TV/Episode.cs
index 605b838cd7..a4b0b3082a 100644
--- a/MediaBrowser.Controller/Entities/TV/Episode.cs
+++ b/MediaBrowser.Controller/Entities/TV/Episode.cs
@@ -211,12 +211,6 @@ namespace MediaBrowser.Controller.Entities.TV
}
[IgnoreDataMember]
- public bool IsUnaired
- {
- get { return PremiereDate.HasValue && PremiereDate.Value.ToLocalTime().Date >= DateTime.Now.Date; }
- }
-
- [IgnoreDataMember]
public bool IsVirtualUnaired
{
get { return LocationType == LocationType.Virtual && IsUnaired; }
diff --git a/MediaBrowser.Controller/Entities/TV/Season.cs b/MediaBrowser.Controller/Entities/TV/Season.cs
index ac8cc0ee26..ab125eecb6 100644
--- a/MediaBrowser.Controller/Entities/TV/Season.cs
+++ b/MediaBrowser.Controller/Entities/TV/Season.cs
@@ -54,8 +54,8 @@ namespace MediaBrowser.Controller.Entities.TV
// Genre, Rating and Stuido will all be the same
protected override IEnumerable<string> GetIndexByOptions()
{
- return new List<string> {
- {"None"},
+ return new List<string> {
+ {"None"},
{"Performer"},
{"Director"},
{"Year"},
@@ -128,22 +128,23 @@ namespace MediaBrowser.Controller.Entities.TV
return IndexNumber != null ? IndexNumber.Value.ToString("0000") : Name;
}
- [IgnoreDataMember]
- public bool IsMissingSeason
+ public override bool RequiresRefresh()
{
- get { return LocationType == LocationType.Virtual && GetEpisodes().All(i => i.IsMissingEpisode); }
- }
+ var result = base.RequiresRefresh();
- private bool GetIsUnaired()
- {
- return GetEpisodes().All(i => i.IsUnaired);
+ if (!result)
+ {
+ if (!IsMissingSeason.HasValue)
+ {
+ return true;
+ }
+ }
+
+ return result;
}
[IgnoreDataMember]
- public bool IsUnaired
- {
- get { return GetIsUnaired(); }
- }
+ public bool? IsMissingSeason { get; set; }
[IgnoreDataMember]
public bool IsVirtualUnaired
@@ -154,7 +155,7 @@ namespace MediaBrowser.Controller.Entities.TV
[IgnoreDataMember]
public bool IsMissingOrVirtualUnaired
{
- get { return LocationType == LocationType.Virtual && GetEpisodes().All(i => i.IsVirtualUnaired || i.IsMissingEpisode); }
+ get { return (IsMissingSeason ?? false) || (LocationType == LocationType.Virtual && IsUnaired); }
}
[IgnoreDataMember]
@@ -223,7 +224,7 @@ namespace MediaBrowser.Controller.Entities.TV
episodes = list.DistinctBy(i => i.Id);
}
-
+
if (!includeMissingEpisodes)
{
episodes = episodes.Where(i => !i.IsMissingEpisode);
@@ -238,7 +239,7 @@ namespace MediaBrowser.Controller.Entities.TV
.Cast<Episode>();
}
- private IEnumerable<Episode> GetEpisodes()
+ public IEnumerable<Episode> GetEpisodes()
{
var episodes = GetRecursiveChildren().OfType<Episode>();
var series = Series;
diff --git a/MediaBrowser.Controller/Entities/TV/Series.cs b/MediaBrowser.Controller/Entities/TV/Series.cs
index f8cdab8ce6..54b11a9042 100644
--- a/MediaBrowser.Controller/Entities/TV/Series.cs
+++ b/MediaBrowser.Controller/Entities/TV/Series.cs
@@ -201,23 +201,30 @@ namespace MediaBrowser.Controller.Entities.TV
public IEnumerable<Season> GetSeasons(User user, bool includeMissingSeasons, bool includeVirtualUnaired)
{
- var seriesIds = LibraryManager.GetItemIds(new InternalItemsQuery(user)
- {
- PresentationUniqueKey = PresentationUniqueKey,
- IncludeItemTypes = new[] { typeof(Series).Name }
- });
-
IEnumerable<Season> seasons;
- if (seriesIds.Count > 1)
+ if (EnablePooling())
{
- seasons = LibraryManager.GetItemList(new InternalItemsQuery(user)
+ var seriesIds = LibraryManager.GetItemIds(new InternalItemsQuery(user)
+ {
+ PresentationUniqueKey = PresentationUniqueKey,
+ IncludeItemTypes = new[] { typeof(Series).Name }
+ });
+
+ if (seriesIds.Count > 1)
{
- AncestorIds = seriesIds.Select(i => i.ToString("N")).ToArray(),
- IncludeItemTypes = new[] { typeof(Season).Name },
- SortBy = new[] { ItemSortBy.SortName }
+ seasons = LibraryManager.GetItemList(new InternalItemsQuery(user)
+ {
+ AncestorIds = seriesIds.Select(i => i.ToString("N")).ToArray(),
+ IncludeItemTypes = new[] { typeof(Season).Name },
+ SortBy = new[] { ItemSortBy.SortName }
- }).Cast<Season>();
+ }).Cast<Season>();
+ }
+ else
+ {
+ seasons = LibraryManager.Sort(base.GetChildren(user, true), user, new[] { ItemSortBy.SortName }, SortOrder.Ascending).OfType<Season>();
+ }
}
else
{
@@ -232,7 +239,7 @@ namespace MediaBrowser.Controller.Entities.TV
{
if (!includeMissingSeasons)
{
- seasons = seasons.Where(i => !i.IsMissingSeason);
+ seasons = seasons.Where(i => !(i.IsMissingSeason ?? false));
}
if (!includeVirtualUnaired)
{
@@ -338,25 +345,38 @@ namespace MediaBrowser.Controller.Entities.TV
return GetEpisodes(user, seasonNumber, config.DisplayMissingEpisodes, config.DisplayUnairedEpisodes);
}
- public IEnumerable<Episode> GetEpisodes(User user, int seasonNumber, bool includeMissingEpisodes, bool includeVirtualUnairedEpisodes)
+ private bool EnablePooling()
{
- var seriesIds = LibraryManager.GetItemIds(new InternalItemsQuery(user)
- {
- PresentationUniqueKey = PresentationUniqueKey,
- IncludeItemTypes = new[] { typeof(Series).Name }
- });
+ return false;
+ }
+ public IEnumerable<Episode> GetEpisodes(User user, int seasonNumber, bool includeMissingEpisodes, bool includeVirtualUnairedEpisodes)
+ {
IEnumerable<Episode> episodes;
- if (seriesIds.Count > 1)
+ if (EnablePooling())
{
- episodes = LibraryManager.GetItemList(new InternalItemsQuery(user)
+ var seriesIds = LibraryManager.GetItemIds(new InternalItemsQuery(user)
{
- AncestorIds = seriesIds.Select(i => i.ToString("N")).ToArray(),
- IncludeItemTypes = new[] { typeof(Episode).Name },
- SortBy = new[] { ItemSortBy.SortName }
+ PresentationUniqueKey = PresentationUniqueKey,
+ IncludeItemTypes = new[] { typeof(Series).Name }
+ });
- }).Cast<Episode>();
+ if (seriesIds.Count > 1)
+ {
+ episodes = LibraryManager.GetItemList(new InternalItemsQuery(user)
+ {
+ AncestorIds = seriesIds.Select(i => i.ToString("N")).ToArray(),
+ IncludeItemTypes = new[] { typeof(Episode).Name },
+ SortBy = new[] { ItemSortBy.SortName }
+
+ }).Cast<Episode>();
+ }
+ else
+ {
+ episodes = GetRecursiveChildren(user, i => i is Episode)
+ .Cast<Episode>();
+ }
}
else
{
diff --git a/MediaBrowser.Controller/Entities/UserViewBuilder.cs b/MediaBrowser.Controller/Entities/UserViewBuilder.cs
index 5a0e0b614b..ba496fa5c1 100644
--- a/MediaBrowser.Controller/Entities/UserViewBuilder.cs
+++ b/MediaBrowser.Controller/Entities/UserViewBuilder.cs
@@ -1077,7 +1077,7 @@ namespace MediaBrowser.Controller.Entities
var e = i as Season;
if (e != null)
{
- return e.IsMissingSeason == val;
+ return (e.IsMissingSeason ?? false) == val;
}
return true;
});
diff --git a/MediaBrowser.Controller/Library/IUserDataManager.cs b/MediaBrowser.Controller/Library/IUserDataManager.cs
index 4ff0f6439f..e2358650be 100644
--- a/MediaBrowser.Controller/Library/IUserDataManager.cs
+++ b/MediaBrowser.Controller/Library/IUserDataManager.cs
@@ -29,22 +29,6 @@ namespace MediaBrowser.Controller.Library
/// <returns>Task.</returns>
Task SaveUserData(Guid userId, IHasUserData item, UserItemData userData, UserDataSaveReason reason, CancellationToken cancellationToken);
- /// <summary>
- /// Gets the user data.
- /// </summary>
- /// <param name="userId">The user id.</param>
- /// <param name="key">The key.</param>
- /// <returns>Task{UserItemData}.</returns>
- UserItemData GetUserData(string userId, string key);
-
- /// <summary>
- /// Gets the user data.
- /// </summary>
- /// <param name="userId">The user id.</param>
- /// <param name="key">The key.</param>
- /// <returns>Task{UserItemData}.</returns>
- UserItemData GetUserData(Guid userId, string key);
-
UserItemData GetUserData(IHasUserData user, IHasUserData item);
UserItemData GetUserData(string userId, IHasUserData item);