Customized Scheduler + Saved Kavita+ Details (#2644)

This commit is contained in:
Joe Milazzo 2024-01-22 12:10:57 -06:00 committed by GitHub
parent 2092e120c3
commit ad74871623
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
76 changed files with 6076 additions and 3370 deletions

View file

@ -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 =>

View file

@ -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)
{

View file

@ -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)