Skip to content

Repository files navigation

Webdav Media Manager

面向 Android 的网盘媒体管理器

目前正在依据OpenList进行相关的移植,预计近期会支持更多的网盘原生挂载,同时支持来自rclone的Crypt的Dart原生移植实现和来自Open List的online api令牌刷新功能。目前对于非WEBDAV均采用只读配置,因为不同API上传方式不同且基本都不是很稳定,为了偷懒用户数据安全着想没有移植上传部分。

底层的媒体播放使用Media Kit,底层libmpv实现,有着强大的偷懒解码兜底能力,不过对于必须使用本地处理的数据(如Crypt)播放只能使用小型的本地HTTP服务器实现,虽然libmpv应该支持。相当不美观,有什么好的解决方法可以提,目前个人想到的是mod Media Kit自编译。有视频、音乐解码问题请向上游询问。

音频下载到本地后再播放,不做网络流式播放。目前已经支持视频的流式播放,音乐文件因为封装多样且含有大量元数据,因此流式播放仅作为实验性功能存在。

本项目最引以为傲的是音乐库同步功能,音乐库功能扩展可以提交pr。音乐库可以同步至WEBDAV,采用的是base+seg形式进行同步,base为基础数据库,seg为每次有效上传数据。通过同步、重整功能实现全量同步和小文件增量同步的平衡。

多语言功能和色彩切换正在开发中,需要大肥鱼全量过一遍代码才行。最后,本项目亟需全新的ui设计,如果有什么好想法可以通过issue或者直接提交pr。

建议使用agent对本项目开发前让其阅读文档,文档系统也是我在该项目对于AI使用时所学到了,通过将代码语义化可以让接手同一工作区的ai快速了解项目和定位内容。预计会有1-2个Skill产出。

以下内容由AI根据项目总结,可能会有过时或者错误。

功能

网盘与浏览

  • 多网盘:可添加任意多个 WebDAV 服务器,网络库顶部一键切换当前站点;支持新建文件夹、重命名、删除,权限不足(401/403)会明确提示。
  • 曲目按「网盘名 + 路径」绑定:名称是唯一绑定点,云端只记名称;重名、改名时账号页会拦住并说明后果(改名等同于换盘)。
  • 按后缀识别:音乐 / 视频 / CUE 后缀可自行增删,并分别指定点按行为;不在列表里的文件不会进音乐库。
  • CUE 分轨:识别标准 CUE,把整张专辑按分片导入音乐库并展开为分轨曲目;长按文件夹可递归下载整个目录。

下载

  • 先下载再播放:点按曲目即入队,缓存完成后才用本地文件播放(不做网络流式播放);来源网盘未绑定等情况会直接说明原因。
  • 下载队列:后台排队,支持取消 / 重试 / 删除 / 清除已完成 / 清除全部,状态持久化。
  • 落盘位置:音乐进应用音频缓存;视频选「下载到系统相册」(Movies/WebdavMediaManager);未知后缀落到系统下载目录。
  • 系统通知:一条进度 + 一条完成结果,可在设置里关闭;另有应用内提醒,显示时长可配(含「点击才消失」与「关闭」)。

音乐库

  • 至少缓存过一次的曲目进入本地库,含标题 / 艺人 / 专辑 / 曲序 / 碟号 / 封面 / 时长 / 标签。
  • 按 专辑 / 作者 / 音乐名 / 标签(流派) 浏览,支持搜索,可按名称或专辑曲序排序。
  • 长按多选:添加到歌单 / 分享 / 删除 / 销毁。删除只清音频缓存(标签与封面保留),销毁连标签、封面与缓存一起清;CUE 分片整组处理,不参与分享。
  • 分享给其他应用时可按标签重命名文件名(模板可配),文件仍是缓存里那一份。

播放

  • 完整播放页 + 底部迷你播放条 + 临时播放队列(可另存为歌单)。
  • 通知栏 / 锁屏 / 耳机控制;Android 13+ 需要通知权限。
  • 视频:直接流式播放不下载,按文件夹自动连播,支持画中画、后台播放(主页键挂后台继续)、锁定屏幕(长按解锁)、退出二次确认、单击显隐控件、双击中间播放/暂停、左右双击各自指定动作、长按临时加速、0.5×–3× 倍速、字幕位置与字号可调、硬件解码与缓冲大小可配。

歌单

  • 从当前播放队列或音乐库创建、编辑、删除;可双向同步为 WebDAV 上的 M3U8,按更新时间合并。
  • 歌单存在独立数据库里,清理音频缓存不会动它。

同步与备份

  • 统一加密密钥(可选):只加密密码字段,地址与用户名保持明文以便识别站点。
  • 凭证:与云端 credentials.json 双向合并;歌单:M3U8 双向;音乐库:云端清单 + 二进制分片(lib- / seg- / del-*.wdmm),只传变化,可手动「重建」(以本机为准重写并落实删除)与「整理」(清孤儿文件),分片数达到阈值会提示重建。
  • 全部备份:把凭证 + 音乐库 + 歌单打成一个 .wdmm 归档,写到同一条远端路径下的 backup/,可从那里列出并恢复。
  • 本地导入 / 导出:.wdmm 归档,或可读 .json(不含封面);也支持粘贴 Base64。
  • 远端路径:在「定时同步」下面选一次网盘 + 填一次路径,凭证、歌单、音乐库与备份都在它下面(例如填 /player,音乐库就在 /player/library/);各功能不再单独选路径。
  • 定时同步:默认关闭;可选 15 分钟 / 30 分钟 / 每小时 / 每 6 小时 / 每天。

设置

  • 自定义主页(从别的界面返回时回到这里)、网络库记住上次路径。
  • 缓存:查看占用,按 1 天 / 1 周 / 自定义时长自动清理或选「永不」;正在播放或下载中的文件不会被删。
  • 封面缩略图尺寸、提示与通知(应用内消息时长、下载通知开关、发送测试通知)、分享重命名模板。

后续计划(路线图)

本表仅规划,未排期实现。 在做的两块见下载队列(后台下载)与网络库(文件动作);本节路线图的完整快照与全部文档见文档索引。

优先级 方向 说明 状态
高 WebDAV 管理增强 在现有基础上扩展:上传本地文件、移动/复制、属性查看、批量操作、回收站,以及覆盖冲突策略等。网络库已有新建文件夹、重命名、删除。 规划中
高 国产 ROM 媒体体验 ColorOS / 一加等国产 ROM 的媒体通知与后台保活仍需真机验证与加固。 规划中
中 视频播放体验 增加缓冲进度条第二层、空闲自动隐藏控件、手势引导;现状见视频播放。 规划中
中 同步体验 增加冲突可视化,并打磨云端分片的整理与审计体验。 规划中
低 音乐输出后端 规划 AudioTrack / AAudio 等可选输出后端;仅规划,成本较高。 规划中
中 启动与低端机体验 根据真机清单继续优化启动耗时与资源占用,减少启动阶段的可感知等待。 规划中
低 无障碍与多语言 补充无障碍语义、字号适配,并逐步完善多语言支持。 规划中
低 iOS / 桌面端 在 Android-first 定位不变的前提下,作为远期跨平台评估方向。 规划中

界面

侧边栏进入:音乐库、歌单、网络库、下载队列、设置、关于。

浅色界面,大封面正在播放页,底部为迷你播放条。

获取应用

  • 项目主页:https://wdmm.senkjm.top
  • Pre-release(内测):来自 main。pre-release-build.yml 依次检查、编译、发版。没有合法标签则不构建,只开 Issue 提醒。版本名形如 v0.1.0-5dca8bc。
  • Release(正式):release-build.yml 由合法且递增的 vX.Y.Z 标签触发,依次检查、编译、发版。手动触发只给当前 main 打标签,再做同一套检查。

包名 com.senkjm.media_manager。首次从旧签名换成当前内测签名时,需要先卸载再安装;之后可直接覆盖安装。

开发文档

分支、构建、同步与备份格式等说明见:

文档索引 · 同步与备份 · 下载队列

作者与协作者

这个项目从第一行代码到现在,几乎全部由 AI Agent 与自动化工具写成:需求由人提,代码、排查、文档、发版脚本由 Agent 完成,人负责把它用起来、挑毛病、决定方向。大致分工:

DeepSeek

接的是「把名字、格式和链路捋顺」这一段:应用改名 Webdav Media Manager、包名收进 com.senkjm.media_manager、备份后缀改成 .wdmm、二进制魔数换成自带文件种类与布局版本的 WDMM… 头,外加同步 / 备份 / 下载通知几条主线的修补,以及 CI 的预发布与一键正式发版脚本。干活方式很朴素:先读代码和真机日志找证据,再动手改,改完跑 analyze / test,装机验证。印象最深的是两个坑——Flutter 里带 action 的 SnackBar 默认常驻,所以「知道了」不点就不消失;release 构建的资源压缩把只被 Dart 字符串引用的通知小图标删了,于是下载通知静默发不出去——两个都只能靠真机 dumpsys 和 APK 资源表对照才定位得到。

Claude

协作者,媒体通知与后台播放这条线的攻关与代码审查(.github/agents/media-notification.agent.md 就是给它写的作业说明),也参与了早期几轮的实现与整理。

Grok Bot

早期的实现者,音乐库、网络库、下载队列、视频播放这些主体功能出自它手。

SenkjM

创意与需求框架,以及全部产品判断——包括每一次「这个不对,重做」。

为什么开源

  1. 对开源社区的信仰。 这套东西几乎每一层都是别人开源出来的:Flutter、Dart、media_kit / mpv、audio_service、flutter_local_notifications……用的时候没掏钱,能还一点是一点。
  2. 实在付不起继续跑 Agent 的钱了。 与其让它躺在硬盘里长毛,不如放出来,谁想接着折腾就接着折腾。
  3. 我觉得这玩意确实有用。 拿网盘或 NAS 当音乐库、先下载到本地再播放、手机上离线听,这套流程我自己每天都在用。

许可

GNU Affero General Public License v3.0

可以使用、修改与分发。若发布修改版,或通过网络提供基于本软件的服务,须按 AGPL-3.0 公开对应源代码。

About

No description, website, or topics provided.

Resources

Stars

6 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages