diff --git a/DEPLOY.md b/DEPLOY.md index 1b5041b..f41e0ef 100644 --- a/DEPLOY.md +++ b/DEPLOY.md @@ -47,8 +47,8 @@ guide to switching back to the official build once the upstream fix lands. ./build-ytdlp.sh docker buildx build --platform linux/amd64 \ - --build-arg VERSION=1.27 \ - -t 192.168.2.212:3000/tigeren/metube:1.27 \ + --build-arg VERSION=1.29 \ + -t 192.168.2.212:3000/tigeren/metube:1.29 \ --push . ``` diff --git a/LIBRARY_ORGANIZE_DESIGN.md b/LIBRARY_ORGANIZE_DESIGN.md index 54f25c8..00615e2 100644 --- a/LIBRARY_ORGANIZE_DESIGN.md +++ b/LIBRARY_ORGANIZE_DESIGN.md @@ -112,3 +112,72 @@ - 本文档保存为仓库根的 `LIBRARY_ORGANIZE_DESIGN.md`(批准后开始实现时一并提交)。 - 全部代码改动 + 本地容器验证。 + +## 多根目录支持(多文件夹挂载) + +> 以下为在既有单根设计基础上的扩展,不改变既有部分;实现时与上一节内容合并生效。 + +### 目标 + +- 媒体库在 UI 上**仍只有一个入口**(侧边栏"媒体库"nav 项),不按根目录拆分多个入口。 +- Docker 可以挂载多个文件夹(多个独立目录/卷),它们都属于同一个媒体库范围。 +- 侧边栏按根目录**分组展示**:每个 root 一个可折叠的顶级分组,组内保持现有扁平列表(显示根内相对路径);不引入多级树形控件。 + +### 配置 + +- 新增 `LIBRARY_DIRS`(逗号分隔的容器内绝对路径列表),默认 `%%LIBRARY_DIR`(沿用 Config 的 `%%` 插值)。 + - 只设置 `LIBRARY_DIR` 时行为完全不变(单根、`''` = 库根)。 + - 解析后列表为空 → 功能关闭:API 400 + UI 隐藏入口。 +- 每个根目录有一个 **label**(默认取容器内路径的 basename,如 `/media/actor-a` → `actor-a`): + - 必须匹配 `[A-Za-z0-9_-]+`;启动时校验,非法 label 直接报错。 + - label 重复时按配置顺序追加 `-2`、`-3`(确定性去重)。 + - 与 API 保留词(`folders`、`files`、`organize`、`delete`、`move`、`thumbnail`)冲突时同样加后缀,避免与动态端点/静态前缀混淆。 + +docker-compose 示例: + +```yaml +volumes: + - /mnt/actor-a:/media/actor-a + - /mnt/actor-b:/media/actor-b +environment: + - LIBRARY_DIRS=/media/actor-a,/media/actor-b +``` + +### 文件夹命名空间(分组展示) + +- 每个文件夹条目含三个字段:`label`(所属 root)、`name`(根内相对路径,`''` 即该 root 顶级)、`path`(完整库内路径 = `label/name`,供所有 API 使用)。label 仅存在于 API 路径,不重复显示在文件夹名上。 +- 侧边栏"媒体库文件夹"列表:每个 root 一个**分组头**(label + 该 root 视频总数 + 折叠箭头),点击箭头展开/折叠,点击分组头本身 = 选中该 root 顶级(`path='