From 714735cbe46e65c42ec1ff15fbe4bdb546a63081 Mon Sep 17 00:00:00 2001 From: Kopatz <7265381+Kropatz@users.noreply.github.com> Date: Mon, 9 Sep 2024 17:40:15 +0200 Subject: [PATCH] add patches to kavita parser --- .../kavita-patches-chapter-parsing.diff | 57 +++++++++++++++++++ modules/services/kavita.nix | 3 +- 2 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 modules/services/kavita-patches-chapter-parsing.diff diff --git a/modules/services/kavita-patches-chapter-parsing.diff b/modules/services/kavita-patches-chapter-parsing.diff new file mode 100644 index 0000000..193afdd --- /dev/null +++ b/modules/services/kavita-patches-chapter-parsing.diff @@ -0,0 +1,57 @@ +diff --git a/API.Tests/Parsing/MangaParsingTests.cs b/API.Tests/Parsing/MangaParsingTests.cs +index 64d303f4..db1ed1e4 100644 +--- a/API.Tests/Parsing/MangaParsingTests.cs ++++ b/API.Tests/Parsing/MangaParsingTests.cs +@@ -84,6 +84,8 @@ public class MangaParsingTests + [InlineData("Accel World Chapter 001 Volume 002", "2")] + [InlineData("Accel World Volume 2", "2")] + [InlineData("Nagasarete Airantou - Vol. 30 Ch. 187.5 - Vol.31 Omake", "30")] ++ [InlineData("[0001]_Chapter_1.pdf", API.Services.Tasks.Scanner.Parser.Parser.LooseLeafVolume)] ++ [InlineData("[0112]_Chapter_110.2.pdf", API.Services.Tasks.Scanner.Parser.Parser.LooseLeafVolume)] + public void ParseVolumeTest(string filename, string expected) + { + Assert.Equal(expected, API.Services.Tasks.Scanner.Parser.Parser.ParseVolume(filename, LibraryType.Manga)); +@@ -212,6 +214,8 @@ public class MangaParsingTests + [InlineData("หนึ่งความคิด นิจนิรันดร์ เล่ม 2", "หนึ่งความคิด นิจนิรันดร์")] + [InlineData("不安の種\uff0b - 01", "不安の種\uff0b")] + [InlineData("Giant Ojou-sama - Ch. 33.5 - Volume 04 Bonus Chapter", "Giant Ojou-sama")] ++ [InlineData("[0001]_Chapter_1.pdf", "")] ++ [InlineData("[0112]_Chapter_110.2.pdf", "")] + public void ParseSeriesTest(string filename, string expected) + { + Assert.Equal(expected, API.Services.Tasks.Scanner.Parser.Parser.ParseSeries(filename, LibraryType.Manga)); +@@ -304,6 +308,10 @@ public class MangaParsingTests + [InlineData("เด็กคนนี้ขอลาออกจากการเป็นเจ้าของปราสาท เล่ม 1 ตอนที่ 3", "3")] + [InlineData("Max Level Returner ตอนที่ 5", "5")] + [InlineData("หนึ่งความคิด นิจนิรันดร์ บทที่ 112", "112")] ++ [InlineData("[0001]_Chapter_1.pdf", "1")] ++ [InlineData("[0112]_Chapter_110.2.pdf", "110.2")] ++ [InlineData("Chapter_13_3.pdf", "13_3")] ++ [InlineData("Chapter_100.pdf", "100")] + public void ParseChaptersTest(string filename, string expected) + { + Assert.Equal(expected, API.Services.Tasks.Scanner.Parser.Parser.ParseChapter(filename, LibraryType.Manga)); +@@ -342,6 +350,7 @@ public class MangaParsingTests + [InlineData("The League of Extra-ordinary Gentlemen", false)] + [InlineData("Dr. Ramune - Mysterious Disease Specialist v01 (2020) (Digital) (danke-Empire)", false)] + [InlineData("Hajime no Ippo - Artbook", false)] ++ [InlineData("[0001]_Chapter_1.pdf", false)] + public void IsMangaSpecialTest(string input, bool expected) + { + Assert.Equal(expected, API.Services.Tasks.Scanner.Parser.Parser.IsSpecial(input, LibraryType.Manga)); +diff --git a/API/Services/Tasks/Scanner/Parser/Parser.cs b/API/Services/Tasks/Scanner/Parser/Parser.cs +index 840e7a6d..b49fd0b0 100644 +--- a/API/Services/Tasks/Scanner/Parser/Parser.cs ++++ b/API/Services/Tasks/Scanner/Parser/Parser.cs +@@ -614,6 +614,10 @@ public static class Parser + new Regex( + @"(?.*)\sS(?\d+)\s(?\d+(?:.\d+|-\d+)?)", + MatchOptions, RegexTimeout), ++ // [0001]_Chapter_1.pdf, [0112]_Chapter_110.2.pdf, Chapter_13_3.pdf, Chapter_100.pdf ++ new Regex( ++ @"(?:^|_)Chapter_(?\d+(\.\d+|_\d+)?)", //(?:.\d+|-\d+)? ++ MatchOptions, RegexTimeout), + // Beelzebub_01_[Noodles].zip, Beelzebub_153b_RHS.zip + new Regex( + @"^((?!v|vo|vol|Volume).)*(\s|_)(?\.?\d+(?:.\d+|-\d+)?)(?b)?(\s|_|\[|\()", + diff --git a/modules/services/kavita.nix b/modules/services/kavita.nix index 759e7d1..cb99ecd 100644 --- a/modules/services/kavita.nix +++ b/modules/services/kavita.nix @@ -50,7 +50,7 @@ in { user = "kavita"; package = let backend = pkgs.unstable.kavita.backend.overrideAttrs - (old: { patches = old.patches ++ [ ./kavita-patches.diff ]; }); + (old: { patches = old.patches ++ [ ./kavita-patches.diff ./kavita-patches-chapter-parsing.diff]; }); kavitaPatched = pkgs.unstable.kavita.overrideAttrs (old: { backend = backend; }); in kavitaPatched; settings = { @@ -87,7 +87,6 @@ in { ${mangal} inline -S Mangapill --query "Chainsaw" --manga first --download ${mangal} inline -S Mangapill --query "Jujutsu%20Kaisen" --manga first --download ${mangal} inline -S Mangapill --query "solo-leveling" --manga first --download - ${mangal} inline -S Mangapill --query "berserk" --manga first --download ${mangal} inline -S Mangapill --query "the-greatest-real-estate" --manga first --download ''; serviceConfig = {