From 6f4394958599f1ef2e85590c9764eb24e019c31d Mon Sep 17 00:00:00 2001 From: KotaHv <92137267+KotaHv@users.noreply.github.com> Date: Wed, 24 Jul 2024 13:53:34 +0800 Subject: [PATCH 1/3] fix: Resolve issue #805 --- backend/src/module/parser/analyser/torrent_parser.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/backend/src/module/parser/analyser/torrent_parser.py b/backend/src/module/parser/analyser/torrent_parser.py index ad54cca5..581ca098 100644 --- a/backend/src/module/parser/analyser/torrent_parser.py +++ b/backend/src/module/parser/analyser/torrent_parser.py @@ -11,8 +11,8 @@ PLATFORM = "Unix" RULES = [ r"(.*) - (\d{1,4}(?!\d|p)|\d{1,4}\.\d{1,2}(?!\d|p))(?:v\d{1,2})?(?: )?(?:END)?(.*)", r"(.*)[\[\ E](\d{1,4}|\d{1,4}\.\d{1,2})(?:v\d{1,2})?(?: )?(?:END)?[\]\ ](.*)", - r"(.*)\[(?:第)?(\d*\.*\d*)[话集話](?:END)?\](.*)", - r"(.*)第?(\d*\.*\d*)[话話集](?:END)?(.*)", + r"(.*)\[(?:第)?(\d{1,4}(?:\.\d{1,2})?)[话集話](?:END)?\](.*)", + r"(.*)第?(\d{1,4}(?:\.\d{1,2})?)[话話集](?:END)?(.*)", r"(.*)(?:S\d{2})?EP?(\d+)(.*)", ] @@ -103,3 +103,10 @@ def torrent_parser( episode=episode, suffix=suffix, ) + + +if __name__ == "__main__": + ep = torrent_parser( + "/不时用俄语小声说真心话的邻桌艾莉同学/Season 1/不时用俄语小声说真心话的邻桌艾莉同学 S01E02.mp4" + ) + print(ep) From ee36b05f95f612be18176a9192d621c80152561c Mon Sep 17 00:00:00 2001 From: KotaHv <92137267+KotaHv@users.noreply.github.com> Date: Wed, 24 Jul 2024 14:03:20 +0800 Subject: [PATCH 2/3] fix: support episode as int or float --- backend/src/module/models/torrent.py | 4 ++-- .../module/parser/analyser/torrent_parser.py | 19 +++++++++++++++---- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/backend/src/module/models/torrent.py b/backend/src/module/models/torrent.py index e4727202..a8cbef75 100644 --- a/backend/src/module/models/torrent.py +++ b/backend/src/module/models/torrent.py @@ -23,7 +23,7 @@ class EpisodeFile(BaseModel): group: str | None = Field(None) title: str = Field(...) season: int = Field(...) - episode: int = Field(None) + episode: int | float = Field(None) suffix: str = Field(..., regex=r"\.(mkv|mp4|MKV|MP4)$") @@ -32,6 +32,6 @@ class SubtitleFile(BaseModel): group: str | None = Field(None) title: str = Field(...) season: int = Field(...) - episode: int = Field(None) + episode: int | float = Field(None) language: str = Field(..., regex=r"(zh|zh-tw)") suffix: str = Field(..., regex=r"\.(ass|srt|ASS|SRT)$") diff --git a/backend/src/module/parser/analyser/torrent_parser.py b/backend/src/module/parser/analyser/torrent_parser.py index 581ca098..ebb0b4d3 100644 --- a/backend/src/module/parser/analyser/torrent_parser.py +++ b/backend/src/module/parser/analyser/torrent_parser.py @@ -9,11 +9,11 @@ logger = logging.getLogger(__name__) PLATFORM = "Unix" RULES = [ - r"(.*) - (\d{1,4}(?!\d|p)|\d{1,4}\.\d{1,2}(?!\d|p))(?:v\d{1,2})?(?: )?(?:END)?(.*)", - r"(.*)[\[\ E](\d{1,4}|\d{1,4}\.\d{1,2})(?:v\d{1,2})?(?: )?(?:END)?[\]\ ](.*)", + r"(.*) - (\d{1,4}(?:\.\d{1,2})?(?!\d|p))(?:v\d{1,2})?(?: )?(?:END)?(.*)", + r"(.*)[\[\ E](\d{1,4}(?:\.\d{1,2})?)(?:v\d{1,2})?(?: )?(?:END)?[\]\ ](.*)", r"(.*)\[(?:第)?(\d{1,4}(?:\.\d{1,2})?)[话集話](?:END)?\](.*)", r"(.*)第?(\d{1,4}(?:\.\d{1,2})?)[话話集](?:END)?(.*)", - r"(.*)(?:S\d{2})?EP?(\d+)(.*)", + r"(.*)(?:S\d{2})?EP?(\d{1,4}(?:\.\d{1,2})?)(.*)", ] SUBTITLE_LANG = { @@ -81,7 +81,7 @@ def torrent_parser( title, season = get_season_and_title(title) else: title, _ = get_season_and_title(title) - episode = int(match_obj.group(2)) + episode = match_obj.group(2) suffix = Path(torrent_path).suffix if file_type == "media": return EpisodeFile( @@ -110,3 +110,14 @@ if __name__ == "__main__": "/不时用俄语小声说真心话的邻桌艾莉同学/Season 1/不时用俄语小声说真心话的邻桌艾莉同学 S01E02.mp4" ) print(ep) + + ep = torrent_parser( + "/downloads/Bangumi/关于我转生变成史莱姆这档事 (2018)/Season 3/[ANi] 關於我轉生變成史萊姆這檔事 第三季 - 48.5 [1080P][Baha][WEB-DL][AAC AVC][CHT].mp4" + ) + print(ep) + + ep = torrent_parser( + "/downloads/Bangumi/关于我转生变成史莱姆这档事 (2018)/Season 3/[ANi] 關於我轉生變成史萊姆這檔事 第三季 - 48.5 [1080P][Baha][WEB-DL][AAC AVC][CHT].srt", + file_type="subtitle", + ) + print(ep) From 2b6fa65a9f17ad604eba492432e825720461870f Mon Sep 17 00:00:00 2001 From: KotaHv <92137267+KotaHv@users.noreply.github.com> Date: Wed, 24 Jul 2024 15:11:05 +0800 Subject: [PATCH 3/3] test: add new cases for test_torrent_parser --- backend/src/test/test_torrent_parser.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/backend/src/test/test_torrent_parser.py b/backend/src/test/test_torrent_parser.py index 10e6a546..f46bb023 100644 --- a/backend/src/test/test_torrent_parser.py +++ b/backend/src/test/test_torrent_parser.py @@ -72,6 +72,25 @@ def test_torrent_parser(): assert bf.season == 1 assert bf.episode == 6 + file_name = "不时用俄语小声说真心话的邻桌艾莉同学 S01E02.mp4" + bf = torrent_parser(file_name) + assert bf.title == "不时用俄语小声说真心话的邻桌艾莉同学" + assert bf.season == 1 + assert bf.episode == 2 + + file_name = "[ANi] 關於我轉生變成史萊姆這檔事 第三季 - 48.5 [1080P][Baha][WEB-DL][AAC AVC][CHT].mp4" + bf = torrent_parser(file_name, season=3) + assert bf.title == "關於我轉生變成史萊姆這檔事 第三季" + assert bf.season == 3 + assert bf.episode == 48.5 + + file_name = "[ANi] 關於我轉生變成史萊姆這檔事 第三季 - 48.5 [1080P][Baha][WEB-DL][AAC AVC][CHT].srt" + sf = torrent_parser(file_name, season=3, file_type="subtitle") + assert sf.title == "關於我轉生變成史萊姆這檔事 第三季" + assert sf.episode == 48.5 + assert sf.season == 3 + assert sf.language == "zh-tw" + class TestGetPathBasename: def test_regular_path(self):