Skip to content

V2.0.2 - #349

Merged
XCQ0607 merged 30 commits into
mainfrom
dev
Sep 8, 2026
Merged

V2.0.2#349
XCQ0607 merged 30 commits into
mainfrom
dev

Conversation

@XCQ0607

@XCQ0607 XCQ0607 commented Sep 8, 2026

Copy link
Copy Markdown
Owner

更新V2.0.2

🎯 核心变更

本次更新至 V2.0.2,重点增强 Subsonic 收藏同步、在线解析、排行榜和播放缓存能力。配置文件默认持久化至 data/config.js,并支持旧配置自动迁移。

📝 主要改动点

  • 增加 Subsonic 歌曲、专辑和歌手的收藏、取消收藏及状态同步。
  • 增加在线歌曲解析、元数据缓存和重启后缓存恢复。
  • 增加播放缓存配置、本地缓存优先播放、缓存去重和后台缓存任务控制。
  • 增加公开排行榜及多平台排行榜来源配置。
  • 重构专辑封面代理,增加内存缓存、TTL、容量限制、重试和并发控制。
  • 优化歌手头像和专辑封面获取,并持久化缺失的封面信息。
  • 修复播放列表回退、封面 URL、歌曲命名、本地音乐类型和文件管理导航问题。
  • 增强非字符串 songmid 的兼容性,避免调用 includes 时发生异常。
  • 更新前端配置界面,支持排行榜、搜索平台和播放缓存标签选择。
  • 将配置默认路径调整为 data/config.js,并支持旧版根目录 config.js 自动迁移。
  • 更新文档、版本号、更新日志、通知内容和构建配置。

⚠️ 影响与注意事项

  • 配置文件路径从根目录 config.js 调整为 data/config.js。部署时应持久化挂载 data 目录。
  • 显式设置 CONFIG_PATH 时,该路径具有最高优先级。
  • 新增环境变量:SUBSONIC_PUBLIC_LEADERBOARDSSUBSONIC_LEADERBOARD_SOURCESUBSONIC_CACHE_ON_PLAYSUBSONIC_PLAY_CACHE_FIRST
  • subsonic.playCacheFirst 默认启用,可能改变播放时的文件来源和缓存行为。

pyss56 and others added 29 commits September 6, 2026 16:24
…sonic to github-dev

Add Subsonic endpoints star and unstar, reusing new handleStar. Songs are added/removed to the My-Favorites (love) list and persisted via createSnapshot. Song-only; album/artist starring skipped because github-dev lacks the meta subsystem. Fixes the previous 'Method not found: star' error.
…b-dev)

Add resolveMusicById (tx/wy/kg/mg) and resolveSongMeta. handleStar now resolves any song id via local lists first, then the online music source, so songs not yet in any list can be starred. Online-resolved songs are added to the love list with listId 'online'.
…ithub-dev)

Port getUserMetaFilePath/getUserSubsonicMeta/saveUserSubsonicMeta. handleStar now stars albums (alb_*) and artists (art_*) by storing starred sets in subsonic-meta.json. getStarred/getStarred2 now filter library albums/artists by the actual starred sets (correct Subsonic semantics; browsing stays via getArtists/getAlbumList2).
feat(subsonic): 新增红心收藏/取消收藏(star/unstar)功能并持久化
…338)

- Update changelog.md with v2.0.2 release notes
- Feature: Subsonic star/unstar persistence and bidirectional sync (@pyss56)
- Fix: Subsonic starred song status reflection and getStarred list refinement
…ta loss

- Load disk cache on the read path (findMusicById) instead of only on
  write, so a restarted server can recover cached song metadata instead
  of falling back to Unknown.
- Write cache synchronously and atomically (temp file + rename) per new
  entry, replacing the 2s debounced async write that lost data on fast
  or hard restarts.
- Persist client-param fallback results (e.g. kw streams) so they also
  survive restarts.
- Add kw/bd branches to resolveMusicById for online metadata fallback.
- Add subsonic.cacheOnPlay config (default false) with a web UI toggle in
  index.html; when enabled, Subsonic playback triggers server-side
  downloadAndCache into the user's cache directory, skipping already-cached.
- Wire the option through defaultConfig, config types and server config.
- Add a download dedup guard in fileCache so repeated Subsonic stream
  requests for the same track do not trigger duplicate downloads.
… PR merge conflict

buildHash is auto-generated at build time (scripts/update-build-hash.js), so it
should not diverge from the base branch in a PR. Reset it to upstream/dev's value
to keep the file conflict-free on merge.
- feat: 新增 Subsonic 播放缓存能力 (#339),支持 `subsonic.cacheOnPlay` 自动落盘与优先本地缓存读取
- feat: 新增 Abort 流式响应调度,在客户端快速切歌时终止后台并发缓存任务,防服务器资源耗尽
- feat: 实现红心收藏/取消收藏与持久化联动 (#338 @pyss56),支持单曲、专辑、歌手收藏实时写入 `love` 歌单
- feat: 建立 `subsonic-meta.json` 扩展元数据,打通音流等客户端与 Web 原生媒体库双向收藏联动
- feat: 优化 `onlineSongCache` 机制,实现磁盘文件防抖原子持久化,彻底解决重启元数据丢失问题
- fix: 修复 `getStarred` 接口精准剥离自定义歌单,严格镜像服务端的 `love` 列表
- fix: 全局联动透传红心状态,重构 `musicToSongFlat/Xml` 及十余个接口,完美实时回显 `starred` 标记
- fix: 修复收藏状态的零延迟同步,点按红心时不仅落盘同时瞬间同步内存态
 新增 Subsonic 播放缓存能力(subsonic.cacheOnPlay)
- fix(filemanager): 修复快捷栏按钮无法准确返回自定义管理后台的问题
  - 引入 `/js/config.js` 动态注入服务端运行态配置到 `window.CONFIG`
  - 新增 `goToAdmin()` 路由函数,动态获取 `admin.path`(默认兜底 `/admin`)实现精准跳转
  - 将「返回主页」按钮文案优化为「返回后台」,并绑定点击拦截与动态导航事件
- feat(filemanager): 引入 elFinder Material Design 现代主题与视觉优化
  - 集成 `@3.0.0` Material Theme 样式库,升级工具栏图标、文件列表与右键菜单交互
  - 移除硬编码旧版工具栏底色覆盖,消除与整体现代暗色布局的反差
- 补充 SETTINGS_UI_MAP 中 serverCacheNamingPattern 字段的 normalize 白名单支持
…umCoverUrl)

Re-apply the cover fix from cb52a0e: emit real QQ cover URLs for
home album lists / genre playlists, and let handleGetCoverArt resolve
alb_<source>_<id> placeholders via buildAlbumCoverUrl.

- subsonic.ts: add buildAlbumCoverUrl (tx source), use it in getAlbumList
  and in handleGetCoverArt's alb_ branch
- discovery.ts: fall back to real QQ cover URL for genre playlists
- 修复了在关闭“播放搜索/歌单歌曲时切换歌单”设置的情况下,点击播放单曲时,界面上的播放队列依然错误显示为整个搜索列表/歌单的问题。
- 修正了回退默认试听列表时的逻辑,现在会自动刷新界面显示,并精准定位新加入歌曲的真实位置,不再强制将播放索引置为 0。
- 新增了自动滚动跟随机制,确保在列表回退后,视线能立即聚焦到当前播放的歌曲。
…xy module

- Move cover cache, concurrency semaphore and retry logic out of subsonic.ts into src/server/coverProxy.ts (exported proxyCoverImage)

- Clean up leftover commented debug logs in handleGetCoverArt

- Keep album cover URL building (buildAlbumCoverUrl) and getCoverArt routing in subsonic.ts

- server.ts: limit concurrent album-cover fetching to avoid CDN rate limiting
fix(subsonic): 修复首页/推荐专辑封面显示并抽取封面代理模块
- 统一将默认配置路径重定向至持久化卷 data/config.js,解决 Docker 重建后配置丢失问题
- 启动时自动从根目录旧 config.js 迁移初始化,实现新老版本无感平滑升级
- 简化 WebDAV 备份与还原流程,天然覆盖数据卷内 config.js
- 同步更新 README、说明文档及发布日志
…ylists (lb_)

Surface QQ Music 鎺掕姒?姒滃崟 as read-only playlists prefixed with lb_ that
appear in the all-playlists view without being added to the user own
playlists. Adds getLeaderboardPlaylists and read-only guards.
- **功能**: 在 Subsonic 协议中将各平台(如 QQ 音乐等)的在线排行榜暴露为只读虚拟歌单,歌单统一归属于虚拟用户 `lxserver` 的公开歌单中。
- **配置**: 在系统设置中新增独立的“开启公开排行榜映射”多平台公开开关,以及“排行榜音源平台”单选配置,支持通过界面配置切换不同平台的榜单数据。
- **修复**: 获取排行榜时缓存规范化后的歌曲数据,以支持客户端将榜单歌曲添加到用户自身歌单中;修复因未传递 username 导致已收藏榜单歌曲红心状态显示错误的问题。
feat(subsonic): expose QQ Music leaderboards as read-only virtual playlists (lb_)
@coderabbitai

coderabbitai Bot commented Sep 8, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 5833e2cd-4abe-4d36-af59-3bf113da5c99

📥 Commits

Reviewing files that changed from the base of the PR and between 5c220b9 and 0bb781a.

⛔ Files ignored due to path filters (3)
  • md/log/2.0.2-1.png is excluded by !**/*.png
  • md/log/2.0.2-2.png is excluded by !**/*.png
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (34)
  • Dockerfile
  • README.md
  • README_EN.md
  • changelog.md
  • config.js
  • docs/en/guide/configuration.md
  • docs/en/guide/sync-server.md
  • docs/guide/configuration.md
  • docs/guide/sync-server.md
  • md/lxserver.md
  • md/lxserver_EN.md
  • notice/notification.json
  • package.json
  • public/app.js
  • public/filemanager.html
  • public/index.html
  • public/js/config.js
  • public/music/app.js
  • public/music/js/customDir.js
  • public/music/js/local_music.js
  • public/style.css
  • src/constants.ts
  • src/defaultConfig.ts
  • src/index.ts
  • src/modules/utils/request.js
  • src/server/coverProxy.ts
  • src/server/fileCache.ts
  • src/server/server.ts
  • src/server/subsonic.ts
  • src/server/utils/discovery.ts
  • src/server/utils/recommendAlbums.ts
  • src/types/app.d.ts
  • src/types/config.d.ts
  • src/utils/webdavSync.ts

📝 Walkthrough

Walkthrough

本次变更将配置持久化路径统一为 data/config.js,增加旧配置迁移和 WebDAV 适配,并扩展 Subsonic 排行榜、收藏、在线解析、播放缓存和封面代理能力。同时更新管理界面、文件管理器、版本信息及多个前端兼容性修复。

Changes

配置路径与环境变量

Layer / File(s) Summary
配置迁移与运行时路径
src/index.ts, src/server/server.ts, src/utils/webdavSync.ts, src/types/*
活动配置默认使用 data/config.js。启动时支持旧根目录配置迁移。WebDAV、热重载、配置读写和类型定义改用活动配置路径。
Subsonic 配置项
src/defaultConfig.ts, src/constants.ts, config.js, src/server/server.ts
新增公开排行榜、排行榜音源、播放缓存和优先缓存配置,并支持环境变量和 API 保存。
文档与发布信息
README.md, README_EN.md, docs/**/*, Dockerfile, changelog.md, package.json, notice/notification.json, md/*
文档、Docker 示例、版本号、更新日志和版本通知更新为 v2.0.2。

Subsonic 配置界面

Layer / File(s) Summary
排行榜与搜索平台选择器
public/index.html, public/app.js, public/style.css
新增排行榜开关、音源单选标签、搜索平台多选标签和配置回显逻辑。
播放缓存设置
public/index.html, public/app.js
新增播放时缓存和优先使用本地缓存的开关,并写入配置提交对象。

Subsonic 核心流程

Layer / File(s) Summary
收藏与星标同步
src/server/subsonic.ts, src/server/server.ts
新增 starunstar 处理。歌曲收藏与 love 列表同步。歌手和专辑收藏写入 subsonic-meta.json,并与原生媒体库同步。
公开排行榜
src/server/subsonic.ts
新增只读虚拟播放列表。排行榜来源受支持平台限制。虚拟播放列表禁止修改和删除。
在线解析与播放缓存
src/server/subsonic.ts, src/server/fileCache.ts
新增多音源歌曲解析、在线元数据持久化、本地缓存优先播放、后台缓存和同歌曲下载去重。
歌曲与收藏状态输出
src/server/subsonic.ts
歌曲、歌手和专辑响应增加用户相关的 starred 状态。推荐结果增加缓存和失败回退。

封面与媒体处理

Layer / File(s) Summary
封面代理
src/server/coverProxy.ts, src/server/subsonic.ts
新增带 TTL、容量限制、并发控制、重试和过期缓存回退的封面代理。
媒体元数据补全
src/server/server.ts, src/server/utils/discovery.ts, src/server/utils/recommendAlbums.ts
收藏歌手和专辑缺少图片时执行共享拉取并持久化。推荐接口增加重试。封面回退改用可解析的 CDN 地址或标准 ID。

前端修复与发布

Layer / File(s) Summary
文件管理器导航与主题
public/filemanager.html
引入 Material 主题。返回链接根据 admin.path 跳转后台。
播放队列与缓存命名
public/music/app.js
播放列表回退后按当前歌曲重新定位队列。缓存命名模式支持更多格式。
songmid 类型兼容
public/music/js/customDir.js, public/music/js/local_music.js
调用 includes 前将 songmid 转为字符串,避免非字符串值导致异常。

Estimated code review effort: 5 (Critical) | ~90 minutes

Severity of issue fixed: Low

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

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

Comment @coderabbitai help to get the list of available commands.

@XCQ0607
XCQ0607 merged commit cecc5d0 into main Sep 8, 2026
2 of 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