From d64681b832128181f831504500246c560869da1a Mon Sep 17 00:00:00 2001 From: Joe Milazzo Date: Sat, 26 Aug 2023 06:32:43 -0700 Subject: [PATCH] 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 --- API/Controllers/ReviewController.cs | 46 +++++++++++++++++-- API/SignalR/Presence/PresenceTracker.cs | 12 ----- .../user-scrobble-history.component.html | 2 +- .../book-reader/_models/book-paper-theme.ts | 2 +- .../card-detail-layout.component.ts | 27 +++++------ .../metadata-detail.component.html | 4 +- UI/Web/src/assets/langs/en.json | 2 +- openapi.json | 2 +- 8 files changed, 63 insertions(+), 34 deletions(-) diff --git a/API/Controllers/ReviewController.cs b/API/Controllers/ReviewController.cs index fa2d7b843..d14f81edc 100644 --- a/API/Controllers/ReviewController.cs +++ b/API/Controllers/ReviewController.cs @@ -67,11 +67,14 @@ public class ReviewController : BaseApiController var result = await _cacheProvider.GetAsync>(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 SelectSpectrumOfReviews(List reviews) + { + IList 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() + { + 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; } /// diff --git a/API/SignalR/Presence/PresenceTracker.cs b/API/SignalR/Presence/PresenceTracker.cs index 57413442c..fc4970a52 100644 --- a/API/SignalR/Presence/PresenceTracker.cs +++ b/API/SignalR/Presence/PresenceTracker.cs @@ -57,18 +57,6 @@ public class PresenceTracker : IPresenceTracker }); } } - - // Update the last active for the user - try - { - user.UpdateLastActive(); - _unitOfWork.UserRepository.Update(user); - await _unitOfWork.CommitAsync(); - } - catch (Exception) - { - // Swallow the exception - } } public Task UserDisconnected(int userId, string connectionId) diff --git a/UI/Web/src/app/_single-module/user-scrobble-history/user-scrobble-history.component.html b/UI/Web/src/app/_single-module/user-scrobble-history/user-scrobble-history.component.html index d3a544e23..00902d6c1 100644 --- a/UI/Web/src/app/_single-module/user-scrobble-history/user-scrobble-history.component.html +++ b/UI/Web/src/app/_single-module/user-scrobble-history/user-scrobble-history.component.html @@ -62,7 +62,7 @@ - {{t('volume-and-chapter-num', {v: item.volumeNumber, c: item.chapterNumber})}} + {{t('volume-and-chapter-num', {v: item.volumeNumber, n: item.chapterNumber})}} {{t('rating', {r: item.rating})}} diff --git a/UI/Web/src/app/book-reader/_models/book-paper-theme.ts b/UI/Web/src/app/book-reader/_models/book-paper-theme.ts index 98c4375f3..69a6d4e5d 100644 --- a/UI/Web/src/app/book-reader/_models/book-paper-theme.ts +++ b/UI/Web/src/app/book-reader/_models/book-paper-theme.ts @@ -94,7 +94,7 @@ export const BookPaperTheme = ` .reader-container { color: black !important; background-color: var(--theme-bg-color) !important; - background: url("/assets/images/paper-bg.png"); + background: url("assets/images/paper-bg.png"); } .book-content *:not(input), .book-content *:not(select), .book-content *:not(code), .book-content *:not(:link), .book-content *:not(.ngx-toastr) { diff --git a/UI/Web/src/app/cards/card-detail-layout/card-detail-layout.component.ts b/UI/Web/src/app/cards/card-detail-layout/card-detail-layout.component.ts index de84ec9aa..d1f2a9acd 100644 --- a/UI/Web/src/app/cards/card-detail-layout/card-detail-layout.component.ts +++ b/UI/Web/src/app/cards/card-detail-layout/card-detail-layout.component.ts @@ -1,4 +1,4 @@ -import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling'; +import {CdkVirtualScrollViewport} from '@angular/cdk/scrolling'; import {CommonModule, DOCUMENT} from '@angular/common'; import { ChangeDetectionStrategy, @@ -18,18 +18,18 @@ import { TrackByFunction, ViewChild } from '@angular/core'; -import { Router } from '@angular/router'; +import {Router} from '@angular/router'; import {VirtualScrollerComponent, VirtualScrollerModule} from '@iharbeck/ngx-virtual-scroller'; -import { FilterSettings } from 'src/app/metadata-filter/filter-settings'; -import { FilterUtilitiesService } from 'src/app/shared/_services/filter-utilities.service'; -import { Breakpoint, UtilityService } from 'src/app/shared/_services/utility.service'; -import { JumpKey } from 'src/app/_models/jumpbar/jump-key'; -import { Library } from 'src/app/_models/library'; -import { Pagination } from 'src/app/_models/pagination'; -import { FilterEvent, FilterItem } from 'src/app/_models/metadata/series-filter'; -import { ActionItem } from 'src/app/_services/action-factory.service'; -import { JumpbarService } from 'src/app/_services/jumpbar.service'; -import { ScrollService } from 'src/app/_services/scroll.service'; +import {FilterSettings} from 'src/app/metadata-filter/filter-settings'; +import {FilterUtilitiesService} from 'src/app/shared/_services/filter-utilities.service'; +import {Breakpoint, UtilityService} from 'src/app/shared/_services/utility.service'; +import {JumpKey} from 'src/app/_models/jumpbar/jump-key'; +import {Library} from 'src/app/_models/library'; +import {Pagination} from 'src/app/_models/pagination'; +import {FilterEvent, FilterItem, SortField} from 'src/app/_models/metadata/series-filter'; +import {ActionItem} from 'src/app/_services/action-factory.service'; +import {JumpbarService} from 'src/app/_services/jumpbar.service'; +import {ScrollService} from 'src/app/_services/scroll.service'; import {LoadingComponent} from "../../shared/loading/loading.component"; @@ -164,7 +164,8 @@ export class CardDetailLayoutComponent implements OnInit, OnChanges { } hasCustomSort() { - return this.filter?.sortOptions || this.filterSettings?.presetsV2?.sortOptions; + return this.filter.sortOptions?.sortField != SortField.SortName || !this.filter.sortOptions.isAscending + || this.filterSettings.presetsV2?.sortOptions?.sortField != SortField.SortName || !this.filterSettings.presetsV2?.sortOptions?.isAscending; } performAction(action: ActionItem) { diff --git a/UI/Web/src/app/series-detail/_components/metadata-detail/metadata-detail.component.html b/UI/Web/src/app/series-detail/_components/metadata-detail/metadata-detail.component.html index 2f98c87b8..2983385aa 100644 --- a/UI/Web/src/app/series-detail/_components/metadata-detail/metadata-detail.component.html +++ b/UI/Web/src/app/series-detail/_components/metadata-detail/metadata-detail.component.html @@ -1,8 +1,8 @@
-
+
{{heading}}
-
+
diff --git a/UI/Web/src/assets/langs/en.json b/UI/Web/src/assets/langs/en.json index 39adb5fff..4176677b8 100644 --- a/UI/Web/src/assets/langs/en.json +++ b/UI/Web/src/assets/langs/en.json @@ -706,7 +706,7 @@ "collections-title": "{{side-nav.collections}}", "reading-lists-title": "{{side-nav.reading-lists}}", - "writers-title": "Writers/Authors", + "writers-title": "Writers", "cover-artists-title": "Cover Artists", "characters-title": "Characters", "colorists-title": "Colorists", diff --git a/openapi.json b/openapi.json index 51fd54e78..386732a08 100644 --- a/openapi.json +++ b/openapi.json @@ -7,7 +7,7 @@ "name": "GPL-3.0", "url": "https://github.com/Kareadita/Kavita/blob/develop/LICENSE" }, - "version": "0.7.7.11" + "version": "0.7.7.14" }, "servers": [ {