diff --git a/CHANGELOG.md b/CHANGELOG.md index 02b91497..26400720 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +# [3.2.3-beta.3] - 2026-01-30 + +## Backend + +### Fixes + +- 修复第 0 集被错误重命名为第 1 集的问题 (#977) + - Episode 0 (S01E00) 现在会正确保留,不再被转换为 E01 +- 修复聚合 RSS 解析时 `title_raw` 为空导致崩溃的问题 (#976) + - `match_list()` 现在会跳过空的标题,避免 `TypeError` + +--- + # [3.2.3-beta.2] - 2026-01-28 ## Backend diff --git a/backend/pyproject.toml b/backend/pyproject.toml index 379b4623..43257fd8 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "auto-bangumi" -version = "3.2.3-beta.2" +version = "3.2.3-beta.3" description = "AutoBangumi - Automated anime download manager" requires-python = ">=3.13" dependencies = [ diff --git a/backend/src/module/database/bangumi.py b/backend/src/module/database/bangumi.py index e25cc4b6..f59c7aca 100644 --- a/backend/src/module/database/bangumi.py +++ b/backend/src/module/database/bangumi.py @@ -389,11 +389,13 @@ class BangumiDatabase: # Include both title_raw and all aliases title_index: dict[str, Bangumi] = {} for m in match_datas: - # Add main title_raw - title_index[m.title_raw] = m + # Add main title_raw (skip if None to avoid TypeError in sorted()) + if m.title_raw: + title_index[m.title_raw] = m # Add all aliases for alias in _get_aliases_list(m): - title_index[alias] = m + if alias: + title_index[alias] = m # Build compiled regex pattern for fast substring matching # Sort by length descending so longer (more specific) matches are found first diff --git a/backend/src/module/manager/renamer.py b/backend/src/module/manager/renamer.py index 47496411..5de69ecf 100644 --- a/backend/src/module/manager/renamer.py +++ b/backend/src/module/manager/renamer.py @@ -67,20 +67,13 @@ class Renamer(DownloadClient): # Apply episode offset original_episode = int(file_info.episode) adjusted_episode = original_episode + episode_offset - if adjusted_episode < 1: - if original_episode < 1: - # Parsed episode is 0 or negative - likely a parsing issue or special episode - # Use episode 1 as fallback to avoid invalid filenames - adjusted_episode = 1 - logger.debug( - f"[Renamer] Parsed episode {original_episode} is invalid, using episode 1" - ) - else: - # Offset would make episode negative - ignore the offset - adjusted_episode = original_episode - logger.warning( - f"[Renamer] Episode offset {episode_offset} would make episode {original_episode} negative, ignoring offset" - ) + # Episode 0 is valid (specials, OVAs, etc.) - only handle truly negative results + if adjusted_episode < 0: + # Offset would make episode negative - ignore the offset + adjusted_episode = original_episode + logger.warning( + f"[Renamer] Episode offset {episode_offset} would make episode {original_episode} negative, ignoring offset" + ) episode = f"0{adjusted_episode}" if adjusted_episode < 10 else adjusted_episode if method == "none" or method == "subtitle_none": return file_info.media_path @@ -148,8 +141,9 @@ class Renamer(DownloadClient): # Only apply episode offset original_ep = int(ep.episode) adjusted_episode = original_ep + episode_offset - if adjusted_episode < 1: - adjusted_episode = 1 if original_ep < 1 else original_ep + # Episode 0 is valid - only handle truly negative results + if adjusted_episode < 0: + adjusted_episode = original_ep return Notification( official_title=bangumi_name, season=ep.season,