Commit Graph

2060 Commits

Author SHA1 Message Date
jxxghp
2149eb2a60 fix(download): provide fallback category for music torrents
Use the music media type as the downloader category only when music has no library classification. Preserve configured categories and qBittorrent automatic-management settings, with SDK-boundary regression coverage.

Refs #7028
2026-10-16 15:13:03 +08:00
jxxghp
8c59a89d57 fix(transfer): debounce monitored file success notifications (#7026) 2026-10-16 13:24:31 +08:00
jxxghp
4955b7b9ea fix: harden backend isolation and execution safety 2026-10-16 09:11:28 +08:00
jxxghp
0eb79ceee2 fix(storage): preserve shared category directories during media cleanup (#7012) 2026-10-16 00:33:47 +08:00
jxxghp
63c8c0d71a fix(transfer): render aggregated success notifications with user template (#7007) 2026-10-15 13:10:43 +08:00
jxxghp
5fe8ad98b2 fix(music): make album years optional matching evidence (#7004) 2026-10-15 12:16:24 +08:00
jxxghp
2c889a1735 fix(subscribe): 站点本地流控按限流窗口退避 (#6996) (#7001)
订阅分页搜索遇到站点本地流控(limit_interval/limit_count/limit_seconds)
拒绝时只按秒级 cooldown 反复重试,在整个限流窗口内持续触发风控。现在:

- 本地流控被拒时按站点配置窗口计算退避(访问间隔与计数窗口取最大值,
  并多留 1 秒越过窗口的严格比较边界);
- 同一退避写入站点预算冷却,窗口内其它订阅任务不会继续访问该站点;
- 本地流控没有发出请求,不计入连续失败与错误退避类别。
2026-10-15 09:14:13 +08:00
jxxghp
57b883d2bf feat(music): add global local cover control 2026-10-15 07:20:44 +08:00
flippedyizheng
19f9098d68 fix(mediaserver): require unambiguous title-year match for cross-source fallback (#6998) 2026-10-15 07:15:06 +08:00
jxxghp
72c8bff312 feat(music): preserve local covers and fall back after online scraping fails 2026-10-14 23:15:41 +08:00
jxxghp
c4cd6c8ac4 fix(download): confirm tracker forms and blacklist invalid torrents 2026-10-13 21:54:37 +08:00
jxxghp
8cbba9916e fix(subscribe): prefer complete packs for initial TV downloads 2026-10-13 21:16:22 +08:00
jxxghp
48cffca3a1 feat(transfer): aggregate successful notifications by batch (#6981) 2026-10-13 17:21:17 +08:00
jxxghp
98bd038623 fix(music): reconcile album completion and prevent duplicate downloads
Recover complete release coverage from successful local transfers and audio tags/CUE before subscription searches. Keep release-group and album boundaries, and reject completed torrent hashes before downloader submission.
2026-10-13 17:05:57 +08:00
jxxghp
86c7fccfd5 feat(subscribe): persist business activity with scoped details 2026-10-12 23:43:01 +08:00
jxxghp
6ef8408f43 fix(bangumi): merge tmdb classification metadata for aux source (#6968)
Bangumi 等主识别源缺少 original_language/origin_country 标准字段,引用这些字段的分类规则整体失效并落入未分类;TMDB 辅助补充已有 genre_ids 合并,补齐语言与国家标准字段,仅填充主来源缺失值。
2026-10-12 17:49:40 +08:00
jxxghp
de7726c6fc fix(subscribe): reconcile partial library progress (#6966) 2026-10-12 13:38:24 +08:00
jxxghp
6f9c0756c1 fix(download): reuse torrent content before resolving tickets (#6967) 2026-10-12 13:34:41 +08:00
jxxghp
391f55df40 feat(subscribe): add isolated execution logs with authorized streaming (#6963) 2026-10-11 22:18:37 +08:00
jxxghp
4059877088 fix(search): preserve full collection for whole-season subscriptions
Retain episode targets while keeping the whole-season barrier across paging and checkpoint recovery. Full scans no longer stop at the latest episode observed on early pages.
2026-10-11 07:53:45 +08:00
jxxghp
0cbdbf9b1d fix(search): cap paging and stop unmatched IMDb sources 2026-10-11 07:46:38 +08:00
jxxghp
63055f84d1 fix(download): recover omitted site credentials for torrent fetch 2026-10-11 07:36:54 +08:00
InfinityPacer
9117ebd69c fix(download): let labelled full-season packs compete in whole-season phase
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 01:25:46 +08:00
InfinityPacer
338687bee8 fix(download): treat blank save path as default directory
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 23:48:50 +08:00
jxxghp
dd90883c5d fix(torrent): respect tracker rate limits and quota cooldowns
Recognize explicit JSON rate limits before torrent parsing and short retries. Preserve per-call quota errors through download preparation so subscription cooldowns cover the tracker window.

Refs #6950
2026-10-10 23:34:35 +08:00
InfinityPacer
3faa49fd7a fix(workflow): keep torrent contexts usable across persistence and filtering
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 18:44:19 +08:00
jxxghp
bb29451222 fix: isolate unhandled durable transfer failures 2026-10-10 12:17:07 +08:00
jxxghp
8811825ee8 fix(search): separate retry timestamp types 2026-10-10 07:04:32 +08:00
jxxghp
828f66e771 fix(search): ignore expired scan retry times 2026-10-10 06:59:33 +08:00
jxxghp
1ed458eda7 fix(download): remove deleted source from matching downloader 2026-10-10 06:58:04 +08:00
jxxghp
e9f0c693e2 fix(torrent): retry transient downloads and shorten empty-content cooldown 2026-10-10 00:05:22 +08:00
InfinityPacer
6034dcc880 fix(workflow): drop shared context on fork and legacy pickle context
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 13:56:35 +08:00
jxxghp
54f2daba06 fix(subscribe): stop automatic searches and downloads when paused 2026-10-09 12:00:18 +08:00
jxxghp
35d5cac84f fix(subscribe): validate TMDB conversion and sync architecture facts 2026-10-08 21:22:17 +08:00
YuHoYe
d42c217286 fix(subscribe): convert douban/bangumi identity to TMDB on subscribe
识别源为 TMDB 时,手动订阅电视剧或电影若传入豆瓣、Bangumi 等非 TMDB 身份,
订阅链现在会先通过 convert_media_identity 换成 TMDB 整剧身份,再按 TMDB 识别,
与豆瓣想看、豆瓣榜单插件的订阅口径保持一致。

非 TMDB 来源把每一季当作独立条目,标题和年份都是季级的。此前手动订阅只拆出季号、
仍以季条目作为主身份,下载记录与整理随之按季标题生成独立剧集目录,媒体库里出现
多部同名剧。转换失败时沿用原身份,识别源不是 TMDB 时不做转换。
2026-10-08 20:22:02 +08:00
jxxghp
70811b551e feat(music): optionally simplify written lyrics 2026-10-08 18:40:16 +08:00
WenGuoyin
e19076f482 feat(indexer): 适配 Milkie 站点搜索与连通测试
- 新增 MilkieSpider:基于 milkie.cc JSON API(x-milkie-auth 认证)的
  种子搜索与浏览,支持关键字分类收敛、服务端翻页、免费因子与
  媒体类型映射,下载链接按 API Key URL 编码拼接
- 注册 SPIDER_PARSER_CLASSES 与专用搜索参数投影
- SiteChain 新增 milkie.cc 连通性测试,401/403 判定 API Key 失效
- 补充 MilkieSpider 单元测试与同步异步参数一致性用例,同步依赖基线
2026-10-08 17:18:10 +08:00
jxxghp
11303a8e88 fix(transfer): suppress completion events without target items 2026-10-08 13:42:08 +08:00
jxxghp
f0b34cf9f5 fix(search): restore concurrent progressive manual paging 2026-10-08 11:57:10 +08:00
jxxghp
32d37fa8b4 feat(music): preserve per-task CUE recognition policy 2026-10-08 08:51:01 +08:00
ChantXu64
e5e2558585 feat(search): 订阅补全逐页搜索、断点续搜与资源页手动分页 (#6907) 2026-10-07 14:40:55 +08:00
jxxghp
fb652c74f4 fix(music): 支持关闭 CUE 识别整理分轨音频 2026-10-05 17:15:14 +08:00
jxxghp
e21d68496f fix(torrents): use incremental cache for M-Team by default
Refs #6878
2026-10-04 10:46:49 +08:00
jxxghp
823423b2c9 fix(download): refresh expired signed torrent links
Refs #6878
2026-10-04 10:27:28 +08:00
jxxghp
754da97d97 fix(music): apply simplified metadata to manual transfers
Normalize album details and final music template fields while preserving local edition evidence, multi-artist credits and source objects. Refs #6870.
2026-10-04 08:47:15 +08:00
InfinityPacer
6e295d5d2f fix(subscribe): preserve accepted searches for paused subscriptions 2026-10-04 00:22:57 +08:00
Cat
2a31b51687 fix(transfer): 整理规划的业务拒绝不再按系统错误告警 (#6868) 2026-10-03 23:03:15 +08:00
jxxghp
118e2ef933 fix(notification): align scoped recipient routing 2026-10-03 01:00:21 +08:00
jxxghp
b33053e10f Merge remote-tracking branch 'origin/v3' into codex/optimize-pr-6849
# Conflicts:
#	docs/architecture-overview.md
#	docs/refactor/optimization-checklist.md
#	tests/fixtures/architecture/dependency-baseline.json
2026-10-02 22:06:27 +08:00
jxxghp
e14e49eb47 fix(system): type release tags and record reduced mypy debt 2026-10-02 14:07:18 +08:00