jxxghp
a0e27c4424
feat(indexer): map Piggo resource labels
...
Resolve site labels from the Piggo catalog and dispatch connectivity, ticket parsing, and throttling through indexer capabilities.
2026-11-12 06:45:16 +08:00
jxxghp
18fe2ea387
feat(indexer): support HDArea REST API
...
Refs #7370
2026-11-11 21:53:16 +08:00
jxxghp
8dc4b08114
fix(indexer): support Piggo laboratory API ( #7274 )
2026-11-11 18:32:59 +08:00
jxxghp
1ec2bff817
Trae/agent s2h0 df ( #7359 )
2026-11-11 13:15:46 +08:00
gntv456
6166968f4c
feat(indexer): 支持 FluxTorrent 兼容层站点搜索与用户数据 ( #7355 )
...
* feat(indexer): 支持 FluxTorrent 兼容层站点搜索与用户数据
好学(hxpt.org)已由 NexusPHP 迁移到 FluxTorrent,原有页面刮削全部失效。
FluxTorrent 提供 /api/v1/compat/nexusphp/* 只读 JSON 兼容层,本提交按该契约
新增索引器与用户数据解析器,并在分发层加入能力探测,使未在站点资源中登记
专站协议的站点也能被自动识别(站点清单是闭源发布资源,主仓无法新增条目)。
- 新增 FluxTorrentSpider:调用兼容层 torrents.json 搜索,按 category_newznab
映射媒体类型,按 promotion 换算下载与上传量系数,下载地址携带开放 API 令牌
- 新增 FluxTorrentSiteUserInfo:解析兼容层 user.json 的用户资料与流量
- 新增同步与异步能力探测:站点未登记专站协议时,用站点令牌请求一次
user.json,响应符合 {code, message, data, request_id} 信封即判定为 FluxTorrent
- 探测要求站点已配置令牌,并用命中 24 小时、未命中 30 分钟的双层 TTL 缓存
- 不下发分类与媒体类型筛选:兼容层的 category 只接受站内分类 ID,且客户端
过滤会破坏分页续拉契约,分类筛选待站点资源发布链路补齐后再放开
* fix(indexer): 抽出用户数据模型解析,消除复杂度增长
CI 复杂度门禁报 IndexerModule.refresh_userdata 圈复杂度 15->16(上限 15)。
把 FluxTorrent 能力探测与模型选择抽成模块级函数 _resolve_userdata_schema,
refresh_userdata 的方法体不再因新增分支而增长。
* refactor(indexer): FluxTorrent 模块文件改为单词命名
命名门禁 test_new_host_production_modules_use_single_word_filenames 要求
app 下的模块文件名满足 [a-z][a-z0-9]*,flux_torrent.py 不合规 ⇒ 两个模块
改名为 fluxtorrent.py,同步更新导入与测试打桩路径。
* test(indexer): 修正发布时间断言并同步架构依赖基线
- 发布时间断言原先写死本机时区渲染结果,在 UTC 的 CI 上必然失败 ⇒ 改为对同一
转换函数取期望值,只验证 Unix 时间戳经由 format_timestamp 输出
- dependency-baseline.json 新增 app.modules.indexer.spider.fluxtorrent 与
app.modules.indexer.parser.fluxtorrent 的模块与导入边(edge_count 9973→9990、
module_count 1151→1153),结构与既有 haidan 等专站模块一致,边界未越权
* docs(architecture): 同步架构快照的模块与导入边数量
架构依赖基线新增两个索引器模块后,docs/architecture-overview.md 的
快照表需同步:Python 模块 1151→1153、内部导入边 9,973→9,990。
* test(indexer): 补齐异步探测与失败路径用例,满足新文件覆盖率门槛
新增文件的覆盖率低水位要求 80%,补齐后 spider 90.81%、parser 92.21%:
- 异步能力探测命中与请求异常两条路径
- 站点无响应、响应不是 JSON 时的降级判定
- 异步搜索缺少令牌时的直接失败
- 用户接口空响应 / 非 JSON / 结构异常 / 业务错误码的错误信息
- 站点地址缺协议与空白地址的归一
* test(indexer): 覆盖协议解析的三条分支
存量文件覆盖率低水位要求未覆盖语句数不增长,补齐协议解析的已登记协议、
探测命中、未识别三种情况(同步与异步),以及用户数据模型名的两条分支。
* refactor(indexer): 按站点资源路由 FluxTorrent 协议
删除运行时能力探测与 TTL 缓存,搜索和用户数据直接使用站点资源声明的 parser/schema;保留 FluxTorrent spider 与用户数据解析器的注册,由站点构建配置决定路由。
---------
Co-authored-by: gntv456 <gntv456@users.noreply.github.com >
Co-authored-by: jxxghp <jxxghp@gmail.com >
2026-11-11 10:27:52 +08:00
Huyvux12
dcdebe366a
fix(module): report filter and subtitle modules as available without probing ( #7357 )
2026-11-11 07:00:01 +08:00
flippedyizheng
e930296935
fix(u115): avoid blocking worker threads for 3600s during rate-limit cooldown ( #7356 )
2026-11-11 06:58:26 +08:00
jxxghp
7e1ac758d7
fix(transfer): make lyric suffixes configurable
2026-11-10 19:38:27 +08:00
jxxghp
8d4c6eb7c1
fix(transfer): unify media sidecar handling
2026-11-10 18:43:31 +08:00
Huyvux12
02856727dd
fix(download): resume paused magnet to fetch metadata before episode selection ( #7348 )
2026-11-10 06:56:10 +08:00
jxxghp
6d9cf06085
fix(download): accept unique video for mapped single episode
...
## 问题
识别阶段把累计集号换算为季集后,单集种子的物理文件仍可能保留原始集号。qBittorrent 和 Transmission 只按文件名解析集号,导致唯一视频文件被判定为未找到目标集数,任务停留在暂停状态。
## 修复
- 当本次只请求一集且种子只有一个视频文件时,按唯一视频文件兜底选集;多视频文件和多集视频继续严格按解析集号匹配。
- 下载历史结算沿用相同边界,避免任务启动后原始累计集号再次被过滤为空明细。
- 覆盖 qBittorrent、Transmission,以及 durable/普通下载历史写入路径。
## 验证
- 相关下载与历史回归:244 passed, 12 skipped
- 完整测试:19427 passed, 21 skipped;22 个既有基线失败与本次改动无关,已在干净 v3 checkout 复跑确认
- Pylint(3 个生产文件):10.00/10
2026-11-09 22:52:37 +08:00
Huyvux12
55da2238df
fix(jellyfin): 混合内容库使用 mixed 路由而非不存在的 library 路由 ( #7344 )
2026-11-09 22:12:20 +08:00
alexcastgonz
7baa3b6f94
fix(wechatclawbot): 仅有标题的图片通知也发送图片 ( #7338 )
2026-11-09 15:05:30 +08:00
jxxghp
a3c8280d14
fix(telegram): retry poster uploads before text fallback ( #7330 )
2026-11-08 10:37:03 +08:00
jxxghp
379ef94c9c
fix(transfer): 修复硬链接覆盖整理误留暂存与备份 ( #7322 )
...
从已落账操作回执更新共享 inode 的状态时间,并保留外部改写与未知结果的副本保护。关联 #7321。
2026-11-07 18:33:23 +08:00
jxxghp
9719948ad6
fix(transmission): retry transient RPC failures
2026-11-06 12:59:19 +08:00
LIN student
dd43022cd3
fix(mediaserver): cap Emby episode range expansion
...
An Emby/Jellyfin episode whose IndexNumberEnd is far above its
IndexNumber was expanded into a full episode list during library sync
and existence checks. A single end number around 10 million costs about
620 MB, which can explain the repeated OOM kills in #7277 .
Treat spans over 1000 episodes as invalid server metadata: keep only the
start episode and log a warning naming the item and the raw range.
Refs #7277
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-04 19:25:34 +08:00
jxxghp
a87c005322
fix(indexer): parse cspt dashboard traffic metrics
2026-11-04 14:30:50 +08:00
jxxghp
565631f157
fix(mediaserver): paginate Emby family library synchronization ( #7295 )
...
* fix(mediaserver): paginate Emby family library synchronization
* fix(mediaserver): keep request client import type-only
2026-11-04 07:14:46 +08:00
jxxghp
26f066df53
fix(transfer): 跳过整理的文件不再记录为入库成功 ( #7283 )
...
* fix(transfer): avoid successful history for skipped files
* test(transfer): fix regression test import order
2026-11-03 13:24:37 +08:00
jxxghp
e3e5184d42
fix(anilist): persist Chinese titles and use official API
2026-11-01 08:16:03 +08:00
jxxghp
d8fbabaa6a
fix(apppush): preserve full notification text for web details
2026-10-30 16:52:58 +08:00
jxxghp
a9c992d9b9
fix(apppush): preserve posters in relay notifications ( #7244 )
2026-10-30 13:38:30 +08:00
jxxghp
16cd9f75ed
fix(apppush): deliver business notifications to all active users ( #7235 )
2026-10-29 21:43:18 +08:00
jxxghp
222c0f0314
fix(ugreen): accept null poster wall lists
2026-10-27 07:31:05 +08:00
Aqr-K
71c2e9e3df
fix(storage): retain history until target cleanup is confirmed ( #7202 )
2026-10-27 05:42:07 +08:00
Derrors
72d940b835
fix(storage): detect nested 115 changes with stale directory times
...
115 子项变化不保证推进祖先目录时间。禁用该存储的目录时间剪枝,沿用现有快照遍历、深度、分页及限流。补充 API 边界与真实轮询器回归,验证空基线、旧时间移入和重复派发。
2026-10-26 21:59:07 +08:00
JontyLee
68d13fc5b2
fix(trimemedia): 访问码校验失败日志不再记录设备访问码
...
verify_access_code 把设备访问码拼进校验地址的路径段(/c/<code>),一旦连不上
就把整条 URL 写进 error 日志,明文凭据随之落到实例日志文件里;404 与状态码两
个分支本来就不带访问码,这里补齐同一条边界:只记录设备根地址。
这是 #7157 之后对其余裸 {url} 日志点做完整评估时唯一确认会写入凭据的一处:其余
调用点记录的是站点根地址,或把 api_key 经 params 传递、URL 本身不含凭据。
2026-10-26 20:49:21 +08:00
jxxghp
2fb3890f9d
fix(qbittorrent): 兼容 5.3 跳过校验参数
2026-10-25 18:30:00 +08:00
jxxghp
6680e090e6
feat: 自动登记中心推送实例并安全轮换凭据
2026-10-24 09:17:24 +08:00
jxxghp
3ac7526930
feat(notification): relay AppPush through private MoviePilot Server
2026-10-24 07:32:00 +08:00
jxxghp
e1b0d5b4bf
fix(indexer): identify HDDolby API connection failures ( #7164 )
2026-10-23 21:04:49 +08:00
jxxghp
5258e06fd7
fix(transfer): warn on unmatched custom target directory ( #7159 )
2026-10-23 18:23:57 +08:00
jxxghp
4d32f25fe4
fix(indexer): honor HDDolby API resource URL ( #7158 )
2026-10-23 17:48:59 +08:00
Aqr-K
fc0eed08cc
fix: preserve directed messaging and channel interaction contracts ( #7148 )
...
* fix: retain plugin lifecycle ownership and recover installation state
* fix: preserve directed messaging and channel interaction contracts
* test: cover plugin rollback and uninstall lifecycle boundaries
---------
Co-authored-by: jxxghp <jxxghp@gmail.com >
2026-10-23 07:49:53 +08:00
Aqr-K
bcbf79f030
fix(media): preserve recognition and rule mutation identities ( #7144 )
...
* fix(media): preserve recognition and rule mutation identities
* test: cover typed classification facts with alias policies
---------
Co-authored-by: jxxghp <jxxghp@gmail.com >
2026-10-23 07:33:27 +08:00
Aqr-K
598d1663b1
fix(download): preserve protocol failures and isolate site updates ( #7143 )
...
* fix(download): preserve protocol failures and isolate site updates
* test: cover tracker token lifecycle and record dependency facts
---------
Co-authored-by: jxxghp <jxxghp@gmail.com >
2026-10-23 07:22:22 +08:00
Aqr-K
d666ae9d86
fix: preserve media library cache on incomplete enumeration ( #7145 )
2026-10-23 06:53:14 +08:00
Aqr-K
f3c1449c8b
fix(storage): preserve transfer contents and cleanup identities ( #7142 )
2026-10-23 06:51:54 +08:00
jxxghp
fa67be8e4a
fix(scraping): normalize artwork and reuse downloads for aliases
...
Add independent alias and Fanart 4K switches, identify exact artwork names, preserve episode and season conventions, and detect missing images across case and format variants. Normalize downloaded bytes to JPEG or PNG and reuse one request with storage hard links or local upload copies.
Refs #7128
2026-10-22 09:25:42 +08:00
jxxghp
cc2e02793e
fix(telegram): wait for final streaming edit interval
...
Wait once for the remaining message edit interval during Agent finalization, without bypassing Telegram 429 cooldown or replaying confirmed text.
Refs #7124
2026-10-22 08:25:25 +08:00
jxxghp
6d4ce83837
fix(types): clear host mypy debt and prevent typing regressions
...
严格检查全部宿主源码,清零类型错误预算并移除按模块类型豁免。
按原因、所属方法、错误码及语法指纹锁定必要兼容例外和站点类型桩,
CI 阻断新增忽略、检查范围退化、本地桩替代真实接口及新的类型错误。
修复空值、异步和供应方类型边界,保持插件与 API 兼容合同,
并补充存储、订阅、通知、Agent 和工作流边界的回归覆盖。
2026-10-21 22:03:18 +08:00
JontyLee
453a956819
fix(themoviedb): 让声明的 TMDB 请求超时真正生效 ( #7123 )
2026-10-21 17:22:01 +08:00
jxxghp
4bf11c3277
fix(transmission): confirm torrent state around episode selection
2026-10-21 15:23:42 +08:00
jxxghp
f090d22df2
fix(transfer): continue overwrite after target cleanup
...
## 问题
覆盖裁决确认旧媒体库目标存在后,洗版流程可能在实际备份前删除旧目标。恢复整理时备份步骤把旧目标和备份都不存在视为未知冲突,任务进入人工复核,暂存的新版本无法入库。
## 修复
- 备份步骤在确认旧目标已被外部删除、且备份目标也不存在时记录为无副作用跳过。
- 继续提升已完整暂存的新版本;移动整理仍在提升成功后清理源文件。
- 查询失败、两端同时存在或存在备份但状态矛盾时继续保持人工复核保护。
- 增加持久整理回归测试,覆盖覆盖裁决后旧目标被删除的场景。
## 验证
- `tests/test_transfer_safe_overwrite.py`:94 passed
- 整理执行、持久化、人工复核、提交、worker、计划测试:202 passed
- changed-file Pylint:10.00/10
Fixes #7120
2026-10-21 12:54:06 +08:00
jxxghp
6766a0516e
fix(transfer): recover legacy 115 receipts and isolate cloud copies
...
Validate old instant-upload receipts against frozen source bytes and the original cloud file ID before source deletion. Isolate native 115 copies before renaming, verify moved object IDs, and quarantine uncertain native operations instead of replaying them. Require explicit delete success.
Refs #7099
2026-10-20 17:33:51 +08:00
jxxghp
842320a22c
fix(site): preserve MTorrent role names and nullable share ratios
2026-10-20 15:39:06 +08:00
jxxghp
95606bb915
fix(transfer): keep exact byte size in 115 instant upload receipts
2026-10-20 15:25:04 +08:00
jxxghp
04e7cebbf7
fix(mediaserver): request production year in Emby projections
2026-10-20 14:04:09 +08:00
jxxghp
c6cfef198c
fix(douban): normalize person search image URLs
2026-10-20 07:47:28 +08:00