Repository navigation
Conversation
…delete backups When a per-user OpenList backup uses the upload-delete mode, the local cache index is purged after a verified upload, so the next playback has no local cache. To keep OpenList as the permanent cache (instead of re-downloading from source), the Subsonic 'cache-first use OpenList' switch is now auto-enabled on save. UI (app.js): warn when a backup mode is switched to upload-delete, and persist subsonic.playCacheFirstUseOpenlist=true together with the OpenList config. fileCache: the restore-from-OpenList path stays globally reachable because OpenList upload backup is itself globally triggered, keeping upload/restore symmetric. The openlist server module blobs are committed as clean UTF-8.
…小比对/listDir 分页等)以触发构建
- 歌单/不喜欢快照落盘后防抖触发云端备份(scheduleOpenlistSync),按 snapshots 类型上传 - 快照落盘后按 configBackup.enable 门控写本地副本到 data/backups/snapshots/<user>/ - 删除快照时清理对应本地副本 - 前端配置备份周期 UI(每N小时+锚点时间,显示下次/上次备份时间) - 版本号 2.1.4.2 -> 2.1.4.3
- effectiveModeFromRow 对 system/data/list 三类禁止 upload-delete,回退为 upload(即便关闭 keepLocalAfterUpload 或条目显式设为 upload-delete) - 删除分支(fs.unlinkSync)显式排除受保护类型,双保险 - 仅 cache/music 仍可按 upload-delete 不保留本地(歌曲缓存删除不影响业务) - 版本号 2.1.4.3 -> 2.1.4.4
- 移除冗余 openlist.keepLocalAfterUpload:同步模式唯一来源为 userBackups[].mode,未配置默认 upload(保留本地),仅显式 upload-delete 删本地 - upload-delete 不对 system/data/list(系统配置与歌单/不喜欢快照)生效,legacy list 入库强制 upload - 本地快照备份加时间戳(snapshot_<name>-<YYYY-MM-DD_HHmmss>[-n]),不覆盖历史;纳入 configBackup.retentionDays 保留期清理;删除快照时清理全部历史副本 - OpenList 额外保留带时间戳的系统配置时间点副本(_system/config-history/),按内容指纹去重、按保留期清理;主镜像文件名不变、不参与恢复 - 版本号 2.1.4.4 -> 2.1.4.5
- 同步模式下拉选项改为「上传后删除本地(仅歌曲/歌词)」 - 帮助文案与选择弹窗明确:仅删除下载/缓存目录中已上传的歌曲及其歌词、封面等附件并清缓存索引;系统配置、歌单与不喜欢快照、用户数据一律保留本地 - index.html 横幅与「播放缓存同时上传封面与歌词」开关描述同步补充该边界 - 版本号 2.1.4.5 -> 2.1.4.6
- dislike/snapshotDataManage 新增 updateSnapshotDir,写入 <备份路径>/<用户>/dislike/snapshot(与歌单快照区分),含历史迁移 - user/index updateAllUserSnapshotDirs 同步热迁移 dislike 快照目录 - backupPolicy scanBackupFiles 外部快照扫描覆盖 dislike 子目录 - openlistBackup 传统模式歌单+dislike 快照对所有真实用户备份,脱离 userBackups 勾选
统计卡此前基于全量记录,与下方按 folder scope 过滤的列表口径不一致,导致混合总数;现将 scope 过滤提前至统计之前并复用同一份列表。
margeConfig 合并时,若原始 config 缺失 subsonic.standalone 键且 subsonic.port>0,默认视为开启独立端口,还原旧版「端口有值即监听」语义;用户显式设为 false 时尊重其意图不被覆盖。热重载逻辑本就缺键不覆盖,不会回归。
- OpenList 同步页「歌单快照」tab 纳入 selectedData 模式下 folder_type='data' 且路径含 snapshot 的 list/dislike 记录 - 备份管理页 /api/data/snapshots 合并 list 与 dislike 快照(标记 kind),下载/删除接口支持 dislike 回退 - 前端对 dislike 快照隐藏「恢复」按钮(恢复逻辑仅适用于歌单快照)
统一数据备份(selectedData)模式下,歌单/不喜欢快照等记录的 user 被记为 _system,但路径含 users/<dirName>。 listBackups 出口按路径把 _system 记录映射回真实逻辑用户名(如 m_6f8f57->m),使 OpenList 同步页按用户筛选能正确归位,修复#1091 类问题。 仅覆盖展示层 user 字段,不改写 DB,避免破坏 openlist_local_files 的 user 一致性与唯一约束。
- package.json version 同步至 v2.1.4.10,使 docker.yml 打 tag 与前端 config.js 版本一致(此前 build 用 package.json 版本覆盖 config.js,导致 :dev 镜像内版本恒为 2.1.4.8、:v2.1.4.10 tag 从未生成)。 - 移除 docker.yml 的 cache-from/to: type=gha:仅改源码不改 Dockerfile 时 gha 缓存命中旧 builder 层,使 f208f5a 的 openlistBackup.ts(user 路径映射) 改动未进 :dev 镜像。
备份管理页「歌单快照」tab 内新增子页签「全部 / 歌单快照 / 不喜欢」,可一键只看 dislike 快照; dislike 条目加红色「不喜欢」角标,混排时也能一眼识别(此前仅隐藏回滚按钮导致无法辨认)。 纯前端改动,复用 /api/data/snapshots 已有的 kind 字段过滤,无后端变更。version -> v2.1.4.11。
下载按钮此前对所有快照无条件套用 playList_v2 转换:dislike 数据({dislikeList:[...]})的 defaultList/loveList/userList 均为 undefined,导致导出成空壳 default/love 列表,用户误以为 dislike 无歌曲信息。
现 downloadSnapshot(id,kind) 按 kind 分流:dislike 直接导出原始规则(lx_dislike_<user>_<id>.json),list 仍导出 playList_v2;按钮调用处传入 item.kind。version -> v2.1.4.12。
1) 主快照管理页每条记录显示双向类型标签(我的歌单=蓝/我不喜欢=红),在「全部」子页签下也能一眼区分; 2) OpenList 同步页歌单快照记录同样显示类型标签;查询区新增「全部类型/我的歌单/我不喜欢」下拉,按类型过滤(仅歌单快照页生效)。version -> v2.1.4.13。
1) server.ts 启动时读取 package.json 并打印「LX Music Server version: vX.Y.Z」,docker logs 可直接确认运行版本; 2) 补齐 olb-detail-table/key/val 缺失样式(此前无样式 table 挤成一字一行),修复「更多」弹窗布局;弹窗标题只显示文件名; 3) OpenList 歌单记录名称列只显示文件名(basename),hover 提示显示完整路径。version -> v2.1.4.14。
1) 备份管理页歌单快照:类型快捷标签改为「全部类型/我的歌单/我不喜欢」下拉查询;列表每条保留类型标签; 2) 不喜欢快照支持回滚:dislikeDataManage.restore + DislikeManage.restoreSnapshot + 后端 /api/data/restore-snapshot 按 kind 分流,复用 list 回滚逻辑框架; 3) 前端 restoreSnapshot(id,kind) 抽成通用回滚入口(list/dislike 共用),后续 openlist 页也可复用。version -> v2.1.4.15。
col-id 原为 inline-block + nowrap + ellipsis + max-width:fit-content,长 ID 后的类型标签(我的歌单/我不喜欢)被整体截断。改为 flex 布局:ID 文本用 col-id-text 单独省略号截断,kind-tag flex-shrink:0 固定显示;移动端同步调整。version -> v2.1.4.16。
1) subsonic 新增 invalidateSubsonicPlaylistCache():回滚后清空 playlistDetailCache / playlistRadioCache / sharedPlaylistCoverCache / leaderboardCoverCache,避免 Subsonic API 在 TTL(10min) 内返回陈旧歌单; 2) 回滚路由(/api/data/restore-snapshot)按 kind 分流后调用对应失效:list -> invalidateSubsonicPlaylistCache(),dislike -> 已有的 invalidateDislikeCache(username)。version -> v2.1.4.17。
# Conflicts: # public/js/config.js
|
Caution Review failedThe pull request is closed. Walkthrough
Merge Risk:
|
|
已重新整理提交:本 PR 现基于 |
|
本 PR 已关闭,由 #508 替代。 原因:本 PR 的 head 分支 新 PR 改为基于 |
概述
本 PR 将上游
XCQ0607/dev的最新提交合并进本 fork 的 dev,并在此基础上补入备份管理、回滚与缓存一致性增强。合并过程仅public/js/config.js一处版本号冲突,已按上游版本号对齐(v2.1.4)。主要变更
1. 备份管理页 — 歌单快照类型展示与筛选
#snapshot-kind-filter),按kind字段过滤快照。.col-id的text-overflow: ellipsis截断不可见的问题:.col-id改为 flex 布局,ID 文本单独省略号截断,kind-tag固定显示(桌面与移动端均已调整)。2. 「我不喜欢」快照支持回滚
dislikeDataManage.restore(data):从指定快照内容恢复当前 dislike 规则。DislikeManage.restoreSnapshot(name):取快照 → restore →clearClients()+setLatest()(在DislikeSnapshotDataManage中补齐clearClients/setLatest方法)。/api/data/restore-snapshot接收kind参数,按list/dislike分流调用对应恢复逻辑。3. 回滚后主动失效派生缓存(缓存一致性)
invalidateSubsonicPlaylistCache()(subsonic 模块导出):清空playlistDetailCache(原 10 分钟 TTL)、playlistRadioCache、sharedPlaylistCoverCache、leaderboardCoverCache,消除 Subsonic API 最长 10 分钟的陈旧歌单窗口。invalidateDislikeCache(username),消除「过滤不喜欢」最长 30 秒陈旧。4. 其它 UI / 可观测性优化
LX Music Server version: vX.Y.Z(读取 package.json),便于通过docker logs确认实际运行版本。.olb-detail-table/.olb-detail-key/.olb-detail-val样式,修复「更多」弹窗布局挤压;弹窗标题与名称列只显示文件名,hover 提示显示完整路径。playList_v2的 bug。版本号
config.js与package.json版本号已对齐上游v2.1.4,避免强加 fork 版本号。验证
node --check语法校验通过;后端代码经 TypeScript 编译验证。🎯 核心变更
扩展快照管理与 OpenList 备份流程,新增不喜欢快照的列表、下载、恢复和删除支持,并在恢复后清理相关缓存。配置备份支持自定义周期和计划时间,同时补充本地快照备份及 OpenList 历史配置备份。
📝 主要改动点
upload-delete保护系统配置、数据及快照记录;管理页新增记录分页签、类型筛选和详情入口。openlist.keepLocalAfterUpload配置项。OpenList 未指定模式的记录默认使用upload;配置为upload-delete时,删除范围限于符合条件的歌曲及附件。00:00。