From ef77474e33155439075c354a0196572c0e1366f5 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Fri, 6 Jun 2025 05:23:10 -0500 Subject: [PATCH] Updated Matched Metadat to have a library type filter, given that a user might want to do just Comics or Manga at a time. --- .../KavitaPlus/Manage/ManageMatchFilterDto.cs | 4 +++ .../ExternalSeriesMetadataRepository.cs | 1 + .../_models/kavitaplus/manage-match-filter.ts | 2 ++ UI/Web/src/app/_models/library/library.ts | 2 ++ .../manage-matched-metadata.component.html | 13 ++++++++-- .../manage-matched-metadata.component.ts | 26 ++++++++++++------- .../library-settings-modal.component.ts | 13 +++++++--- .../preference-nav.component.ts | 1 + UI/Web/src/assets/langs/en.json | 2 ++ 9 files changed, 48 insertions(+), 16 deletions(-) diff --git a/API/DTOs/KavitaPlus/Manage/ManageMatchFilterDto.cs b/API/DTOs/KavitaPlus/Manage/ManageMatchFilterDto.cs index 8eb38c98a..c394cf8d4 100644 --- a/API/DTOs/KavitaPlus/Manage/ManageMatchFilterDto.cs +++ b/API/DTOs/KavitaPlus/Manage/ManageMatchFilterDto.cs @@ -15,5 +15,9 @@ public enum MatchStateOption public sealed record ManageMatchFilterDto { public MatchStateOption MatchStateOption { get; set; } = MatchStateOption.All; + /// + /// Library Type in int form. -1 indicates to ignore the field. + /// + public int LibraryType { get; set; } = -1; public string SearchTerm { get; set; } = string.Empty; } diff --git a/API/Data/Repositories/ExternalSeriesMetadataRepository.cs b/API/Data/Repositories/ExternalSeriesMetadataRepository.cs index 617e8537f..377344a3c 100644 --- a/API/Data/Repositories/ExternalSeriesMetadataRepository.cs +++ b/API/Data/Repositories/ExternalSeriesMetadataRepository.cs @@ -234,6 +234,7 @@ public class ExternalSeriesMetadataRepository : IExternalSeriesMetadataRepositor .Include(s => s.ExternalSeriesMetadata) .Where(s => !ExternalMetadataService.NonEligibleLibraryTypes.Contains(s.Library.Type)) .Where(s => s.Library.AllowMetadataMatching) + .WhereIf(filter.LibraryType >= 0, s => s.Library.Type == (LibraryType) filter.LibraryType) .FilterMatchState(filter.MatchStateOption) .OrderBy(s => s.NormalizedName) .ProjectTo(_mapper.ConfigurationProvider) diff --git a/UI/Web/src/app/_models/kavitaplus/manage-match-filter.ts b/UI/Web/src/app/_models/kavitaplus/manage-match-filter.ts index a8dc1ce06..05a4041c8 100644 --- a/UI/Web/src/app/_models/kavitaplus/manage-match-filter.ts +++ b/UI/Web/src/app/_models/kavitaplus/manage-match-filter.ts @@ -1,6 +1,8 @@ import {MatchStateOption} from "./match-state-option"; +import {LibraryType} from "../library/library"; export interface ManageMatchFilter { matchStateOption: MatchStateOption; + libraryType: LibraryType | -1; searchTerm: string; } diff --git a/UI/Web/src/app/_models/library/library.ts b/UI/Web/src/app/_models/library/library.ts index 06ba86cf2..cb152471e 100644 --- a/UI/Web/src/app/_models/library/library.ts +++ b/UI/Web/src/app/_models/library/library.ts @@ -13,6 +13,8 @@ export enum LibraryType { } export const allLibraryTypes = [LibraryType.Manga, LibraryType.ComicVine, LibraryType.Comic, LibraryType.Book, LibraryType.LightNovel, LibraryType.Images]; +export const allKavitaPlusMetadataApplicableTypes = [LibraryType.Manga, LibraryType.LightNovel, LibraryType.ComicVine, LibraryType.Comic]; +export const allKavitaPlusEligibleTypes = [LibraryType.Manga, LibraryType.LightNovel]; export interface Library { id: number; diff --git a/UI/Web/src/app/admin/manage-matched-metadata/manage-matched-metadata.component.html b/UI/Web/src/app/admin/manage-matched-metadata/manage-matched-metadata.component.html index 60f494f38..2ae9ea45b 100644 --- a/UI/Web/src/app/admin/manage-matched-metadata/manage-matched-metadata.component.html +++ b/UI/Web/src/app/admin/manage-matched-metadata/manage-matched-metadata.component.html @@ -3,8 +3,17 @@
-
- +
+ + +
+
+