fix(scrape): 单集名不再覆盖整剧 original_name 修复合集被拆集 + 媒体库页新增单库修复重刮

- 根因: 单集刮削把 TMDB episode.Name 写入 original_name(应为整剧原名),
  导致同剧每集 original_name 不同, 合集分组键回退到标题时被拆成多集无法合并。
  移除该覆盖, 保留单集 overview/剧照/评分/时长回填(不影响合集键)。
- 新增 RepairAndRescrapeLibrary 服务方法 + POST /admin/libraries/:id/repair-rescrape
  路由 + 媒体库页「修复+重刮本库」按钮, 可按库单独触发修复(回填占位符外部 ID)并重刮,
  既修空 ID 又借重刮覆盖此前被单集名污染的 original_name。
This commit is contained in:
ShukeBta
2026-06-19 15:00:00 +08:00
parent f873997d27
commit 9b4884359b
7 changed files with 105 additions and 6 deletions
+6 -3
View File
@@ -546,9 +546,12 @@ func (s *ScraperService) applyProviderMatch(ctx context.Context, m *model.Media,
zap.Error(err))
} else if episode != nil {
episodeUpdates := map[string]any{}
if strings.TrimSpace(episode.Name) != "" {
episodeUpdates["original_name"] = strings.TrimSpace(episode.Name)
}
// 注意: 不要把 episode.Name(单集名,如"觉醒"/"Pilot"/"第1集")写入
// original_name —— 该字段是「整剧原名」,是合集分组键的回退依据。
// 若每集都写成各自的单集名,同一部剧的各集 original_name 互不相同,
// 会被前端 getSeriesKey / 后端 mediaVersionGroupKey 拆成多个独立卡片,
// 导致同剧无法合并成合集。单集名属于单集信息,这里只回填不影响合集
// 分组的单集字段(简介/剧照/评分/时长)。
if strings.TrimSpace(episode.Overview) != "" {
episodeUpdates["overview"] = strings.TrimSpace(episode.Overview)
}