Kavita+ Reviews are Mixed (#2238)

* Remove updating last active on PresenceTracker as we now do it on Token. Should reduce annoying db concurrency errors.

* Updated Kavita+ Reviews to give a spread of reviews, positive or not.

* Fixed up some styling overlap for different breakpoints for sections like Writers, Authors, Collections, etc.

* Refactored code

* Fixed jumpbar being broken with no custom sort

* Fixed paper background on epub reader not loading under base url
This commit is contained in:
Joe Milazzo 2023-08-26 06:32:43 -07:00 committed by GitHub
parent 24f5bf1167
commit d64681b832
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 63 additions and 34 deletions

View file

@ -67,11 +67,14 @@ public class ReviewController : BaseApiController
var result = await _cacheProvider.GetAsync<IEnumerable<UserReviewDto>>(cacheKey);
if (result.HasValue)
{
externalReviews = result.Value;
externalReviews = result.Value.ToList();
}
else
{
externalReviews = (await _reviewService.GetReviewsForSeries(userId, seriesId)).ToList();
var reviews = (await _reviewService.GetReviewsForSeries(userId, seriesId)).ToList();
externalReviews = SelectSpectrumOfReviews(reviews);
await _cacheProvider.SetAsync(cacheKey, externalReviews, TimeSpan.FromHours(10));
_logger.LogDebug("Caching external reviews for {Key}", cacheKey);
}
@ -80,7 +83,44 @@ public class ReviewController : BaseApiController
// Fetch external reviews and splice them in
userRatings.AddRange(externalReviews);
return Ok(userRatings.Take(10));
return Ok(userRatings);
}
private static IList<UserReviewDto> SelectSpectrumOfReviews(List<UserReviewDto> reviews)
{
IList<UserReviewDto> externalReviews;
var totalReviews = reviews.Count;
if (totalReviews > 10)
{
//var stepSize = Math.Max(totalReviews / 10, 1); // Calculate step size, ensuring it's at least 1
var stepSize = Math.Max((totalReviews - 4) / 8, 1);
var selectedReviews = new List<UserReviewDto>()
{
reviews[0],
reviews[1],
};
for (var i = 2; i < totalReviews - 2; i += stepSize)
{
selectedReviews.Add(reviews[i]);
if (selectedReviews.Count >= 8)
break;
}
selectedReviews.Add(reviews[totalReviews - 2]);
selectedReviews.Add(reviews[totalReviews - 1]);
externalReviews = selectedReviews;
}
else
{
externalReviews = reviews;
}
return externalReviews;
}
/// <summary>