对 Unlock Music 使用 React 重写(um-react)
Go to file
2023-05-23 00:32:41 +01:00
.husky chore: add lint-staged & husky 2023-05-18 00:39:50 +01:00
.vscode chore: added vscode extension recommendation 2023-05-21 14:32:18 +01:00
public feat: get pwa working 2023-05-22 00:29:27 +01:00
src refactor: avoid bundling parakeet both in worker and main js 2023-05-23 00:04:06 +01:00
.editorconfig chore: apply indentation rule for cjs/mjs as well 2023-05-16 22:50:03 +01:00
.env refactor: make console log less verbose when not needed 2023-05-22 00:00:35 +01:00
.eslintignore chore: configure eslint rules 2023-05-18 00:03:55 +01:00
.eslintrc.cjs chore: configure eslint rules 2023-05-18 00:03:55 +01:00
.gitignore test: get coverage work 2023-05-16 22:47:47 +01:00
.npmrc chore: rename dev to start, let pnpm use 18.16 2023-05-07 21:31:46 +01:00
.prettierignore chore: configure and format file 2023-05-15 21:04:45 +01:00
index.html feat: get pwa working 2023-05-22 00:29:27 +01:00
LICENSE initial commit 2023-05-07 20:11:16 +01:00
package.json chore: upgrade sdk 2023-05-22 23:55:47 +01:00
pnpm-lock.yaml chore: upgrade sdk 2023-05-22 23:55:47 +01:00
README.MD docs: notes for submit issues 2023-05-23 00:32:41 +01:00
tsconfig.json chore: fix types for build & test 2023-05-18 00:03:30 +01:00
tsconfig.node.json test: working test with TypeScript + vite (using vitest) 2023-05-17 01:46:20 +01:00
tsconfig.prod.json chore: fix types for build & test 2023-05-18 00:03:30 +01:00
vite.config.ts refactor: avoid bundling parakeet both in worker and main js 2023-05-23 00:04:06 +01:00
vitest.config.ts test: working test with TypeScript + vite (using vitest) 2023-05-17 01:46:20 +01:00

Unlock Music 音乐解锁 (React)

  • 在浏览器中解锁加密的音乐文件。 Unlock encrypted music file in the browser.
  • Unlock Music 项目是以学习和技术研究的初衷创建的,修改、再分发时请遵循授权协议
  • Unlock Music 的 CLI 版本可以在 unlock-music/cli 找到,大批量转换建议使用 CLI 版本。
  • 我们新建了 Telegram 群组 @unlock_music_chat ,欢迎加入!
  • CI 自动构建已经部署,可以在 UM-Packages 下载 目前还没有自动构建

支持的格式

  • QQ 音乐 QMCv1 (.qmc0/.qmc2/.qmc3/.qmcflac/.qmcogg/.tkm)
  • QQ 音乐 QMCv2 PC 端 (.mflac/.mgg/.mflac0/.mgg1/.mggl)
  • 网易云音乐 (.ncm)
  • 虾米音乐 (.xm)
  • 酷我音乐 (.kwm)
  • 酷狗音乐 (.kgm/.vpr)
  • 喜马拉雅 Android 端 (.x2m/.x3m)
  • 咪咕音乐格式 (.mg3d)
  • QQ 音乐海外版JOOX Music (.ofl_en)

不支持的格式?请提交样本(加密文件)与客户端信息(或一并上传其安装包)到仓库的问题追踪区。如果文件太大,请上传到不需要登入下载的网盘,如 mega.nzOneDrive 等。

如果遇到解密出错的情况,请一并携带错误信息并简单描述错误的重现过程。

开发相关

安装依赖

  • 安装 Node v16.17 或更高,推荐当前最新的 Node LTS 版本。
  • 安装/激活 pnpmcorepack prepare pnpm@latest --activate 1
  • 安装软件依赖:pnpm i --frozen-lockfile

本地运行

⚠️ 先完成安装依赖部分,然后继续。

pnpm start

然后根据提示打开项目所在页面即可。

构建生产版本

⚠️ 先完成安装依赖部分,然后继续。

pnpm build

如果需要预览构建版本,运行 pnpm preview 然后打开项目所在页面即可。

架构

  • 浏览器主线程: 渲染界面,处理 UI 更新
  • Web Worker: 负责计算方面的内容,如内容解密。

数据传输: 生成 blob url (URL.createObjectURL) 然后透过 postMessage 传递给线程,线程利用 fetch API 来获取文件信息。

基于 libparakeet SDK 开发

libparakeet-js 编译目前需要 Linux 环境,请参考仓库说明

该文档将假设这两个项目被放置在同级的目录下:

~/Projects/um-projects
    /um-react
    /libparakeet-js

若为不同目录,你需要调整 LIB_PARAKEET_JS_DIR 环境变量到仓库目录,然后再启动 vite 项目。

初次构建

  • 进入上层目录 cd ..
  • 克隆 libparakeet-js 仓库 (目前需要 Linux 环境, Windows 下推荐使用 WSL2)
    • git clone --recurse-submodules https://github.com/parakeet-rs/libparakeet-js.git
  • 进入目录 cd libparakeet-js
  • 如果需要更新 submodule:
    • git submodule update --init --recursive
  • 运行 ./build.sh -j 4 进行编译
  • 编译 js-sdk:
    • 进入 npm 目录: cd npm
    • 安装依赖: pnpm i --frozen-lockfile
    • 构建: pnpm build

做出更改

做出更改后,参考上面的内容进行重新编译

应用 SDK 更改

将构建好的 SDK 直接嵌入到当前前端项目:

pnpm link ../libparakeet-js/npm

※ 建立 PR 时,请先提交 SDK PR 并确保你的更改已合并。

贡献代码

欢迎贡献代码。请确保:

  • 单元测试的覆盖率不低于主分支的覆盖率;
  • 提交前请使用 Prettier 对代码进行格式化;
  • 提交前请确保 ESLint 不会报告 warning / error

满足上述条件后发起 Pull Request仓库管理员审阅后将合并到主分支。

TODO

  • #6 文件拖放 (利用 react-dropzone?)
  • 各类算法 追踪 crypto 标签
  • #7 简易元数据编辑器
  • ~#8 添加单元测试~ 框架加上了,以后慢慢添加更多测试即可。
  • ~#2 解密内容探测 (解密过程)~