aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/Reports/ReportsService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/Reports/ReportsService.cs')
-rw-r--r--MediaBrowser.Api/Reports/ReportsService.cs281
1 files changed, 38 insertions, 243 deletions
diff --git a/MediaBrowser.Api/Reports/ReportsService.cs b/MediaBrowser.Api/Reports/ReportsService.cs
index 6cbe2fd89..ae6fbc9e2 100644
--- a/MediaBrowser.Api/Reports/ReportsService.cs
+++ b/MediaBrowser.Api/Reports/ReportsService.cs
@@ -213,8 +213,6 @@ namespace MediaBrowser.Api.Reports
SortBy = request.GetOrderBy(),
SortOrder = request.SortOrder ?? SortOrder.Ascending,
- Filter = i => ApplyAdditionalFilters(request, i, user, _libraryManager),
-
IsFavorite = request.IsFavorite,
Limit = request.Limit,
StartIndex = request.StartIndex,
@@ -258,7 +256,10 @@ namespace MediaBrowser.Api.Reports
MinPlayers = request.MinPlayers,
MaxPlayers = request.MaxPlayers,
MinCommunityRating = request.MinCommunityRating,
- MinCriticRating = request.MinCriticRating
+ MinCriticRating = request.MinCriticRating,
+ ParentIndexNumber = request.ParentIndexNumber,
+ AiredDuringSeason = request.AiredDuringSeason,
+ AlbumArtistStartsWithOrGreater = request.AlbumArtistStartsWithOrGreater
};
if (!string.IsNullOrWhiteSpace(request.Ids))
@@ -302,285 +303,79 @@ namespace MediaBrowser.Api.Reports
}
}
- if (request.HasQueryLimit == false)
- {
- query.StartIndex = null;
- query.Limit = null;
- }
-
- return query;
- }
-
- private bool ApplyAdditionalFilters(BaseReportRequest request, BaseItem i, User user, ILibraryManager libraryManager)
- {
- // Artists
- if (!string.IsNullOrEmpty(request.ArtistIds))
- {
- var artistIds = request.ArtistIds.Split(new[] { '|', ',' });
-
- var audio = i as IHasArtist;
-
- if (!(audio != null && artistIds.Any(id =>
- {
- var artistItem = libraryManager.GetItemById(id);
- return artistItem != null && audio.HasAnyArtist(artistItem.Name);
- })))
- {
- return false;
- }
- }
-
- // Artists
- if (!string.IsNullOrEmpty(request.Artists))
- {
- var artists = request.Artists.Split('|');
-
- var audio = i as IHasArtist;
-
- if (!(audio != null && artists.Any(audio.HasAnyArtist)))
- {
- return false;
- }
- }
-
- // Albums
- if (!string.IsNullOrEmpty(request.Albums))
- {
- var albums = request.Albums.Split('|');
-
- var audio = i as Audio;
-
- if (audio != null)
- {
- if (!albums.Any(a => string.Equals(a, audio.Album, StringComparison.OrdinalIgnoreCase)))
- {
- return false;
- }
- }
-
- var album = i as MusicAlbum;
-
- if (album != null)
- {
- if (!albums.Any(a => string.Equals(a, album.Name, StringComparison.OrdinalIgnoreCase)))
- {
- return false;
- }
- }
-
- var musicVideo = i as MusicVideo;
-
- if (musicVideo != null)
- {
- if (!albums.Any(a => string.Equals(a, musicVideo.Album, StringComparison.OrdinalIgnoreCase)))
- {
- return false;
- }
- }
-
- return false;
- }
-
- // Min index number
- if (request.MinIndexNumber.HasValue)
+ if (!string.IsNullOrEmpty(request.MinPremiereDate))
{
- if (!(i.IndexNumber.HasValue && i.IndexNumber.Value >= request.MinIndexNumber.Value))
- {
- return false;
- }
+ query.MinPremiereDate = DateTime.Parse(request.MinPremiereDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime();
}
- // Min official rating
- if (!string.IsNullOrEmpty(request.MinOfficialRating))
+ if (!string.IsNullOrEmpty(request.MaxPremiereDate))
{
- var level = _localization.GetRatingLevel(request.MinOfficialRating);
-
- if (level.HasValue)
- {
- var rating = i.CustomRating;
-
- if (string.IsNullOrEmpty(rating))
- {
- rating = i.OfficialRating;
- }
-
- if (!string.IsNullOrEmpty(rating))
- {
- var itemLevel = _localization.GetRatingLevel(rating);
-
- if (!(!itemLevel.HasValue || itemLevel.Value >= level.Value))
- {
- return false;
- }
- }
- }
+ query.MaxPremiereDate = DateTime.Parse(request.MaxPremiereDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime();
}
- // Max official rating
- if (!string.IsNullOrEmpty(request.MaxOfficialRating))
+ // Filter by Series Status
+ if (!string.IsNullOrEmpty(request.SeriesStatus))
{
- var level = _localization.GetRatingLevel(request.MaxOfficialRating);
-
- if (level.HasValue)
- {
- var rating = i.CustomRating;
-
- if (string.IsNullOrEmpty(rating))
- {
- rating = i.OfficialRating;
- }
-
- if (!string.IsNullOrEmpty(rating))
- {
- var itemLevel = _localization.GetRatingLevel(rating);
-
- if (!(!itemLevel.HasValue || itemLevel.Value <= level.Value))
- {
- return false;
- }
- }
- }
+ query.SeriesStatuses = request.SeriesStatus.Split(',').Select(d => (SeriesStatus)Enum.Parse(typeof(SeriesStatus), d, true)).ToArray();
}
- // LocationTypes
- if (!string.IsNullOrEmpty(request.LocationTypes))
+ // Filter by Series AirDays
+ if (!string.IsNullOrEmpty(request.AirDays))
{
- var vals = request.LocationTypes.Split(',');
- if (!vals.Contains(i.LocationType.ToString(), StringComparer.OrdinalIgnoreCase))
- {
- return false;
- }
+ query.AirDays = request.AirDays.Split(',').Select(d => (DayOfWeek)Enum.Parse(typeof(DayOfWeek), d, true)).ToArray();
}
// ExcludeLocationTypes
if (!string.IsNullOrEmpty(request.ExcludeLocationTypes))
{
- var vals = request.ExcludeLocationTypes.Split(',');
- if (vals.Contains(i.LocationType.ToString(), StringComparer.OrdinalIgnoreCase))
- {
- return false;
- }
+ query.ExcludeLocationTypes = request.ExcludeLocationTypes.Split(',').Select(d => (LocationType)Enum.Parse(typeof(LocationType), d, true)).ToArray();
}
- if (!string.IsNullOrEmpty(request.AlbumArtistStartsWithOrGreater))
- {
- var ok = new[] { i }.OfType<IHasAlbumArtist>()
- .Any(p => string.Compare(request.AlbumArtistStartsWithOrGreater, p.AlbumArtists.FirstOrDefault(), StringComparison.CurrentCultureIgnoreCase) < 1);
-
- if (!ok)
- {
- return false;
- }
- }
-
- // Filter by Series Status
- if (!string.IsNullOrEmpty(request.SeriesStatus))
+ if (!string.IsNullOrEmpty(request.LocationTypes))
{
- var vals = request.SeriesStatus.Split(',');
-
- var ok = new[] { i }.OfType<Series>().Any(p => p.Status.HasValue && vals.Contains(p.Status.Value.ToString(), StringComparer.OrdinalIgnoreCase));
-
- if (!ok)
- {
- return false;
- }
+ query.LocationTypes = request.LocationTypes.Split(',').Select(d => (LocationType)Enum.Parse(typeof(LocationType), d, true)).ToArray();
}
- // Filter by Series AirDays
- if (!string.IsNullOrEmpty(request.AirDays))
+ // Min official rating
+ if (!string.IsNullOrEmpty(request.MinOfficialRating))
{
- var days = request.AirDays.Split(',').Select(d => (DayOfWeek)Enum.Parse(typeof(DayOfWeek), d, true));
-
- var ok = new[] { i }.OfType<Series>().Any(p => p.AirDays != null && days.Any(d => p.AirDays.Contains(d)));
-
- if (!ok)
- {
- return false;
- }
+ query.MinParentalRating = _localization.GetRatingLevel(request.MinOfficialRating);
}
- if (request.ParentIndexNumber.HasValue)
- {
- var filterValue = request.ParentIndexNumber.Value;
-
- var episode = i as Episode;
-
- if (episode != null)
- {
- if (episode.ParentIndexNumber.HasValue && episode.ParentIndexNumber.Value != filterValue)
- {
- return false;
- }
- }
-
- var song = i as Audio;
-
- if (song != null)
- {
- if (song.ParentIndexNumber.HasValue && song.ParentIndexNumber.Value != filterValue)
- {
- return false;
- }
- }
- }
-
- if (request.AiredDuringSeason.HasValue)
+ // Max official rating
+ if (!string.IsNullOrEmpty(request.MaxOfficialRating))
{
- var episode = i as Episode;
-
- if (episode == null)
- {
- return false;
- }
-
- if (!Series.FilterEpisodesBySeason(new[] { episode }, request.AiredDuringSeason.Value, true).Any())
- {
- return false;
- }
+ query.MaxParentalRating = _localization.GetRatingLevel(request.MinOfficialRating);
}
- if (!string.IsNullOrEmpty(request.MinPremiereDate))
+ // Artists
+ if (!string.IsNullOrEmpty(request.ArtistIds))
{
- var date = DateTime.Parse(request.MinPremiereDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime();
+ var artistIds = request.ArtistIds.Split(new[] { '|', ',' });
- if (!(i.PremiereDate.HasValue && i.PremiereDate.Value >= date))
- {
- return false;
- }
+ var artistItems = artistIds.Select(_libraryManager.GetItemById).Where(i => i != null).ToList();
+ query.ArtistNames = artistItems.Select(i => i.Name).ToArray();
}
- if (!string.IsNullOrEmpty(request.MaxPremiereDate))
+ // Artists
+ if (!string.IsNullOrEmpty(request.Artists))
{
- var date = DateTime.Parse(request.MaxPremiereDate, null, DateTimeStyles.RoundtripKind).ToUniversalTime();
-
- if (!(i.PremiereDate.HasValue && i.PremiereDate.Value <= date))
- {
- return false;
- }
+ query.ArtistNames = request.Artists.Split('|');
}
- return true;
- }
-
- /// <summary> Applies the paging. </summary>
- /// <param name="request"> The request. </param>
- /// <param name="items"> The items. </param>
- /// <returns> IEnumerable{BaseItem}. </returns>
- private IEnumerable<BaseItem> ApplyPaging(BaseReportRequest request, IEnumerable<BaseItem> items)
- {
- // Start at
- if (request.StartIndex.HasValue)
+ // Albums
+ if (!string.IsNullOrEmpty(request.Albums))
{
- items = items.Skip(request.StartIndex.Value);
+ query.AlbumNames = request.Albums.Split('|');
}
- // Return limit
- if (request.Limit.HasValue)
+ if (request.HasQueryLimit == false)
{
- items = items.Take(request.Limit.Value);
+ query.StartIndex = null;
+ query.Limit = null;
}
- return items;
+ return query;
}
/// <summary> Gets query result. </summary>