Customized Scheduler + Saved Kavita+ Details (#2644)
This commit is contained in:
parent
2092e120c3
commit
ad74871623
76 changed files with 6076 additions and 3370 deletions
|
@ -72,8 +72,6 @@ public static class ApplicationServiceExtensions
|
|||
|
||||
services.AddScoped<IScrobblingService, ScrobblingService>();
|
||||
services.AddScoped<ILicenseService, LicenseService>();
|
||||
services.AddScoped<IReviewService, ReviewService>();
|
||||
services.AddScoped<IRatingService, RatingService>();
|
||||
services.AddScoped<IExternalMetadataService, ExternalMetadataService>();
|
||||
|
||||
services.AddSqLite();
|
||||
|
@ -85,13 +83,10 @@ public static class ApplicationServiceExtensions
|
|||
options.UseInMemory(EasyCacheProfiles.License);
|
||||
options.UseInMemory(EasyCacheProfiles.Library);
|
||||
options.UseInMemory(EasyCacheProfiles.RevokedJwt);
|
||||
options.UseInMemory(EasyCacheProfiles.Filter);
|
||||
|
||||
// KavitaPlus stuff
|
||||
options.UseInMemory(EasyCacheProfiles.KavitaPlusReviews);
|
||||
options.UseInMemory(EasyCacheProfiles.KavitaPlusRecommendations);
|
||||
options.UseInMemory(EasyCacheProfiles.KavitaPlusRatings);
|
||||
options.UseInMemory(EasyCacheProfiles.KavitaPlusExternalSeries);
|
||||
options.UseInMemory(EasyCacheProfiles.KavitaPlusSeriesDetail);
|
||||
});
|
||||
|
||||
services.AddMemoryCache(options =>
|
||||
|
|
|
@ -287,6 +287,60 @@ public static class SeriesFilter
|
|||
return queryable.Where(s => ids.Contains(s.Id));
|
||||
}
|
||||
|
||||
public static IQueryable<Series> HasAverageRating(this IQueryable<Series> queryable, bool condition,
|
||||
FilterComparison comparison, float rating)
|
||||
{
|
||||
if (!condition) return queryable;
|
||||
|
||||
var subQuery = queryable
|
||||
.Where(s => s.ExternalSeriesMetadata != null)
|
||||
.Include(s => s.ExternalSeriesMetadata)
|
||||
.Select(s => new
|
||||
{
|
||||
Series = s,
|
||||
AverageRating = s.ExternalSeriesMetadata.AverageExternalRating
|
||||
})
|
||||
.AsEnumerable();
|
||||
|
||||
switch (comparison)
|
||||
{
|
||||
case FilterComparison.Equal:
|
||||
subQuery = subQuery.Where(s => Math.Abs(s.AverageRating - rating) < FloatingPointTolerance);
|
||||
break;
|
||||
case FilterComparison.GreaterThan:
|
||||
subQuery = subQuery.Where(s => s.AverageRating > rating);
|
||||
break;
|
||||
case FilterComparison.GreaterThanEqual:
|
||||
subQuery = subQuery.Where(s => s.AverageRating >= rating);
|
||||
break;
|
||||
case FilterComparison.LessThan:
|
||||
subQuery = subQuery.Where(s => s.AverageRating < rating);
|
||||
break;
|
||||
case FilterComparison.LessThanEqual:
|
||||
subQuery = subQuery.Where(s => s.AverageRating <= rating);
|
||||
break;
|
||||
case FilterComparison.NotEqual:
|
||||
subQuery = subQuery.Where(s => Math.Abs(s.AverageRating - rating) > FloatingPointTolerance);
|
||||
break;
|
||||
case FilterComparison.Matches:
|
||||
case FilterComparison.Contains:
|
||||
case FilterComparison.NotContains:
|
||||
case FilterComparison.BeginsWith:
|
||||
case FilterComparison.EndsWith:
|
||||
case FilterComparison.IsBefore:
|
||||
case FilterComparison.IsAfter:
|
||||
case FilterComparison.IsInLast:
|
||||
case FilterComparison.IsNotInLast:
|
||||
case FilterComparison.MustContains:
|
||||
throw new KavitaException($"{comparison} not applicable for Series.AverageRating");
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException(nameof(comparison), comparison, null);
|
||||
}
|
||||
|
||||
var ids = subQuery.Select(s => s.Series.Id).ToList();
|
||||
return queryable.Where(s => ids.Contains(s.Id));
|
||||
}
|
||||
|
||||
public static IQueryable<Series> HasReadingDate(this IQueryable<Series> queryable, bool condition,
|
||||
FilterComparison comparison, DateTime? date, int userId)
|
||||
{
|
||||
|
|
|
@ -36,7 +36,6 @@ public static class IncludesExtensions
|
|||
.Include(c => c.Files);
|
||||
}
|
||||
|
||||
|
||||
return queryable.AsSplitQuery();
|
||||
}
|
||||
|
||||
|
@ -67,6 +66,27 @@ public static class IncludesExtensions
|
|||
.Include(s => s.RelationOf);
|
||||
}
|
||||
|
||||
if (includeFlags.HasFlag(SeriesIncludes.ExternalReviews))
|
||||
{
|
||||
query = query
|
||||
.Include(s => s.ExternalSeriesMetadata)
|
||||
.ThenInclude(s => s.ExternalReviews);
|
||||
}
|
||||
|
||||
if (includeFlags.HasFlag(SeriesIncludes.ExternalRatings))
|
||||
{
|
||||
query = query
|
||||
.Include(s => s.ExternalSeriesMetadata)
|
||||
.ThenInclude(s => s.ExternalRatings);
|
||||
}
|
||||
|
||||
if (includeFlags.HasFlag(SeriesIncludes.ExternalRecommendations))
|
||||
{
|
||||
query = query
|
||||
.Include(s => s.ExternalSeriesMetadata)
|
||||
.ThenInclude(s => s.ExternalRecommendations);
|
||||
}
|
||||
|
||||
if (includeFlags.HasFlag(SeriesIncludes.Metadata))
|
||||
{
|
||||
query = query.Include(s => s.Metadata)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue