jxxghp
5128ae9e1e
refactor: 推进后端分层架构治理
2026-08-18 00:29:14 +08:00
jxxghp
1402626a4a
refactor(tmdb): 空结果缓存过期时间收敛为设置项 EMPTY_RESULT_CACHE_TTL
...
- ConfigModel TMDB 配置区新增 EMPTY_RESULT_CACHE_TTL(默认 30 分钟),支持环境变量覆盖
- request/async_request/discover/TmdbCache 统一改读 settings,移除模块级常量与跨模块导入
2026-08-16 21:20:32 +08:00
jxxghp
fa06a4ac03
fix(tmdb): 空结果缓存使用独立短 TTL,故障恢复后快速自愈,关闭 #6332
...
- cached 装饰器新增 empty_ttl/empty_if,空结果按独立短 TTL 写入
- TMDB request/async_request/discover 空结果快照 30 分钟过期
- TmdbCache 未识别负缓存(id=0)同步改用 30 分钟短 TTL,正缓存不变
2026-08-16 20:50:55 +08:00
InfinityPacer
24671f8f18
refactor(runtime): lazily activate host modules ( #6331 )
2026-08-16 16:07:38 +08:00
jxxghp
4345fcfa22
refactor(chain): chain 与 module 仅经 run_module 契约互联,实现模块内容封闭
...
- mTorrent 字幕链接解析下沉为 IndexerModule.site_subtitle_links,subtitle 模块自行跳过 API 站点
- TMDB/MusicBrainz 识别缓存管理改为模块方法(tmdb_cache_*/music_cache_*)经 run_module 分发
- WechatClawBot 客户端查找/临时客户端/缓存迁移内聚为 wechatclawbot_* 模块方法,
chain 移除 WechatClawBot 类与 ModuleManager 内省
- LISTENBRAINZ_* 常量迁至 schemas/types.py,模块与链层再导入保持兼容
- TMDbException 升为 schemas/exception.py 跨层契约,vendored 异常保持类身份一致
- 架构守护测试新增 test_chain_does_not_import_module_internals(共 18 项)
- 文档同步:chain->module 仅允许 run_module 分发,直接导入禁止
2026-08-16 05:25:28 +08:00
jxxghp
96118e73e7
refactor(string): split utilities by responsibility
2026-08-15 08:03:55 +08:00
Aqr-K
8a11214a43
refactor(db): 修复异步连接池无界增长,并完成 SQLAlchemy 2.0 迁移与分层归位 ( #6320 )
2026-08-15 06:58:38 +08:00
jxxghp
369d7d6448
refactor: reorganize backend module boundaries
2026-08-14 19:53:33 +08:00
jxxghp
7b3444c366
refactor backend module architecture
2026-08-14 15:45:38 +08:00
Aqr-K
a2e70b443d
fix(monitor,transfer): 修复 FUSE 挂载无响应导致的监控冻死、整理链锁死与漏件 ( #6276 )
...
* wip(v3): 移植监控与整理韧性修复到 v3 基线
包含:监控看门狗隔离/挂载探测、整理队列持久化、文件系统子进程代理、
写入原子化。迁移重挂到 v3 链 8a4c7e1d2f90 -> 7f5c1d2e3a4b -> e3d9f4b7c806。
tmdb 相关测试尚未通过,待定位。
* fix(v3): 修正移植引入的 16 项测试失败
- poller.py:合并时我方保留的行仍用旧变量名 merged_snapshot,而 v3 已统一
改名为 current_snapshot,导致 NameError 被外层 except 吞掉、快照从未保存
- smb.py:采纳 f-string 拆分写法,恢复 Python 3.11 可解析
- dispatcher 测试:历史查重由 _should_skip_by_history 统一承担,mock 点随之调整
- tmdb 缓存测试:补充 v3 新增的 media_source/media_id 字段
- tmdb 重试测试:为 fake 补充 match_multi/async_match_multi
尚余 3 项与 v3 识别流程的连接失败处理有关,待单独判断。
* fix(v3): 测试适配 v3 的 media_source/media_id 重构
v3 将媒体标识从 tmdbid 统一重构为 media_source + media_id,recognize_media
的 tmdbid 参数已被 **kwargs 静默吞掉——传了也不生效,流程会误降级到名称搜索。
tmdb 重试用例改用新参数后恢复正确路径。
同时修正 fake 的 match_multi 语义:真实实现(tmdbapi.match_multi)吞掉所有
异常并返回 None,连接失败与「未找到」在该路径上本就不可区分,fake 需保持一致。
至此移植引入的 19 项失败全部清零。
---------
Co-authored-by: Aqr-K <Aqr-K@users.noreply.github.com >
2026-08-13 08:19:54 +08:00
jxxghp
ca32922a7f
refactor(media): unify media identity and chain responsibilities
2026-08-12 18:31:09 +08:00
jxxghp
8bf2f601a6
refactor(media): unify source identity and music browsing
2026-08-12 12:56:40 +08:00
jxxghp
3f1b0cdb05
feat(music): 支持多源识别与元数据刮削
2026-08-11 23:34:00 +08:00
jxxghp
d7cf853bc8
fix(search): 支持单次搜索启用多个媒体数据源,合并显示所有源结果 ( #6270 )
...
- 新增 is_media_source_enabled/is_media_source_selected,请求级 source 支持逗号分隔多数据源,缺省回退全局 SEARCH_SOURCE 配置
- 四个媒体模块的搜索/人物/合集方法统一接入多源判断
- 补充多数据源搜索相关测试
2026-08-11 21:06:52 +08:00
jxxghp
4b1df72a4a
refactor(cache): simplify recognition cache persistence
2026-08-06 07:48:43 +08:00
InfinityPacer
197a09b2a4
fix(dashboard): distinguish empty media results ( #6187 )
2026-07-25 14:24:25 +08:00
jxxghp
fb32c59713
feat: add AniList rankings and discovery
2026-07-22 12:53:58 +08:00
jxxghp
e3f80af74f
feat: expand metadata sources and media server sync ( #6129 )
2026-07-21 11:34:18 +08:00
InfinityPacer
5588e37c6d
fix: preserve season zero semantics ( #6150 )
2026-07-20 06:55:23 +08:00
InfinityPacer
893269f8c1
fix(modules): serialize configuration reload lifecycle ( #6122 )
2026-07-15 17:28:49 +08:00
jxxghp
29068a5846
feat: 支持 TheMovieDb 识别缓存管理
2026-07-13 09:48:08 +08:00
jxxghp
68f18db374
Handle invalid UTF-8 with replacement decoding
2026-06-21 09:56:34 +08:00
jxxghp
d26225b998
fix(tmdb): stabilize tmdb connection reuse
2026-06-11 12:48:32 +08:00
jxxghp
00fc8b2f53
chore: update text processing dependencies
2026-05-23 12:18:59 +08:00
jxxghp
b6b5529d19
fix: 优化TMDB搜索匹配优先级,title/original_title优先于别名匹配
...
将搜索结果匹配策略从"逐个结果完整匹配链"改为"两轮优先级匹配":
第一轮遍历所有结果只匹配title/original_title,第二轮再匹配别名译名。
避免排序靠前的无关影片因别名恰好匹配而抢先于正确结果。
Fixes #5719
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-21 17:47:59 +08:00
jxxghp
7cc037c683
fix: suppress garbled gzip bytes in tmdb error log
...
When Content-Encoding is present (e.g. gzip), skip logging the raw
response text to avoid unreadable binary output in logs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-20 18:08:10 +08:00
jxxghp
068d0af4ca
fix: remove tmdb manual gzip fallback
2026-05-20 17:09:31 +08:00
jxxghp
8f117d79f2
Revert "fix: handle tmdb gzip json responses"
...
This reverts commit 47c4e84fdd .
2026-05-20 17:03:47 +08:00
jxxghp
47c4e84fdd
fix: handle tmdb gzip json responses
2026-05-20 16:54:01 +08:00
jxxghp
a5745af484
fix: restore tmdb trending recommendations
2026-05-20 10:55:01 +08:00
jxxghp
c3e4e1a764
fix: decode raw gzip tmdb responses
2026-05-20 10:44:01 +08:00
jxxghp
6edb627145
fix: handle tmdb unicode decode errors
2026-05-20 09:21:36 +08:00
jxxghp
07f51c5d94
fix: handle invalid tmdb json responses
2026-05-20 09:05:18 +08:00
jxxghp
34ff80e26c
feat: optimize scraping for multi-server compatibility
...
- Add studio, country, runtime tags to NFO generation
- Fix Fanart naming: showbackground→fanart (recognized by Jellyfin/Emby)
- Add image alias system: backdrop↔fanart, thumb↔landscape
- Merge image sources from all modules instead of first-wins
- Add CLEARART and LANDSCAPE scraping metadata types
- Extend season scraping with backdrop and landscape support
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-05-19 12:36:47 +08:00
jxxghp
195e34563d
fix: use explicit tmdb locale setting
2026-05-19 11:33:03 +08:00
jxxghp
29dab5a312
fix: improve media image scraping
2026-05-19 10:48:36 +08:00
jxxghp
c857ae3e14
fix(tmdb): remove fallback to TMDB website scraping when API search fails
2026-05-17 19:46:50 +08:00
jxxghp
3c055e2482
fix: avoid tmdb cached response mutation
...
Fixes #5777
2026-05-16 08:02:18 +08:00
jxxghp
2831eecbeb
perf: optimize media recognition internals
2026-05-15 13:37:36 +08:00
DDSRem
5a585839ba
chore: remove unused imports and fix function name conflicts ( #5764 )
...
- Remove unused imports in anthropic.py, tmdbv3api/__init__.py, tv.py, test files
- Rename conflicting function names in subscribe.py and webhook.py
- Clean up unused re-exports in tmdbv3api/__init__.py (15 unused exports)
- Apply consistent formatting across API endpoints
2026-05-13 18:59:03 +08:00
jxxghp
5e5c257b75
fix(tmdb): cache serializable response snapshots
...
Avoid caching raw HTTP response objects in TMDb request helpers so Redis no longer fails on embedded locks. Add an isolated regression test for sync and async request snapshots.
Refs #5763
2026-05-12 22:31:56 +08:00
Attente
ee9ea54ab7
feat(fanart): 添加异步支持并优化图片处理逻辑
2026-05-10 00:07:28 +08:00
jxxghp
94d7e4385e
fix: update shared recognize cache flow
2026-05-08 21:21:01 +08:00
DDSRem
1acf78342c
feat: tmdbid优先识别,同ID电影/电视剧通过元数据自动消歧
...
当名称中包含 {tmdbid=xxx} 时,优先使用tmdbid直接查询TMDB,不再回退到标题搜索。
当同一tmdbid同时存在电影和电视剧时,通过标题、年份、类型等元数据自动消歧。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-26 06:45:17 +08:00
jxxghp
630d13ac52
fix: 修复集缩略图文件名错误,episode-thumb-xx 改为 视频文件名-thumb.xx
2026-03-23 23:05:25 +08:00
Attente
a0838ed9cd
fix(media): 修复剧集单集图片刮削
2026-03-23 19:41:48 +08:00
景大侠
4c3d47f1f0
feat(cache): 同步/异步函数可共享缓存
...
- 缓存键支持自定义命名,使异步与同步函数可共享缓存结果
- 内存缓存改为类变量,实现多个cache装饰器共享同一缓存空间
- 重构AsyncMemoryBackend,减少重复代码
- 补齐部分模块的缓存清理功能
2026-02-10 18:46:49 +08:00
CHANTXU64
4e74d32882
Fix: TMDB 剧集详情页不显示第 0 季(特别篇) #5444
2026-02-02 10:28:22 +08:00
copilot-swe-agent[bot]
5d3443fee4
Use ruamel.yaml consistently in CategoryHelper
...
Co-authored-by: jxxghp <51039935+jxxghp@users.noreply.github.com >
2026-01-26 04:10:15 +00:00
copilot-swe-agent[bot]
27756a53db
Implement proper architecture: module->chain->API with single CategoryHelper
...
Co-authored-by: jxxghp <51039935+jxxghp@users.noreply.github.com >
2026-01-26 04:07:56 +00:00