Skip to content

Release 2.2.0 - #515

Merged
XCQ0607 merged 46 commits into
mainfrom
dev
Nov 10, 2026
Merged

XCQ0607 merged 46 commits into
mainfrom
dev

Conversation

@XCQ0607

@XCQ0607 XCQ0607 commented Nov 10, 2026

Copy link
Copy Markdown
Owner

v2.2.0 (2026-11-11)

🌟 新增功能与体验升级

  • 后台仪表盘与明/暗主题重构:仪表盘重新设计为数据看板,保留 KPI 与 CPU/内存实时图并新增 1/5/15 分钟时间窗口和趋势迷你折线;新增「日志活动」(近 12 小时分级柱状图与 24 小时错误/警告统计)、「服务与存储」(WebDAV、OpenList 状态与最近/下次备份、数据盘与进程内存用量)、「用户与设备」在线概览和「最近告警」列表,对应新增 GET /api/dashboard/overview 接口。后台界面去除渐变与毛玻璃,改为实色卡片加细边框的单一强调色风格,并新增顶栏明/暗主题切换按钮(默认跟随系统、记住选择,图表颜色同步切换)。
    • 后台仪表盘与明暗主题
  • Subsonic 本地歌单缓存筛选:在“返回本地歌曲歌单”下新增“返回缓存目录歌曲”,默认关闭,仅返回 music 歌曲;开启后将 cache 歌曲合并到本地歌单。
    • 返回缓存目录歌曲
    • 返回缓存目录歌曲
    • 获取歌单列表时跳过歌曲详情转换,详情仅读取一次收藏状态;自定义目录与内置 music / cache 重合时优先按内置目录归属,避免本地歌曲被错误隐藏。
  • Subsonic 评分歌单与联动补数据 (feat: 同步 fork 通用功能改动(自动排除 fork 私有代码) #508 @pyss56):新增按 1–5 星汇总的虚拟评分歌单,1 星歌单包含命中不喜欢规则的歌曲,空星级不生成歌单;接入评分快照创建、导出与恢复,并在后台提供目标用户选择和两个方向的手动联动补数据入口。
  • 快照导入与恢复完善 (feat: 同步 fork 通用功能改动(自动排除 fork 私有代码) #508 @pyss56):歌单及不喜欢快照区分导入与系统生成来源,支持按来源筛选,避免导入记录参与系统快照自动清理;恢复前先保存当前状态。
  • Web 播放器歌曲评分:播放器、歌曲列表、歌单、排行榜及本地音乐支持 1–5 星评分与清除,「我的评分」集中查看、筛选及导出;与 Subsonic 共用评分数据,独立保存到评分目录,不写入歌单。本地歌曲关联在线版后,在线已有评分优先,否则迁移本地评分、来源与历史,并删除本地重复记录。
    • Web 播放器歌曲评分与我的评分
  • 后台评分与不喜欢数据查看:按用户查看歌曲、歌手、专辑的评分与不喜欢记录,展示封面、音乐平台、添加或评分来源及详细资料;支持组合筛选、排序、分页和导出筛选结果。
    • 后台查看用户评分数据
  • Subsonic 缓存优先时优先使用 OpenList:后台新增「缓存优先时优先使用 OpenList」设置,可在缓存优先播放流程中优先尝试该用户可用的 OpenList 播放来源。
    • 后台缓存优先时优先使用 OpenList 设置
  • Web 不喜欢自动补分设置:在 Web 设置中为当前账号单独开启或关闭「不喜欢自动补分」,默认关闭;将歌曲加入不喜欢时,仅为未评分歌曲补 1 星,已有评分不覆盖。设置保存到服务器,同一账号跨设备生效,后台手动补分独立执行。
    • Web 设置中的不喜欢自动补分
  • 聚合搜索关键词联想:并发获取多源联想,快源先展示,合并重复词并优先展示多源共同推荐内容;增加短期缓存、超时与中文输入法处理,切换输入或正式搜索时取消旧联想,支持方向键选词和回车搜索,保留聚合音源选择。
  • 歌曲搜索分批加载与聚合排序:各音源先请求一页并按歌名相关性及原始排名交错展示,保留按设置数量的本地分页,翻到未加载页面时自动取下一批,也可点击常驻「加载更多」按钮;独立记录各源页码、结束与失败状态,避免深页翻唱因歌手名字较短挤到前列,修复跨源 ID 碰撞,并保留手动追加前的页码、结果顺序与滚动位置。
  • 内置音乐 SDK 接口更新:同步 QQ 签名搜索、推荐歌单、歌手与歌单详情及 QRC 逐字歌词,更新酷我歌词、网易歌手和咪咕封面接口,补齐酷狗分享歌单解析;保留被替换的旧实现为注释,修复歌词时间精度、分页与取消请求问题。
  • OpenList 备份与统一云端备份范围 (feat(openlist): 引入 OpenList 音频备份与缓存优先取回 #488 @pyss56):支持 OpenList 数据备份、恢复及独立的永久播放缓存;可分别选择 WebDAV / OpenList 备份歌曲与歌词、用户音源文件、快照、用户数据和系统配置。常规歌曲备份包含 data/music/ 内的音频、LRC、封面与索引,排除独立的根目录 music/、所有 cache/ 及外部自定义音乐目录;OpenList 播放缓存按用户单独配置上传、下载、双向同步或校验后删除本地副本。
  • 后台统一备份管理:将系统配置中的备份设置及 WebDAV、OpenList 入口集中到「备份管理」,按概览、本地备份、云端备份、数据恢复、记录与校验组织;补充执行时间、周期、范围和异常状态,未启用的服务收起相关操作。重构记录筛选,支持数据类型、用户、存储类别、状态、本地存在性、日期、关键词与排序,并优化文件详情、用户归属及时间显示。
    • 备份管理界面
  • 服务器已有歌曲优先播放与本地歌词:Web 播放器可优先读取当前用户的 music/ 与 cache/,按用户存储设置使用数据目录或运行根目录下的位置;新增「优先使用服务器本地歌词」,支持匹配已有 LRC,本地音乐条目也支持自定义目录中的同名歌词。补充 Web / Subsonic 播放顺序说明,区分已有文件读取、后台缓存写入和浏览器缓存。
    • 优先使用服务器本地歌词与优先播放服务器已有歌曲设置
  • OpenList 播放来源与内容校验:开启相关设置后,Web / Subsonic 在本地未命中时可使用该用户已登记的 OpenList 缓存或下载文件,不可用时回退在线解析,无需每次遍历网盘;WebDAV 仍用于备份恢复。普通上传仅检查响应与云端大小,独立的手动内容校验支持预估流量、后台执行、停止及结果筛选;「上传完成」与当前版本的「已校验」分别展示,上传后删除本地缓存仍需完整内容校验。
  • 均衡器与音效调节界面重构与紧凑交互:
    • 均衡器与音效调节面板
    • 动态生效配置标签(Tag)与一键移除:顶部状态栏实时展示已生效的音效配置标签(环境混响、EQ 预设/段数、音调调节、3D 环绕),支持鼠标悬停(桌面端)或轻点(移动端)标签右上角 ✕ 一键关闭单项配置;多项开启时支持一键「全部重置」,并提供全局总开关及纯净原音直通提示。
  • 歌词卡片分享界面现代化:重绘弹窗样式,加大圆角与悬浮阴影,预览区加入主题色光晕与点阵背景,预览卡片增加细描边和悬停辉光;比例、色彩风格、歌词行数按钮改为半透明渐变卡片,带悬停上浮、点击缩放及选中发光反馈;复选框与滑块改为自绘主题色样式,下载按钮增加渐变、内高光与悬停光泽,复制按钮采用毛玻璃描边。仅调整样式,不影响卡片生成逻辑。
    • 歌词卡片分享界面

🐛 缺陷修复与体验优化

  • PWA 与浏览器下载认证完善 ([help] #496):原生下载前检查并恢复登录 Cookie,恢复后再次确认会话有效;Fetch 下载携带同源认证头,登录失效或账号切换时明确提示并停止自动重试,避免页面可操作但下载提示「需要授权」。
  • 自动切歌优先使用已完成缓存 ([Feature] 自动播放列表不优先取缓存问题 #490):接管下一首预读链接前重新检查服务器已有歌曲,避免后台缓存已完成仍使用在线链接;补查仅检查本地文件,设置 1.2 秒超时,未就绪或失败时继续使用预读链接;预读按平台、标准化歌曲 ID 和目标音质匹配,避免跨平台或修改音质后误用旧结果。关闭缓存优先后不再复用在线歌曲的文件缓存预读,播放失败时清除对应预读记录,保留并发更新的新结果。快速切歌或队列变化后丢弃旧预读结果,关闭预读时立即停止缓冲,避免过期任务覆盖下一首。
  • 无可用音源时停止无效重试:保留本地与缓存播放,在线解析确认当前用户无可用源后停止自动换源、降音质、跳歌及后台连续预读,统一提示添加或启用音源;仅当前平台无源时跳过同平台重试与降音质。
  • 自定义目录加载与索引优化 ([Feature] #475):重复进入复用列表,按索引版本更新并保留分页与筛选,关闭歌词详情不再重复加载;文件操作后局部更新,合并并发扫描与目录遍历,批量删除仅保存一次索引。索引采用临时文件替换,读取失败保留有效记录,防止异步补数据覆盖新关联;Subsonic 按需自动扫描间隔调整为至少 5 分钟,手动同步仍立即执行。
  • 切歌进度重置 ([Bug]切换歌曲播放进度条不会置0 #494):切换歌曲时清零进度显示,避免新歌链接解析失败后自动重试时误用上一首的播放位置,保留同曲故障恢复与刷新续播。
  • 缓存自动清理修复 ([Bug] #489):空间限制仅清理 cache,不再误删 music 下载文件;异步递归统计并分批清理媒体文件,保护索引、临时文件、下载收尾与活跃备份,按最近访问或修改时间成组清理音频和歌词并同步索引。避免清理替换扫描中的索引实例,并容忍扫描途中删除文件;修复保留天数重启丢失,启动、修改清理设置后及定时检查两处缓存目录。
  • 下载与播放歌词获取流程统一:复用服务器歌词缓存、原平台接口及内嵌歌词兜底,补齐收藏歌曲和咪咕等平台的歌词参数;下载仅按平台与歌曲 ID 匹配,禁用同名歌曲兜底,并保留翻译、音译与用户隔离。
  • 浏览器单曲分段下载:支持 Range 的大文件默认使用 4 路分段下载,临时文件拼接后继续写入封面和歌词;加入分段校验、失败重试、单连接回退、取消清理及全局连接限制,连接中断时同步显示失败状态。
  • 单曲下载音质筛选修复:仅展示已验证可用或服务器已有的音质,过滤错误响应、异常文件大小和返回音质不匹配的选项,修复「64 B」占位大小误显示;筛选后按实际音质提交下载与缓存任务。
  • 下载内嵌歌词修复:统一处理带音源前缀的歌曲 ID,在线下载优先读取当前用户已有歌词,保留翻译与音译;补充歌词写入回读校验及失败日志,修复网页有歌词但下载文件未嵌入的问题。
  • 浏览器下载进度与状态修复([Bug] 浏览器未启动下载 #485):补齐进度查询认证信息,修复文件已下载却提示「浏览器未启动下载」的误报;服务器已有文件直接交给浏览器保存,无法确认进度时提示查看浏览器下载记录,进度查询失败不再计为下载失败。
  • 评分模块归类与迁移边界修复:评分服务、偏好、快照、校验、身份锁及事务迁移集中到 src/server/rating/;修复无评分用户的关联整理、仅评分事务覆盖未保存不喜欢数据的问题,并在不喜欢数据初始化时恢复遗留事务。
  • 评分迁移与恢复一致性修复:本地关联在线歌曲时同步迁移不喜欢原因中的评分 ID;评分、歌曲资料与相关不喜欢快照通过事务日志提交,写入失败可回滚,中断后可恢复。旧评分快照恢复时直接整理关联身份,保留手动不喜欢原因与历史快照。
  • 修复不喜欢规则括号空格重复、同身份资料补全及跨来源隔离;记录评分与不喜欢来源,手动同步增加候选预览、资料补全统计及未解析失败计数。
  • 修复 Subsonic 评分歌单显示与自动联动开关耦合,补齐评分歌单配置和评分快照备份分类;恢复评分时保留收藏,缓存淘汰后尝试重新解析评分歌曲,并提示评分已保存但联动失败的情况。
  • 酷狗码导入修复 ([Bug] #483):完善酷狗分享歌单的链接解析与歌曲列表获取,修复部分歌单导入失败的问题。
  • 备份记录详情面板优化:加宽桌面详情弹窗,分开展示标题与文件名,优化表格间距及长路径、SHA-256 和元数据换行,避免内容撑出面板或挤压关闭按钮,并适配移动端宽度。
  • 列表长文本滚动优化:Web 播放器及后台多类列表中,超出宽度的文件名、歌曲名、歌单名等文字在桌面端悬停时滚动,移开后恢复开头;移动端保持自动滚动,完整显示的文字保持静止。
    • 列表长文本在鼠标悬停时滚动
  • 后台滚动条样式统一:横向、纵向滚动条统一采用深色轨道与细圆角滑块,增加悬停及拖动颜色反馈,优化列表、表格和弹窗等区域的视觉效果。
  • 清空搜索返回热搜页修复:网络搜索时,点击输入框清空按钮或手动清空关键词后,取消旧搜索并清除搜索缓存,返回热搜页,避免继续停留在搜索结果列表。
  • 搜索进度显示范围修复:搜索状态条仅在网络搜索页显示,切换收藏分类或其他列表时隐藏,返回搜索后恢复当前状态,避免后台更新导致残留。
  • 暗色模式开关状态修复:修复开启后的开关底色被暗色灰色样式覆盖的问题,歌曲洗版等开关统一使用主题色区分开启与关闭状态。
  • AirPlay 原生播放恢复修复 (fix(player): restore native AirPlay after Web Audio capture #511 @pokemonred06-creator):关闭混响时保留原生模式,避免混响滑块动画在切回本机后重新启用音效或覆盖后续修改,恢复提示按指定时长显示。
  • 无需刷新恢复原生播放:关闭音效或点击恢复按钮时,通过新音频元素交接歌曲、进度、暂停状态、音量和倍速,释放旧音频图及 iOS 保活桥;保留队列和音效配置,切歌及快速开关不会套用旧进度。切换可能短暂缓冲,浏览器阻止续播时提示手动播放。
  • 音效原生模式提示与配置预览:原生播放显示醒目的状态标签,总开关显示关闭,保留全部配置但锁定编辑;明确打开总开关后按当前配置启用本机音效,投播期间锁定本机音效控件。
  • 删除用户时清理音源文件:单个或批量删除用户并勾选删除数据时,同时清理该用户的自定义音源脚本、顺序及状态文件,保留公共音源和其他用户文件。
  • 歌手与专辑详情切换及返回修复:切换标签、收藏分类或歌单时清理详情头部与悬浮栏,避免残留到其他列表;修复打开专辑后歌手详情因容器被删除而一直加载的问题;记录详情入口,返回时恢复对应的收藏歌手、收藏专辑或原歌单,避免浏览器返回事件重复处理后跳到「我的喜爱」。
  • 批量选择行高亮修复:修复收藏、搜索等歌曲列表点击「全选」后仅更新选中数量、未同步行高亮的问题;正确识别当前显示的列表,统一排行榜批量操作的刷新入口,确保全选、清空及退出批量模式时选中状态与高亮同步。
  • 播放队列去重与歌曲定位修复:统一搜索结果与默认列表的歌曲 ID 匹配规则,修复播放时自动加入默认列表的歌曲仍可重复入队的问题;「加入播放队列」遇到已有歌曲时提示并展开侧边面板,滚动定位、高亮对应歌曲;「下一首播放」将已有条目移至下一首,当前正在播放的歌曲不再重复添加。
  • 搜索页面意外跳回收藏修复 ([Bug] 搜索专辑返回问题及批量加入播放列表需求 #482):修复恢复上次播放时遗留的歌单跳转覆盖当前搜索页面的问题;收藏歌单后台更新完成后,仅在仍浏览该收藏列表时刷新内容,避免搜索过程中突然切回“我的喜爱”等列表。
  • 管理面板 WebDAV 连接测试修复 ([Bug] 管理面板的WebDav的测试连接功能异常 #474):改为分别检查已保存配置的同步目录与备份目录,避免根目录列举失败导致测试误判;逐项显示检查结果,并针对认证、权限、路径、网关、网络及证书错误提供排查建议。请求超过 10 秒自动取消,测试期间禁止重复点击;明确说明测试仅验证目录读取,不验证上传、删除权限或完整恢复能力。
  • 备份管理手机端布局优化:统一设置与恢复页间距、按钮分组和触控尺寸;本地配置备份与快照按卡片显示,下载、恢复、删除等宽排列,长路径和文件名自动换行,优化预览、任务记录、校验结果及详情弹窗的窄屏展示。
  • 后台提示样式统一:批量重试使用后台确认弹窗,取消不会提交且避免重复操作;移除管理主页连接测试、同步结果及详情异常中的浏览器原生提示框。
  • OpenList 轻量文件检查:可按已选、筛选结果或当前连接全部记录手动检查本地与云端文件元信息,显示进度、停止操作及上次检查时间;结果按连接和版本保留,不下载文件正文,也不上传或删除文件。
  • 备份任务与校验状态统一:记录页按待上传、待下载、传输中、已备份、需处理、失败及暂停展示主状态,内容校验作为独立历史标记;本地变化诊断收进详情和高级筛选,云端变化后可重新校验,记录与校验页统一类型、用户和结果筛选。
  • 备份记录本地状态修复:查询记录时检查实际文件,修复手动删除后仍显示“本地存在”的问题;打开详情重新获取状态,权限异常显示“无法检查”,不影响云端备份与内容校验记录。
  • 备份与恢复可靠性改进:统一 WebDAV 增量、ZIP 和离线导入导出的数据范围,支持恢复预览、仅补缺失或覆盖同名文件;下载暂存并校验后再替换,默认保留恢复前副本,提供恢复记录与回滚。完善 OpenList 历史版本、失败重试及 WebDAV 临时上传、成功记录和 ZIP 保留策略;WebDAV 启动恢复与本地删除同步到云端默认关闭,恢复保留本地独有文件,完成后需重启服务。同步更新中英文备份、播放、配置及接口说明。
  • 运行环境要求更新:Node.js 最低版本调整为 22.13.0,以支持 OpenList 使用的内置 SQLite 模块。
  • 搜索与凭据表单隔离 (fix(ui): isolate credential forms and prevent browser saving login on search inputs #477 @pokemonred06-creator):为搜索、登录及远程连接设置独立表单和自动填充属性,降低搜索内容被误识别为登录凭据的风险;登录成功后清空密码输入框,修复手动搜索 Enter 重复触发及列表搜索输入法组合输入时误操作。
  • VU 表盘与指针优化 (fix(ui): isolate credential forms and prevent browser saving login on search inputs #477 @pokemonred06-creator):更新各主题表盘设计、刻度映射及指针响应,调整动态参考电平,避免持续高 RMS 音频导致指针顶格。
  • 自定义目录根目录筛选:目录分类新增“根目录”选项及歌曲数量,支持单独筛选根目录直属歌曲,也可与其他目录多选。
  • Subsonic 播放失败状态与取链重试优化 (fix(subsonic): 流失败返回502、列表songCount补真实条数、取链退避重试 #470 @pyss56):取链失败时返回 HTTP 502 并保留 Subsonic 错误信息,覆盖普通播放、下载、转码及部分电台路径;对明确失效的播放链接退避后重新取链一次,探测超时保留候选链接回退,取链异常复用底层重试,避免叠加整轮重试造成长时间等待。
  • Subsonic 共享歌单与排行榜歌曲数修复:列表优先使用上游提供的歌曲总数,打开详情时补齐分页,使详情歌曲数与实际返回条目一致;完整详情缓存后,列表按当前用户的不喜欢歌曲过滤结果计算数量,避免跨用户计数污染。上游未提供总数且尚未读取详情时暂显示 0,读取详情后补齐。
  • Subsonic 歌单请求与缓存优化:移除列表刷新时逐歌单查询详情的后台请求;并发读取同一歌单复用请求,完整详情缓存十分钟并限制缓存数量;检测异常或重复分页,修正 QQ 歌单接口的重试参数传递。

pokemonred06-creator and others added 30 commits October 29, 2026 11:38
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ezel

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ial profiles

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Bumps [module-alias](https://github.com/ilearnio/module-alias) from 2.3.4 to 2.3.5.
- [Commits](https://github.com/ilearnio/module-alias/commits/v2.3.5)

---
updated-dependencies:
- dependency-name: module-alias
  dependency-version: 2.3.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [electron](https://github.com/electron/electron) from 43.8.3 to 43.8.6.
- [Release notes](https://github.com/electron/electron/releases)
- [Commits](electron/electron@v43.8.3...v43.8.6)

---
updated-dependencies:
- dependency-name: electron
  dependency-version: 43.8.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
feat(vu-meter): replace legacy dials with five premium profile designs
…tron-43.8.6

build(deps-dev): bump electron from 43.8.3 to 43.8.6
…le-alias-2.3.5

build(deps): bump module-alias from 2.3.4 to 2.3.5
- 修复歌手和专辑详情栏在切换页面后残留
- 保留歌手详情容器,解决打开专辑后歌手详情持续加载
- 返回详情来源列表,避免重复处理返回事件后跳到我的喜爱
- 修复批量全选、清空及退出时行高亮不同步
- 统一歌曲匹配规则,完善队列去重、定位及下一首播放行为
- 修复恢复播放和收藏后台更新意外覆盖搜索页面的问题
- 快照列表类型角标(我的歌单/我不喜欢)+ 下拉筛选,修复 col-id 截断

- 不喜欢快照支持回滚:dislikeDataManage.restore + DislikeManage.restoreSnapshot + 后端按 kind 分流

- 回滚后主动失效派生缓存:invalidateSubsonicPlaylistCache() / invalidateDislikeCache()

- 启动日志打印版本号、记录详情弹窗布局修复

- 排除 fork 私有 GHCR/CI 配置(docker.yml),版本号保持上游原样(无改动)

- docker-compose.yml 更新:移除弃用 version 字段、补全配置项示例(含 ADMIN_PASSWORD 覆盖默认弱口令)
Detect shared media capture on every platform, retain native restoration across reloads, and expose recovery for Control Center handoffs. Preserve current VU artwork, mobile DSP opt-in and advanced effects controls.

Add 26 focused regressions and Node 22/24 validation. Verified all 117 tests, type checking, production compilation, JavaScript syntax and diff checks.
- 后台统一备份管理:概览/本地/云端/恢复/记录与校验,重构记录筛选与手机端布局
- OpenList 备份与播放缓存:轻量文件检查、独立内容校验、历史版本与失败重试
- 服务器已有歌曲优先播放与本地歌词,补充 Web/Subsonic 播放顺序说明
- WebDAV 恢复预览、暂存校验、恢复前副本、记录与回滚
- 删除用户时清理自定义音源文件
- 备份记录本地状态实时检查,统一后台提示样式
- 同步更新中英文文档与 changelog
feat(backup): 统一备份管理、OpenList 播放来源与内容校验
…e-handoff-dev

fix(player): restore native AirPlay after Web Audio capture
- 迁移共有音源功能的新接口,保留旧实现注释,修复酷狗分享歌单导入并支持 QQ QRC 逐字歌词
- 优化聚合搜索排序与跨源去重,保留本地分页,支持按需加载、失败重试和搜索状态恢复
- 增加多源关键词联想、短期缓存、中文输入法与键盘交互,隔离用户间联想请求
- 优化后台备份详情、长文本滚动、滚动条、歌词卡片及开关样式,补充更新日志和截图
- 添加接口审计脚本及回归测试,更新前端缓存版本与构建标识

验证:npm test(260 项通过)、npx tsc --noEmit、JavaScript 语法检查、git diff --check。

Fixes #483
- 新增 Web 评分入口、分数标签与评分合集,完善后台评分及不喜欢筛选和详情
- 将不喜欢自动补分改为用户独立偏好,区分自动补分与后台补分来源
- 统一本地关联后的在线评分身份,迁移评分来源、历史及不喜欢原因
- 使用事务日志保障评分迁移与快照恢复一致性,并支持失败任务重试
- 将评分模块集中到 server/rating,补充回归测试、双语文档与更新截图

验证:376 项全量测试、20 项真实 HTTP 测试及 TypeScript 检查通过。
feat: 同步 fork 通用功能改动(自动排除 fork 私有代码)
- 修复文件已下载却提示“浏览器未启动下载”的误报
- 补齐进度查询认证,连接异常时同步失败状态
- 大文件支持四路分段下载、失败重试和单连接回退
- 仅展示已验证可用或服务器已有的单曲音质
- 修复带平台前缀的歌曲 ID 导致歌词嵌入失败
- 复用本地歌词获取流程,保留翻译、音译及用户隔离
- 补充回归测试和更新日志
Restrict automatic eviction to cache media, persist retention settings, and protect downloads and active backups.

Fixes #489
- 仪表盘数据看板: 日志活动/服务与存储/用户与设备/最近告警, 新增 /api/dashboard/overview
- 明暗主题改为设计令牌方案, 新增顶栏切换按钮
- changelog 增加 2.2.0-11 界面说明, notification.json 更新为 v2.2.0
@coderabbitai

coderabbitai Bot commented Nov 10, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 207 files, which is 57 over the limit of 150.

To get a review, reduce the PR to 150 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: f1355a17-2f81-46f1-ae62-80d1fa2f114a
Commits

Reviewing files that changed from the base of the PR and between 878e898 and f572dc8.

Files ignored due to path filters: 19

  • docs/public/showcase/charts-mobile.mp4 is excluded by !**/*.mp4
  • docs/public/showcase/console-mobile.mp4 is excluded by !**/*.mp4
  • docs/public/showcase/console.mp4 is excluded by !**/*.mp4
  • docs/public/showcase/listening-mobile.mp4 is excluded by !**/*.mp4
  • docs/public/showcase/local-library-mobile.jpg is excluded by !**/*.jpg
  • docs/public/showcase/playlists-mobile.mp4 is excluded by !**/*.mp4
  • docs/public/showcase/search-mobile.mp4 is excluded by !**/*.mp4
  • docs/public/showcase/themes-mobile.mp4 is excluded by !**/*.mp4
  • md/log/2.2.0-10.png is excluded by !**/*.png
  • md/log/2.2.0-11.png is excluded by !**/*.png
  • md/log/2.2.0-2.png is excluded by !**/*.png
  • md/log/2.2.0-3.png is excluded by !**/*.png
  • md/log/2.2.0-4.png is excluded by !**/*.png
  • md/log/2.2.0-5.png is excluded by !**/*.png
  • md/log/2.2.0-6.png is excluded by !**/*.png
  • md/log/2.2.0-7.png is excluded by !**/*.png
  • md/log/2.2.0-8.png is excluded by !**/*.png
  • md/log/2.2.0-9.png is excluded by !**/*.png
  • package-lock.json is excluded by !**/package-lock.json
Files selected for processing: 207

  • .github/workflows/player-validation.yml
  • README.md
  • README_EN.md
  • changelog.md
  • docker-compose.yml
  • docs/.vitepress/config.mts
  • docs/api/reference.md
  • docs/api/routes.md
  • docs/api/subsonic.md
  • docs/chromecast/architecture.md
  • docs/chromecast/progress.md
  • docs/chromecast/requirements.md
  • docs/components/MusicLanding.vue
  • docs/components/music-landing.css
  • docs/en/api/reference.md
  • docs/en/api/routes.md
  • docs/en/api/subsonic.md
  • docs/en/guide/backup-recovery.md
  • docs/en/guide/configuration.md
  • docs/en/guide/operations.md
  • docs/en/guide/subsonic-local-library.md
  • docs/en/guide/sync-server.md
  • docs/en/guide/web-player.md
  • docs/guide/backup-recovery.md
  • docs/guide/configuration.md
  • docs/guide/operations.md
  • docs/guide/subsonic-local-library.md
  • docs/guide/sync-server.md
  • docs/guide/web-player.md
  • docs/subsonic-local-library.md
  • docs/subsonic-status.md
  • docs/ui-audit/architecture.md
  • docs/ui-audit/backup-verification.md
  • docs/ui-audit/progress.md
  • docs/ui-audit/requirements.md
  • docs/ui-audit/verification.md
  • notice/notification.json
  • package.json
  • public/app.js
  • public/css/dashboard.css
  • public/css/tokens.css
  • public/dash.js
  • public/index.html
  • public/js/config.js
  • public/js/notification-engine.js
  • public/js/ui-utils.js
  • public/music/app.js
  • public/music/css/app.css
  • public/music/css/rating.css
  • public/music/index.html
  • public/music/js/download/download_manager.js
  • public/music/js/library/dislike_manager.js
  • public/music/js/library/leaderboard_manager.js
  • public/music/js/library/paged_music_search.js
  • public/music/js/library/rating_manager.js
  • public/music/js/library/search_requests.js
  • public/music/js/library/search_suggestions.js
  • public/music/js/library/single_song_ops.js
  • public/music/js/library/songlist_manager.js
  • public/music/js/local/customDir.js
  • public/music/js/local/local_music.js
  • public/music/js/player/airplay.js
  • public/music/js/player/playback.js
  • public/music/js/player/sound-effects.js
  • public/music/js/player/visualizer.js
  • public/music/js/ui/batch_pagination.js
  • public/music/js/ui/common_ui.js
  • public/music/js/ui/theme_manager.js
  • public/music/js/ui/ui_accessibility.js
  • public/music/js/vendor/wave.js
  • public/music/sw.js
  • public/style.css
  • public/sw.js
  • public/theme.js
  • scripts/check-docs-parity.cjs
  • src/defaultConfig.ts
  • src/index.ts
  • src/modules/dislike/dislikeDataManage.ts
  • src/modules/dislike/manage.ts
  • src/modules/dislike/match.ts
  • src/modules/dislike/snapshotDataManage.ts
  • src/modules/dislike/utils.ts
  • src/modules/list/manage.ts
  • src/modules/list/snapshotDataManage.ts
  • src/modules/utils/musicSdk/index.js
  • src/modules/utils/musicSdk/kg/leaderboard.js
  • src/modules/utils/musicSdk/kg/musicInfo.js
  • src/modules/utils/musicSdk/kg/musicSearch.js
  • src/modules/utils/musicSdk/kg/songList.js
  • src/modules/utils/musicSdk/kw/lyric.js
  • src/modules/utils/musicSdk/kw/songList.js
  • src/modules/utils/musicSdk/kw/util.js
  • src/modules/utils/musicSdk/mg/lyric.js
  • src/modules/utils/musicSdk/mg/musicInfo.js
  • src/modules/utils/musicSdk/mg/pic.js
  • src/modules/utils/musicSdk/mg/songId.js
  • src/modules/utils/musicSdk/tx/lyric.js
  • src/modules/utils/musicSdk/tx/musicSearch.js
  • src/modules/utils/musicSdk/tx/qrcDecode.js
  • src/modules/utils/musicSdk/tx/singer.js
  • src/modules/utils/musicSdk/tx/songList.js
  • src/modules/utils/musicSdk/tx/utils/crypto.js
  • src/modules/utils/musicSdk/tx/utils/index.js
  • src/modules/utils/musicSdk/versionChars.ts
  • src/modules/utils/musicSdk/wy/lyric.js
  • src/modules/utils/musicSdk/wy/singer.js
  • src/modules/utils/musicSdk/wy/songList.js
  • src/server/backup/restoreDependencies.ts
  • src/server/backup/restoreTasks.ts
  • src/server/backup/webdavRestoreTasks.ts
  • src/server/index.ts
  • src/server/integrations/subsonic.ts
  • src/server/music/audioProbe.ts
  • src/server/music/cacheCleanup.ts
  • src/server/music/customMusicManager.ts
  • src/server/music/downloadLyrics.ts
  • src/server/music/fileCache.ts
  • src/server/music/localLyrics.ts
  • src/server/music/parallelDownload.ts
  • src/server/music/subsonicLocal.ts
  • src/server/openlist/openlistBackup.ts
  • src/server/openlist/openlistBackupDb.ts
  • src/server/openlist/openlistClient.ts
  • src/server/openlist/openlistErrors.ts
  • src/server/openlist/openlistIntegrity.ts
  • src/server/openlist/openlistMetadata.ts
  • src/server/openlist/openlistRecoveryManifest.ts
  • src/server/openlist/openlistRestoreTasks.ts
  • src/server/rating/README.md
  • src/server/rating/ratingIdentityLock.ts
  • src/server/rating/ratingMigration.ts
  • src/server/rating/ratingPreferences.ts
  • src/server/rating/ratingService.ts
  • src/server/rating/ratingSnapshot.ts
  • src/server/rating/ratingValidation.ts
  • src/server/server.ts
  • src/server/sources/userApi.ts
  • src/server/sources/userSourceCleanup.ts
  • src/server/utils/dislikeCache.ts
  • src/types/app.d.ts
  • src/types/config.d.ts
  • src/types/dislike_list.d.ts
  • src/user/index.ts
  • src/utils/backupFiles.ts
  • src/utils/backupPolicy.ts
  • src/utils/configBackupSchedule.ts
  • src/utils/webdavRecovery.ts
  • src/utils/webdavState.ts
  • src/utils/webdavSync.ts
  • src/utils/webdavTransfer.ts
  • test/admin-auth-refresh.test.cjs
  • test/admin-dislike-view.test.cjs
  • test/admin-theme.test.cjs
  • test/airplay-native-handoff.test.cjs
  • test/artist-detail-navigation.test.cjs
  • test/backup-center-ui.test.cjs
  • test/backup-policy.test.ts
  • test/batch-selection-ui.test.cjs
  • test/cache-cleanup-integration.test.ts
  • test/cache-cleanup.test.ts
  • test/config-backup-schedule.test.ts
  • test/custom-dir-loading.test.cjs
  • test/custom-dir-scan.test.cjs
  • test/dislike-enrichment.test.ts
  • test/download-auth.test.cjs
  • test/download-lyrics.test.ts
  • test/download-progress.test.cjs
  • test/integration/web-rating-live.cjs
  • test/local-snapshot-backup.test.cjs
  • test/lyric-cache-identity.test.cjs
  • test/lyrics-embedding.test.cjs
  • test/no-source-recovery.test.cjs
  • test/openlist-busy-timeout.test.ts
  • test/openlist-errors.test.ts
  • test/openlist-integrity-ui-api.test.cjs
  • test/openlist-integrity.test.ts
  • test/openlist-metadata.test.ts
  • test/openlist-restore-transaction.test.ts
  • test/openlist.test.cjs
  • test/paged-music-search.test.cjs
  • test/parallel-download.test.ts
  • test/playback-progress.test.cjs
  • test/playback-queue.test.cjs
  • test/playback-routing.test.cjs
  • test/prefetch-cache.test.cjs
  • test/quality-availability.test.cjs
  • test/rating-dialog-select.test.cjs
  • test/rating-feature-coverage.test.ts
  • test/rating-link-policy.test.ts
  • test/rating-migration.test.ts
  • test/rating-preferences.test.ts
  • test/rating-recommendation-switch.test.ts
  • test/rating-snapshot.test.ts
  • test/sdk-interface-migration.test.cjs
  • test/search-suggestions.test.cjs
  • test/snapshot-imported.test.ts
  • test/snapshot-rating-wiring.test.ts
  • test/subsonic-local-playlist.test.ts
  • test/subsonic-rating-playlists.test.ts
  • test/user-source-cleanup.test.ts
  • test/vu-meter.test.cjs
  • test/web-rating-controls.test.cjs
  • test/web-rating-service.test.ts
  • test/webdav-connection-ui.test.cjs
  • test/webdav-connection.test.ts
  • test/webdav-recovery.test.ts
  • test/webdav-restore-ui.test.cjs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@XCQ0607
XCQ0607 merged commit 13865b8 into main Nov 10, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants