|
@@ -264,6 +264,48 @@ public sealed class BaseItemRepository
|
|
|
return dbQuery.AsEnumerable().Where(e => e is not null).Select(w => DeserialiseBaseItem(w, filter.SkipDeserialization)).ToArray();
|
|
|
}
|
|
|
|
|
|
+ /// <inheritdoc/>
|
|
|
+ public IReadOnlyList<BaseItem> GetLatestItemList(InternalItemsQuery filter, CollectionType collectionType)
|
|
|
+ {
|
|
|
+ ArgumentNullException.ThrowIfNull(filter);
|
|
|
+ PrepareFilterQuery(filter);
|
|
|
+
|
|
|
+ // Early exit if collection type is not tvshows or music
|
|
|
+ if (collectionType != CollectionType.tvshows && collectionType != CollectionType.music)
|
|
|
+ {
|
|
|
+ return Array.Empty<BaseItem>();
|
|
|
+ }
|
|
|
+
|
|
|
+ using var context = _dbProvider.CreateDbContext();
|
|
|
+
|
|
|
+ // Subquery to group by SeriesNames/Album and get the max Date Created for each group.
|
|
|
+ var subquery = PrepareItemQuery(context, filter);
|
|
|
+ subquery = TranslateQuery(subquery, context, filter);
|
|
|
+ var subqueryGrouped = subquery.GroupBy(g => collectionType == CollectionType.tvshows ? g.SeriesName : g.Album)
|
|
|
+ .Select(g => new
|
|
|
+ {
|
|
|
+ Key = g.Key,
|
|
|
+ MaxDateCreated = g.Max(a => a.DateCreated)
|
|
|
+ })
|
|
|
+ .OrderByDescending(g => g.MaxDateCreated)
|
|
|
+ .Select(g => g);
|
|
|
+
|
|
|
+ if (filter.Limit.HasValue)
|
|
|
+ {
|
|
|
+ subqueryGrouped = subqueryGrouped.Take(filter.Limit.Value);
|
|
|
+ }
|
|
|
+
|
|
|
+ filter.Limit = null;
|
|
|
+
|
|
|
+ var mainquery = PrepareItemQuery(context, filter);
|
|
|
+ mainquery = TranslateQuery(mainquery, context, filter);
|
|
|
+ mainquery = mainquery.Where(g => g.DateCreated >= subqueryGrouped.Min(s => s.MaxDateCreated));
|
|
|
+ mainquery = ApplyGroupingFilter(mainquery, filter);
|
|
|
+ mainquery = ApplyQueryPaging(mainquery, filter);
|
|
|
+
|
|
|
+ return mainquery.AsEnumerable().Where(e => e is not null).Select(w => DeserialiseBaseItem(w, filter.SkipDeserialization)).ToArray();
|
|
|
+ }
|
|
|
+
|
|
|
/// <inheritdoc />
|
|
|
public IReadOnlyList<string> GetNextUpSeriesKeys(InternalItemsQuery filter, DateTime dateCutoff)
|
|
|
{
|