[Feature Request]: Emby 订阅缺集检查未遵循“同步媒体库”选择,云端同名媒体导致误判不缺集
Author: gcttsCreated Sep 18, 2026Updated Sep 18, 2026
Labelsfeature request
当前程序版本
V3.0.3
运行环境
Docker
功能改进类型
主程序
功能改进
问题描述
Emby 同时配置了本地硬盘媒体库与115云端媒体库
MoviePilot 的 Emby 设置中,“同步媒体库”只选择了本地库,没有选择任何云端库。
当本地库与云端库存在同名、同年份、相同 TMDB ID 的电视剧时,MoviePilot 在订阅缺集检查中仍会读取云端库的剧集,并将云端已有集数计入本地已存在集数,导致本地缺失剧集不再下载。
例如:
- 本地媒体库实际只有 S01E01-E03;
- 云端媒体库存在 S01E01-E17;
- MoviePilot 只配置同步本地媒体库;
- 搜索订阅时,MoviePilot 仍判断 S01E01-E17 已存在,只将 E18 以后判定为缺集;
- 因此站点已有的 E04-E17 不会被下载。
该问题在未安装第三方订阅助手插件的情况下仍可稳定复现。
站点适配采集文件
不适用
参考资料
期望
所有媒体存在性检查都应遵循媒体服务器配置中的 sync_libraries:
- 只在已选择的媒体库中查找电影和电视剧;
- 未选择的媒体库不应参与订阅缺集、重复判断或已存在判断;
- 同名媒体存在于多个库时,应优先或仅匹配所选库中的项目。
初步代码定位
sync_libraries 在同步阶段能够正确过滤媒体库:
selected_libraries = [
library for library in libraries
if not sync_libraries
or "all" in sync_libraries
or str(library.id) in sync_libraries
]相关位置:
https://github.com/jxxghp/MoviePilot/blob/v3/app/chain/mediaserver.py
但 Emby 电视剧存在性查询使用服务器级接口 /emby/Items,没有传入用户 ID、媒体库 ID 或 ParentId,也没有依据 self._sync_libraries 过滤:
url = f"{self._host}emby/Items"
params = {
"IncludeItemTypes": "Series",
"Fields": "ProductionYear",
"Recursive": "true",
"SearchTerm": name,
"Limit": 10,
"api_key": self._apikey
}随后代码直接返回第一个名称和年份匹配的项目:
for res_item in res_items:
if res_item.get("Name") == name and (
not year or str(res_item.get("ProductionYear")) == str(year)):
return res_item.get("Id")相关位置:
https://github.com/jxxghp/MoviePilot/blob/v3/app/modules/emby/emby.py
get_tv_episodes() 再使用该 Item ID 查询 /emby/Shows/{item_id}/Episodes,没有校验项目是否属于已选择媒体库。
电影的 get_movies() 同样使用全局 /emby/Items,可能存在相同问题。
建议
建议让电影、电视剧存在性查询统一遵循 self._sync_libraries,可考虑:
- 非
all模式下,按每个已选媒体库 ID 使用ParentId分别查询;或 - 查询时获取
Path、ParentId/祖先信息,并过滤掉不属于已选媒体库的结果; - 对外部传入或缓存的电视剧 Item ID,也校验其所属媒体库;若不属于已选库,则丢弃并在已选库中重新搜索;
- 电影查询同步应用相同过滤逻辑;
- 增加以下回归测试:同一个 Emby 中,本地库和云端库存在同名同年份、相同 TMDB ID 的两个媒体项目。
Source: jxxghp/MoviePilot