From 3fe5933358d04afea7dd3a6dbaa94cd483d30cd1 Mon Sep 17 00:00:00 2001 From: Joseph Milazzo Date: Sat, 3 May 2025 17:40:11 -0500 Subject: [PATCH] Start of the metadata/filename on/off stuff. --- API.Tests/Services/ScannerServiceTests.cs | 5 +++++ API/Controllers/LibraryController.cs | 3 +++ API/DTOs/LibraryDto.cs | 10 ++++++++++ API/DTOs/UpdateLibraryDto.cs | 4 ++++ API/Entities/Library.cs | 10 ++++++++++ API/Helpers/Builders/LibraryBuilder.cs | 12 ++++++++++++ API/Services/Tasks/Scanner/Parser/BasicParser.cs | 1 + API/Services/Tasks/Scanner/ProcessSeries.cs | 5 +---- 8 files changed, 46 insertions(+), 4 deletions(-) diff --git a/API.Tests/Services/ScannerServiceTests.cs b/API.Tests/Services/ScannerServiceTests.cs index 2e812647b..9b0271fc2 100644 --- a/API.Tests/Services/ScannerServiceTests.cs +++ b/API.Tests/Services/ScannerServiceTests.cs @@ -938,4 +938,9 @@ public class ScannerServiceTests : AbstractDbTest Assert.True(sortedChapters[1].SortOrder.Is(4f)); Assert.True(sortedChapters[2].SortOrder.Is(5f)); } + + #region Scanner Overhaul + + + #endregion } diff --git a/API/Controllers/LibraryController.cs b/API/Controllers/LibraryController.cs index 2f12aa1fe..4f3b6c832 100644 --- a/API/Controllers/LibraryController.cs +++ b/API/Controllers/LibraryController.cs @@ -623,6 +623,9 @@ public class LibraryController : BaseApiController library.ManageReadingLists = dto.ManageReadingLists; library.AllowScrobbling = dto.AllowScrobbling; library.AllowMetadataMatching = dto.AllowMetadataMatching; + library.AllowFilenameParsing = dto.AllowFilenameParsing; + library.AllowMetadataParsing = dto.AllowMetadataParsing; + library.LibraryFileTypes = dto.FileGroupTypes .Select(t => new LibraryFileTypeGroup() {FileTypeGroup = t, LibraryId = library.Id}) .Distinct() diff --git a/API/DTOs/LibraryDto.cs b/API/DTOs/LibraryDto.cs index 18dea9434..7ddf36926 100644 --- a/API/DTOs/LibraryDto.cs +++ b/API/DTOs/LibraryDto.cs @@ -67,4 +67,14 @@ public class LibraryDto /// This does not exclude the library from being linked to wrt Series Relationships /// Requires a valid LicenseKey public bool AllowMetadataMatching { get; set; } = true; + /// + /// Allow Kavita to parse Metadata from Files based on Filename + /// + /// Cannot be false if is false + public bool AllowFilenameParsing { get; set; } = true; + /// + /// Allow Kavita to parse Metadata from files (ComicInfo/Epub/Pdf) + /// + /// Cannot be false if is false + public bool AllowMetadataParsing { get; set; } = true; } diff --git a/API/DTOs/UpdateLibraryDto.cs b/API/DTOs/UpdateLibraryDto.cs index de02f304d..118c2d6bc 100644 --- a/API/DTOs/UpdateLibraryDto.cs +++ b/API/DTOs/UpdateLibraryDto.cs @@ -28,6 +28,10 @@ public class UpdateLibraryDto public bool AllowScrobbling { get; init; } [Required] public bool AllowMetadataMatching { get; init; } + [Required] + public bool AllowFilenameParsing { get; set; } = true; + [Required] + public bool AllowMetadataParsing { get; set; } = true; /// /// What types of files to allow the scanner to pickup /// diff --git a/API/Entities/Library.cs b/API/Entities/Library.cs index abab81378..be69a2363 100644 --- a/API/Entities/Library.cs +++ b/API/Entities/Library.cs @@ -48,6 +48,16 @@ public class Library : IEntityDate, IHasCoverImage /// This does not exclude the library from being linked to wrt Series Relationships /// Requires a valid LicenseKey public bool AllowMetadataMatching { get; set; } = true; + /// + /// Allow Kavita to parse Metadata from Files based on Filename + /// + /// Cannot be false if is false + public bool AllowFilenameParsing { get; set; } = true; + /// + /// Allow Kavita to parse Metadata from files (ComicInfo/Epub/Pdf) + /// + /// Cannot be false if is false + public bool AllowMetadataParsing { get; set; } = true; public DateTime Created { get; set; } diff --git a/API/Helpers/Builders/LibraryBuilder.cs b/API/Helpers/Builders/LibraryBuilder.cs index 30e6136a5..3ebe8315a 100644 --- a/API/Helpers/Builders/LibraryBuilder.cs +++ b/API/Helpers/Builders/LibraryBuilder.cs @@ -115,4 +115,16 @@ public class LibraryBuilder : IEntityBuilder _library.AllowScrobbling = allowScrobbling; return this; } + + public LibraryBuilder WithAllowFilenameParsing(bool allow) + { + _library.AllowFilenameParsing = allow; + return this; + } + + public LibraryBuilder WithAllowMetadataParsing(bool allow) + { + _library.AllowMetadataParsing = allow; + return this; + } } diff --git a/API/Services/Tasks/Scanner/Parser/BasicParser.cs b/API/Services/Tasks/Scanner/Parser/BasicParser.cs index 1462ab3d3..154760e36 100644 --- a/API/Services/Tasks/Scanner/Parser/BasicParser.cs +++ b/API/Services/Tasks/Scanner/Parser/BasicParser.cs @@ -16,6 +16,7 @@ public class BasicParser(IDirectoryService directoryService, IDefaultParser imag { var fileName = directoryService.FileSystem.Path.GetFileNameWithoutExtension(filePath); // TODO: Potential Bug: This will return null, but on Image libraries, if all images, we would want to include this. + // NOTE: This may no longer be needed as we have file type group support now, thus an image wouldn't come for a Series if (type != LibraryType.Image && Parser.IsCoverImage(directoryService.FileSystem.Path.GetFileName(filePath))) return null; if (Parser.IsImage(filePath)) diff --git a/API/Services/Tasks/Scanner/ProcessSeries.cs b/API/Services/Tasks/Scanner/ProcessSeries.cs index 454c72733..336bbdba0 100644 --- a/API/Services/Tasks/Scanner/ProcessSeries.cs +++ b/API/Services/Tasks/Scanner/ProcessSeries.cs @@ -193,10 +193,6 @@ public class ProcessSeries : IProcessSeries if (seriesAdded) { - // See if any recommendations can link up to the series and pre-fetch external metadata for the series - // BackgroundJob.Enqueue(() => - // _externalMetadataService.FetchSeriesMetadata(series.Id, series.Library.Type)); - await _eventHub.SendMessageAsync(MessageFactory.SeriesAdded, MessageFactory.SeriesAddedEvent(series.Id, series.Name, series.LibraryId), false); } @@ -216,6 +212,7 @@ public class ProcessSeries : IProcessSeries if (seriesAdded) { + // Prefetch metadata if applicable await _externalMetadataService.FetchSeriesMetadata(series.Id, series.Library.Type); } await _metadataService.GenerateCoversForSeries(series.LibraryId, series.Id, false, false);