ShukeBta
|
efca3cbe69
|
fix media playback and library workflows
|
2026-06-21 12:53:52 +08:00 |
|
ShukeBta
|
ada41e7078
|
docs: add security policy
|
2026-06-21 10:43:11 +08:00 |
|
ShukeBta
|
03741aff79
|
docs: update README contribution section
|
2026-06-21 10:43:11 +08:00 |
|
ShukeBta
|
7c579575b5
|
docs: add contribution guidelines
|
2026-06-21 10:33:27 +08:00 |
|
ShukeBta
|
7b881d031c
|
fix organizer diagnostics and site integrations
|
2026-06-21 09:44:29 +08:00 |
|
ShukeBta
|
6e61c8b545
|
feat(telegram): 订阅/下载补齐 year/rating/genres/原名/语言 富通知字段
- 模型: Subscription/DownloadTask 新增 OriginalName/OriginalLanguage/Year/
Rating/Genres 列(GORM AutoMigrate 自动建列, 无需手写迁移)
- enrich 链路: displayMetadata 与 DownloadTaskMeta 携带新字段, 从
SearchExternalMedia(TMDb/豆瓣/Bangumi)结果回填并持久化; 放宽提前返回
门槛, 已有海报但缺新字段时仍补齐
- 通知: 订阅/下载完成事件 data 注入 year/rating/genres/original_title/
original_language, 喂给作者富模板 formatTelegramMediaNotification
- 测试: 新增端到端断言, 验证补齐字段透传进 Telegram caption
|
2026-06-20 01:45:40 +08:00 |
|
ShukeBta
|
9ef7721527
|
fix(telegram): 订阅/下载通知补充媒体模板所需字段
合并 #39 媒体通知模板后, formatTelegramMediaNotification 需要事件携带
片名/简介/外链/资源标题等字段才能渲染丰富内容。补充数据源中现成可用的字段:
- 订阅命中: title(订阅名)/overview/imdb_url(由 IMDBID 拼)/resource_title(首个命中资源)
- 下载完成: title/overview/resource_title(torrent 原始名, 供模板提取季集与版本)
缺失项(年份/评分/tmdb 链接等无现成来源)模板会自动略过, 不影响回退。
|
2026-06-20 01:16:48 +08:00 |
|
yebuwudong
|
8e43f66513
|
fix(telegram): improve media notification template
|
2026-06-20 01:08:55 +08:00 |
|
ShukeBta
|
dff19801b6
|
fix(series): 彻底修复剧集被按单集显示且无法修复
根因(用真实数据确诊, 两个互相独立):
- Web 端拆集: episode NFO 的 <uniqueid type=tmdb> 是【单集 episode id】、
<title> 是【单集名】, mergeEpisodeMetadata 却无条件覆盖了整剧 tm_db_id /
original_name → 同剧每集 id/原名各不相同, 被 getSeriesKey 按 tmdb_id 拆成
N 张单集卡(实测「遮天」90 集 = 89 个不同 tmdb_id)。
- Emby 散装单集: 电影库混入按 Season/SxxE 整理的剧集结构内容, 被判成 Episode
却因 movie 库不聚 Series 而漏成散装单集。
- 无法修复: EnrichLibrary 只处理 pending/no_match, 跳过 matched 脏行。
修复:
- local_metadata.mergeEpisodeMetadata: 单集 NFO 的外部 id 不再写入整剧字段,
单集名不再污染 original_name; 整剧 id/原名只认 tvshow.nfo。
- groupSeries.ts: 剧集分组改「库+路径剧名」优先(整剧目录对全剧一致), 外部 id
仅作回退, 对存量脏数据也能合并。
- emby_compat: 电影库常规浏览新增 movieLibraryItems, 把剧集结构内容聚成 Series
卡片与真电影并列(方案 B), 不再漏散装单集。
- cloud_path_repair: 「修复+重刮」先把脏的 matched 剧集行重置为 pending 再重刮,
使其能被重新刮削; 结果新增 reset 计数。
- 新增 NormalizePollutedEpisodeMetadata 启动迁移(幂等): 按整剧目录聚合, 清洗
tmdb/原名散乱的剧组并重置 pending。
测试: local_metadata/emby_compat/cloud_path_repair/episode_metadata_cleanup
新增或更新断言; 修正 scanner_cloud_test 中依赖旧错误行为的用例。
|
2026-06-20 01:04:19 +08:00 |
|
ShukeBta
|
b40e2c7280
|
fix: 订阅恢复补缺集/单媒体手动整理入口/媒体库排序/网盘媒体分类迁移
- 订阅(问题1): selectPreparedSubscriptionCandidates 在本地已有部分集时不再
无条件丢弃整季/全集包,单集候选不足时用全集包兜底;Restore 重置 total_episodes
让下次 run 从权威元数据重算,避免被 feed 低估值锁死误判'无缺集'
- 单媒体整理(问题2): 后端已具备,新增 OrganizeMediaDialog 组件并在媒体详情页
接入'整理入库'按钮(可选类型/二级分类/目标路径/转移方式/预览)
- 媒体库排序(问题3): ListByLibrariesFiltered 改多级排序 year/updated_at/
created_at/id,id 作稳定 tie-breaker 消除云盘批量扫描同批时间戳的随机观感
- 网盘媒体消失(问题4): 云盘媒体 upsert 时允许 library_id 迁移到重新挂载的
更精确分类库(本地媒体物理位置固定不迁移),修复一键挂载子目录后媒体消失
|
2026-06-19 21:29:02 +08:00 |
|
ShukeBta
|
9b4884359b
|
fix(scrape): 单集名不再覆盖整剧 original_name 修复合集被拆集 + 媒体库页新增单库修复重刮
- 根因: 单集刮削把 TMDB episode.Name 写入 original_name(应为整剧原名),
导致同剧每集 original_name 不同, 合集分组键回退到标题时被拆成多集无法合并。
移除该覆盖, 保留单集 overview/剧照/评分/时长回填(不影响合集键)。
- 新增 RepairAndRescrapeLibrary 服务方法 + POST /admin/libraries/:id/repair-rescrape
路由 + 媒体库页「修复+重刮本库」按钮, 可按库单独触发修复(回填占位符外部 ID)并重刮,
既修空 ID 又借重刮覆盖此前被单集名污染的 original_name。
|
2026-06-19 21:29:02 +08:00 |
|
Shuke
|
f873997d27
|
Update README.md
Signed-off-by: Shuke <272197458+ShukeBta@users.noreply.github.com>
|
2026-06-19 16:07:09 +08:00 |
|
ShukeBta
|
87bb94d4df
|
feat(repair): 新增全库修复+重刮入口,剧集类路径正确归类
- 服务层 RepairAndRescrapeAllLibraries:先从路径占位符回填缺失/错误外部ID,再逐库重刮(含 no_match 重试)
- 新增 handler 与路由 POST /api/admin/media/repair-rescrape,异步执行经 WS 推送进度
- 前端媒体库页新增「全库修复+重刮」按钮调用该接口
- groupSeries:路径落在剧集类目录(电视剧/动漫/特别篇等)时按剧集卡处理,跳转分类视图
|
2026-06-19 12:23:56 +08:00 |
|
ShukeBta
|
ce38fd257f
|
chore: 移除源码注释与测试名中的第三方项目引用
将 cloud/external_search/filemanager/subscription_planner 注释及若干测试
函数名中的外部项目名替换为中性表述,不改变任何逻辑与行为。
|
2026-06-19 12:23:56 +08:00 |
|
ShukeBta
|
b44c7f860b
|
fix(media): 修复emby电影库混入剧集/特别篇识别/剧集合集 + 新增手动编辑元数据
emby 兼容层(hills/yamby 等客户端):
- 电影库不再混入剧集:filterLikelyEpisodicPathsFromMovieQuery 按路径
特征(Season/S0x/Specials/电视剧/日番/国漫等)剔除误入电影库的剧集
- itemPayload 改用 mediaShouldBeEpisode:有季集号且(属剧集库或路径像剧集)
才标记为 Episode,修正电影库里剧集被当成 Movie
特别篇识别:
- episode_parser 新增 patSpecialSeason,识别 S0/Season 0/Specials/SP/OVA/
OAD/番外/特别篇/特典 文件夹 → 第0季;seasonFromParents 返回 found 标志,
区分"明确第0季"与"未识别默认第1季"
- emby seasonDir 正则同步支持 Specials/SP/OVA/特别篇 等
剧集合集:
- groupSeries 抽出 isSeriesCard,卡片链接按是否剧集判定,修复剧集卡片
跳转;每集分离的根因(季集号/分组key)随入库识别修复一并改善
手动编辑元数据(自采集视频无TMDB信息时可自定义封面/标题/简介/分类):
- 新增 MediaService.UpdateMetadata + PATCH /media/:id/metadata(需admin)
- 前端 MetadataEditDialog 接入 LibraryPage 与 MediaDetailPage
其他:scanner/scraper/nfo/local+cloud_metadata/adult 元数据识别配套改进;
.gitignore 忽略本地 .dev-cache/.dev-data 运行产物。
|
2026-06-19 12:23:56 +08:00 |
|
ShukeBta
|
cce88ce3b0
|
fix(classify): anime 无元数据时纯中文译名不再误判国漫
日本动画的中文译名几乎都是纯汉字(如「葬送的芙莉莲」),原先靠 containsHan
判中文会把日本动画误判成国漫。新增 isChineseAnime:仅在有 origin_country/
语言元数据,或无元数据但有显式中文标记(国漫/国产/国创/华语)时才判国漫,
否则默认日番。有元数据时只认元数据,不受错误源目录名(如「国产剧」)误导。
未刮削的国漫刮出 origin_country=CN 后仍正确归类。补 4 个分类器测试用例。
|
2026-06-18 19:57:59 +00:00 |
|
ShukeBta
|
b16f7d6663
|
fix(organize): 入库二级分类对齐MoviePilot结构 + 手动整理不再作为一级目录
- anime 顶层目录独立为「动漫」(动漫/{国漫,日番,儿童}),不再混入电视剧
- categoryPhysicalRootDir 把二级分类名映射到正确顶层:
动画电影/华语电影/外语电影→电影; 国漫/日番/儿童→动漫;
国产剧/日韩剧/欧美剧/纪录片/综艺/未分类→电视剧; 成人→成人
- 新增 staging 重定向:目标根落在「手动整理」等暂存目录时,上提到
父级媒体根,媒体真正归入分类目录(如 媒体/电影/华语电影/片名),
而非停留在手动整理下或与分类目录并列
- organizeLibraryRootForLayout 跳过 staging 名的库,避免回流暂存目录
- 同步更新陈旧测试期望(电视剧→动漫)+新增 staging 重定向测试
|
2026-06-18 19:32:59 +00:00 |
|
ShukeBta
|
0cec6606c1
|
fix(telegram): 区分'不在群'与'查不了',修复在群却被拒注册/绑定
getChatMember 失败(Bot不在群/频道非管理员/群ID失效/代理超时)此前被
吞成 false,导致已在群用户收到'不在绑定群组'误导提示。
- telegramChatMembership 返回三态(是/否/查不了)
- telegramUserBindDecision 据此返回 allowed/denied/unverifiable
- 四个拦截点(start绑定/register/redeem注册/hideadult)在'查不了'
时改提示管理员检查Bot权限与群ID,不再误导用户
- syncgroupm 仅在'查实非成员'时判定可清理,查不了保守跳过防误删
- getChatMember 超时 8s->15s,缓解代理回退预算耗尽
|
2026-06-18 17:50:54 +00:00 |
|
ShukeBta
|
0a3748e564
|
Fix subscription restore and media library entry links
|
2026-06-18 10:54:10 +08:00 |
|
ShukeBta
|
6c50697a1a
|
Fix cloud media metadata repair and merging
|
2026-06-18 02:58:30 +08:00 |
|
ShukeBta
|
b492d9f867
|
Fix license sync and cloud scan scheduling
|
2026-06-18 01:39:39 +08:00 |
|
yebuwudong
|
692b7fb9df
|
Improve Telegram notifications
|
2026-06-18 00:35:53 +08:00 |
|
ShukeBta
|
e4b1488e11
|
Fix manual scrape apply for cloud media
|
2026-06-18 00:27:26 +08:00 |
|
ShukeBta
|
0291ab8194
|
Fix media scraping rename and compose pulls
|
2026-06-17 23:59:13 +08:00 |
|
ShukeBta
|
29ac7765d2
|
Fix logo assets and license heartbeat
|
2026-06-17 23:30:31 +08:00 |
|
ShukeBta
|
fb362e1fec
|
Backfill license usage and restore bot proxy fallbacks
|
2026-06-17 22:22:46 +08:00 |
|
ShukeBta
|
a0aeb07f03
|
Fix notification event toggles and license heartbeat
|
2026-06-17 20:35:11 +08:00 |
|
ShukeBta
|
b128b4d11e
|
Improve Docker build caching
|
2026-06-17 20:06:09 +08:00 |
|
ShukeBta
|
850d3db811
|
Fix scraping workflows subscriptions bot and recycle bin
|
2026-06-17 19:48:17 +08:00 |
|
ShukeBta
|
91afbe54a2
|
Polish login copy and restore README community sections
|
2026-06-17 16:22:06 +08:00 |
|
ShukeBta
|
227407993c
|
Restore legacy feature PRD document
|
2026-06-17 16:06:09 +08:00 |
|
ShukeBta
|
ab4637beed
|
Update MediaStationGo branding and deployment docs
|
2026-06-17 16:01:16 +08:00 |
|
ShukeBta
|
3368ac2947
|
Fix bot binding and terminal device limits
|
2026-06-17 01:06:20 +08:00 |
|
ShukeBta
|
8e5bf73edc
|
Fix Emby handler tests on clean CI
|
2026-06-17 00:23:59 +08:00 |
|
ShukeBta
|
801af37462
|
Harden cleanup and client compatibility
|
2026-06-17 00:06:51 +08:00 |
|
ShukeBta
|
7766588f67
|
Rename Telegram compatibility commands to Mgo
|
2026-06-16 23:08:14 +08:00 |
|
ShukeBta
|
6e7854e8f6
|
Harden Telegram bot cleanup commands
|
2026-06-16 18:52:04 +08:00 |
|
ShukeBta
|
829b88036a
|
Parallelize cloud library listing
|
2026-06-16 15:21:19 +08:00 |
|
ShukeBta
|
18ae6df115
|
Deduplicate missing cloud config warnings
|
2026-06-16 13:44:11 +08:00 |
|
ShukeBta
|
866b75f644
|
fix: refresh license status from server edits
|
2026-06-16 13:19:42 +08:00 |
|
ShukeBta
|
3f40b18909
|
Limit and split production logs
|
2026-06-16 12:58:27 +08:00 |
|
ShukeBta
|
877912fe4b
|
Import local media before track probing
|
2026-06-16 12:31:07 +08:00 |
|
ShukeBta
|
5fc907e51b
|
Fix subscription dedupe and scan throughput
|
2026-06-16 11:32:48 +08:00 |
|
ShukeBta
|
833966afb2
|
Clarify cleanup rule bot commands
|
2026-06-16 02:47:00 +08:00 |
|
ShukeBta
|
a9b85c0f3f
|
Allow virtual media reference ids
|
2026-06-16 02:20:27 +08:00 |
|
ShukeBta
|
284ec873bc
|
Use compose deployment smoke in CI
|
2026-06-16 01:09:36 +08:00 |
|
ShukeBta
|
9a601a66b4
|
Wait longer for smoke startup
|
2026-06-16 01:03:12 +08:00 |
|
ShukeBta
|
852fe6ead0
|
Stabilize smoke startup port
|
2026-06-16 00:58:07 +08:00 |
|
ShukeBta
|
9af9217903
|
Skip HLS gate unless requested
|
2026-06-16 00:49:44 +08:00 |
|
ShukeBta
|
4979470469
|
Make smoke HLS check non-blocking
|
2026-06-16 00:44:12 +08:00 |
|