From 1cfbce81d494772f1db3e7b706e16c00ee01c360 Mon Sep 17 00:00:00 2001 From: Jixun Date: Sat, 26 Nov 2022 23:26:38 +0000 Subject: [PATCH] chore: reformat all files with prettier --- .drone.yml | 10 +- .gitlab-ci.yml | 5 +- .gitlab/ISSUE_TEMPLATE/bug-report.md | 73 ++++++----- .gitlab/ISSUE_TEMPLATE/new-feature.md | 48 ++++---- .prettierignore | 4 + README.md | 169 +++++++++++++------------- auto-imports.d.ts | 6 +- babel.config.js | 18 +-- components.d.ts | 42 +++---- index.html | 33 ++--- jest.config.js | 14 +-- make-extension.js | 50 ++++---- package.json | 4 - postcss.config.js | 6 +- src/App.vue | 33 ++--- src/__test__/setup_jest.js | 2 +- src/component/ConfigDialog.vue | 33 +---- src/component/EditDialog.vue | 46 ++----- src/component/FileSelector.vue | 24 +--- src/component/PreviewTable.vue | 16 +-- src/decrypt/kgm.ts | 6 +- src/decrypt/kgm_wasm.ts | 5 +- src/decrypt/kwm.ts | 6 +- src/decrypt/mg3d.ts | 70 +++++------ src/decrypt/ncm.ts | 39 ++---- src/decrypt/ncmcache.ts | 6 +- src/decrypt/qmc.ts | 20 +-- src/decrypt/qmc_key.ts | 11 +- src/decrypt/qmc_wasm.ts | 12 +- src/decrypt/qmccache.ts | 6 +- src/decrypt/raw.ts | 6 +- src/decrypt/utils.ts | 14 ++- src/decrypt/xm.ts | 2 +- src/extension/popup.html | 19 ++- src/ixarea-stats.js | 9 +- src/scss/_dark-mode.scss | 121 +++++++++--------- src/scss/_element-ui-overrite.scss | 26 ++-- src/scss/_gaps.scss | 40 ++++-- src/scss/_normal.scss | 10 +- src/scss/_utility.scss | 33 +++-- src/scss/_variables.scss | 45 ++++--- src/scss/unlock-music.scss | 19 ++- src/utils/qm_meta.ts | 3 +- src/view/Home.vue | 84 +++---------- tsconfig.json | 28 +---- vue.config.js | 74 +++++------ 46 files changed, 580 insertions(+), 770 deletions(-) create mode 100644 .prettierignore diff --git a/.drone.yml b/.drone.yml index de3375d..dd9059e 100644 --- a/.drone.yml +++ b/.drone.yml @@ -20,7 +20,7 @@ steps: - mv *.zip sha256sum.txt upload/ - name: upload - image: "plugins/s3" + image: 'plugins/s3' settings: path_style: true endpoint: @@ -31,7 +31,7 @@ steps: from_secret: S3_SECRET_KEY bucket: from_secret: S3_BUCKET - region: "auto" - source: "upload/*" - strip_prefix: "upload/" - target: "${DRONE_REPO}/${DRONE_BUILD_NUMBER}/" + region: 'auto' + source: 'upload/*' + strip_prefix: 'upload/' + target: '${DRONE_REPO}/${DRONE_BUILD_NUMBER}/' diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 44670b2..4bc091e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,10 +3,9 @@ cache: paths: - node_modules/ -stages: +stages: - build - build-job: stage: build script: | @@ -37,7 +36,7 @@ build-job: sha256sum *.tar.gz *.zip > sha256sum.txt artifacts: - name: "$CI_JOB_NAME" + name: '$CI_JOB_NAME' paths: - legacy.zip - legacy.tar.gz diff --git a/.gitlab/ISSUE_TEMPLATE/bug-report.md b/.gitlab/ISSUE_TEMPLATE/bug-report.md index 8181d6a..872b73d 100644 --- a/.gitlab/ISSUE_TEMPLATE/bug-report.md +++ b/.gitlab/ISSUE_TEMPLATE/bug-report.md @@ -1,39 +1,34 @@ ---- -name: Bug报告 -about: 报告Bug以帮助改进程序 -title: '' -labels: bug -assignees: '' - ---- - -* 请按照此模板填写,否则可能立即被关闭 - -- [x] 我确认已经搜索过Issue不存并确认相同的Issue -- [x] 我有证据表明这是程序导致的问题(如不确认,可以在[Discussions](https://github.com/ix64/unlock-music/discussions)内提出) - - -**Bug描述** - -简要地复述你遇到的Bug - -**复现方法** - -描述复现方法,必要时请提供样本文件 - -**程序截图或者Console报错信息** - -如果可以请提供二者之一 - - -**环境信息:** - - - 操作系统和浏览器: - - 程序版本: - - 获取音乐文件所使用的客户端及其版本信息: - - -**附加信息** - -其他能够帮助确认问题的信息 - +--- +name: Bug报告 +about: 报告Bug以帮助改进程序 +title: '' +labels: bug +assignees: '' +--- + +- 请按照此模板填写,否则可能立即被关闭 + +* [x] 我确认已经搜索过 Issue 不存并确认相同的 Issue +* [x] 我有证据表明这是程序导致的问题(如不确认,可以在[Discussions](https://github.com/ix64/unlock-music/discussions)内提出) + +**Bug 描述** + +简要地复述你遇到的 Bug + +**复现方法** + +描述复现方法,必要时请提供样本文件 + +**程序截图或者 Console 报错信息** + +如果可以请提供二者之一 + +**环境信息:** + +- 操作系统和浏览器: +- 程序版本: +- 获取音乐文件所使用的客户端及其版本信息: + +**附加信息** + +其他能够帮助确认问题的信息 diff --git a/.gitlab/ISSUE_TEMPLATE/new-feature.md b/.gitlab/ISSUE_TEMPLATE/new-feature.md index 8d05080..caa8baf 100644 --- a/.gitlab/ISSUE_TEMPLATE/new-feature.md +++ b/.gitlab/ISSUE_TEMPLATE/new-feature.md @@ -1,26 +1,22 @@ ---- -name: 新功能 -about: 对于程序新的想法或建议 -title: '' -labels: enhancement -assignees: '' - ---- - -- 请按照此模板填写,否则可能立即被关闭 - -**背景和说明** - -简要说明产生此想法的背景和此想法的具体内容 - - -**实现途径** - -- 如果没有设计方案,请简要描述实现思路 -- 如果你没有任何的实现思路,请通过[Discussions](https://github.com/ix64/unlock-music/discussions)或者Telegram进行讨论 - - -**附加信息** - -更多你想要表达的内容 - +--- +name: 新功能 +about: 对于程序新的想法或建议 +title: '' +labels: enhancement +assignees: '' +--- + +- 请按照此模板填写,否则可能立即被关闭 + +**背景和说明** + +简要说明产生此想法的背景和此想法的具体内容 + +**实现途径** + +- 如果没有设计方案,请简要描述实现思路 +- 如果你没有任何的实现思路,请通过[Discussions](https://github.com/ix64/unlock-music/discussions)或者 Telegram 进行讨论 + +**附加信息** + +更多你想要表达的内容 diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..701cdd3 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +build/ +dist/ +src/QmcWasm/ +src/KgmWasm/ diff --git a/README.md b/README.md index 8053876..7e48fb3 100644 --- a/README.md +++ b/README.md @@ -1,84 +1,85 @@ -# Unlock Music 音乐解锁 - -- 在浏览器中解锁加密的音乐文件。 Unlock encrypted music file in the browser. -- Unlock Music 项目是以学习和技术研究的初衷创建的,修改、再分发时请遵循[授权协议]。 -- Unlock Music 的 CLI 版本可以在 [unlock-music/cli] 找到,大批量转换建议使用 CLI 版本。 -- 我们新建了 Telegram 群组 [`@unlock_music_chat`] ,欢迎加入! - -[授权协议]: https://git.unlock-music.dev/um/web/src/branch/master/LICENSE -[unlock-music/cli]: https://git.unlock-music.dev/um/cli -[`@unlock_music_chat`]: https://t.me/unlock_music_chat - -## 特性 - -### 支持的格式 - -- [x] QQ 音乐 (.qmc0/.qmc2/.qmc3/.qmcflac/.qmcogg/.tkm) -- [x] Moo 音乐格式 (.bkcmp3/.bkcflac/...) -- [x] QQ 音乐 Tm 格式 (.tm0/.tm2/.tm3/.tm6) -- [x] QQ 音乐新格式 (.mflac/.mgg/.mflac0/.mgg1/.mggl) -- [x] QQ 音乐海外版JOOX Music (.ofl_en) -- [x] 网易云音乐格式 (.ncm) -- [x] 虾米音乐格式 (.xm) -- [x] 酷我音乐格式 (.kwm) -- [x] 酷狗音乐格式 (.kgm/.vpr) - -### 其他特性 - -- [x] 在浏览器中解锁 -- [x] 拖放文件 -- [x] 批量解锁 -- [x] 渐进式 Web 应用 (PWA) -- [x] 多线程 -- [x] 写入元信息与专辑封面 - -## 使用方法 - -### 使用预构建版本 - -- 从 [Release] 下载预构建的版本 - - :warning: 本地使用请下载`legacy版本`(`modern版本`只能通过 **http(s)协议** 访问) -- 解压缩后即可部署或本地使用(**请勿直接运行源代码**) - -[release]: https://git.unlock-music.dev/um/web/releases/latest - -### 自行构建 - -#### JS部分 - -- 环境要求 - - nodejs (v16.x) - - npm - -1. 获取项目源代码后安装相关依赖: - - ```sh - npm ci - ``` - -2. 然后进行构建: - - ```sh - npm run build - ``` - - - 构建后的产物可以在 `dist` 目录找到。 - - 如果是用于开发,可以执行 `npm run serve`。 - -3. 如需构建浏览器扩展,构建成功后还需要执行: - - ```sh - npm run make-extension - ``` - -#### WASM部分 - -- 环境要求 - - Linux - - python3 - -- 运行此目录下的build-wasm - - ```sh - ./scripts/build-wasm.sh - ``` +# Unlock Music 音乐解锁 + +- 在浏览器中解锁加密的音乐文件。 Unlock encrypted music file in the browser. +- Unlock Music 项目是以学习和技术研究的初衷创建的,修改、再分发时请遵循[授权协议]。 +- Unlock Music 的 CLI 版本可以在 [unlock-music/cli] 找到,大批量转换建议使用 CLI 版本。 +- 我们新建了 Telegram 群组 [`@unlock_music_chat`] ,欢迎加入! + +[授权协议]: https://git.unlock-music.dev/um/web/src/branch/master/LICENSE +[unlock-music/cli]: https://git.unlock-music.dev/um/cli +[`@unlock_music_chat`]: https://t.me/unlock_music_chat + +## 特性 + +### 支持的格式 + +- [x] QQ 音乐 (.qmc0/.qmc2/.qmc3/.qmcflac/.qmcogg/.tkm) +- [x] Moo 音乐格式 (.bkcmp3/.bkcflac/...) +- [x] QQ 音乐 Tm 格式 (.tm0/.tm2/.tm3/.tm6) +- [x] QQ 音乐新格式 (.mflac/.mgg/.mflac0/.mgg1/.mggl) +- [x] QQ 音乐海外版JOOX Music (.ofl_en) +- [x] 网易云音乐格式 (.ncm) +- [x] 虾米音乐格式 (.xm) +- [x] 酷我音乐格式 (.kwm) +- [x] 酷狗音乐格式 (.kgm/.vpr) + +### 其他特性 + +- [x] 在浏览器中解锁 +- [x] 拖放文件 +- [x] 批量解锁 +- [x] 渐进式 Web 应用 (PWA) +- [x] 多线程 +- [x] 写入元信息与专辑封面 + +## 使用方法 + +### 使用预构建版本 + +- 从 [Release] 下载预构建的版本 + - :warning: 本地使用请下载`legacy版本`(`modern版本`只能通过 **http(s)协议** 访问) +- 解压缩后即可部署或本地使用(**请勿直接运行源代码**) + +[release]: https://git.unlock-music.dev/um/web/releases/latest + +### 自行构建 + +#### JS 部分 + +- 环境要求 + - nodejs (v16.x) + - npm + +1. 获取项目源代码后安装相关依赖: + + ```sh + npm ci + ``` + +2. 然后进行构建: + + ```sh + npm run build + ``` + + - 构建后的产物可以在 `dist` 目录找到。 + - 如果是用于开发,可以执行 `npm run serve`。 + +3. 如需构建浏览器扩展,构建成功后还需要执行: + + ```sh + npm run make-extension + ``` + +#### WASM 部分 + +- 环境要求 + + - Linux + - python3 + +- 运行此目录下的 build-wasm + + ```sh + ./scripts/build-wasm.sh + ``` diff --git a/auto-imports.d.ts b/auto-imports.d.ts index 08908ed..2dbe5d9 100644 --- a/auto-imports.d.ts +++ b/auto-imports.d.ts @@ -1,5 +1,3 @@ // Generated by 'unplugin-auto-import' -export {} -declare global { - -} +export {}; +declare global {} diff --git a/babel.config.js b/babel.config.js index 64f86fd..a13b0bc 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,12 +1,12 @@ module.exports = { - presets: [ - '@vue/app', - '@babel/preset-typescript' + presets: ['@vue/app', '@babel/preset-typescript'], + plugins: [ + [ + 'component', + { + libraryName: 'element-ui', + styleLibraryName: 'theme-chalk', + }, ], - plugins: [ - ["component", { - "libraryName": "element-ui", - "styleLibraryName": "theme-chalk" - }] - ] + ], }; diff --git a/components.d.ts b/components.d.ts index 82252dd..14d2789 100644 --- a/components.d.ts +++ b/components.d.ts @@ -1,30 +1,30 @@ // generated by unplugin-vue-components // We suggest you to commit this file into source control // Read more: https://github.com/vuejs/core/pull/3399 -import '@vue/runtime-core' +import '@vue/runtime-core'; -export {} +export {}; declare module '@vue/runtime-core' { export interface GlobalComponents { - ElButton: typeof import('element-plus/es')['ElButton'] - ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] - ElContainer: typeof import('element-plus/es')['ElContainer'] - ElDialog: typeof import('element-plus/es')['ElDialog'] - ElFooter: typeof import('element-plus/es')['ElFooter'] - ElForm: typeof import('element-plus/es')['ElForm'] - ElFormItem: typeof import('element-plus/es')['ElFormItem'] - ElIcon: typeof import('element-plus/es')['ElIcon'] - ElImage: typeof import('element-plus/es')['ElImage'] - ElInput: typeof import('element-plus/es')['ElInput'] - ElMain: typeof import('element-plus/es')['ElMain'] - ElProgress: typeof import('element-plus/es')['ElProgress'] - ElRadio: typeof import('element-plus/es')['ElRadio'] - ElRow: typeof import('element-plus/es')['ElRow'] - ElTable: typeof import('element-plus/es')['ElTable'] - ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] - ElTooltip: typeof import('element-plus/es')['ElTooltip'] - ElUpload: typeof import('element-plus/es')['ElUpload'] - IEpUpload: typeof import('~icons/ep/upload')['default'] + ElButton: typeof import('element-plus/es')['ElButton']; + ElCheckbox: typeof import('element-plus/es')['ElCheckbox']; + ElContainer: typeof import('element-plus/es')['ElContainer']; + ElDialog: typeof import('element-plus/es')['ElDialog']; + ElFooter: typeof import('element-plus/es')['ElFooter']; + ElForm: typeof import('element-plus/es')['ElForm']; + ElFormItem: typeof import('element-plus/es')['ElFormItem']; + ElIcon: typeof import('element-plus/es')['ElIcon']; + ElImage: typeof import('element-plus/es')['ElImage']; + ElInput: typeof import('element-plus/es')['ElInput']; + ElMain: typeof import('element-plus/es')['ElMain']; + ElProgress: typeof import('element-plus/es')['ElProgress']; + ElRadio: typeof import('element-plus/es')['ElRadio']; + ElRow: typeof import('element-plus/es')['ElRow']; + ElTable: typeof import('element-plus/es')['ElTable']; + ElTableColumn: typeof import('element-plus/es')['ElTableColumn']; + ElTooltip: typeof import('element-plus/es')['ElTooltip']; + ElUpload: typeof import('element-plus/es')['ElUpload']; + IEpUpload: typeof import('~icons/ep/upload')['default']; } } diff --git a/index.html b/index.html index 5b21b8c..468599e 100644 --- a/index.html +++ b/index.html @@ -6,14 +6,8 @@ 音乐解锁 - - + + @@ -29,10 +23,7 @@

请勿直接运行源代码!

diff --git a/jest.config.js b/jest.config.js index d59ea14..67a1f35 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,7 +1,7 @@ -module.exports = { - testPathIgnorePatterns: ['/build/', '/dist/', '/node_modules/'], - setupFilesAfterEnv: ['./src/__test__/setup_jest.js'], - moduleNameMapper: { - '@/(.*)': '/src/$1', - }, -}; +module.exports = { + testPathIgnorePatterns: ['/build/', '/dist/', '/node_modules/'], + setupFilesAfterEnv: ['./src/__test__/setup_jest.js'], + moduleNameMapper: { + '@/(.*)': '/src/$1', + }, +}; diff --git a/make-extension.js b/make-extension.js index eee814b..aaabd53 100644 --- a/make-extension.js +++ b/make-extension.js @@ -1,25 +1,25 @@ -const fs = require('fs') -const path = require('path') -const src = __dirname + "/src/extension/" -const dst = __dirname + "/dist" -fs.readdirSync(src).forEach(file => { - let srcPath = path.join(src, file) - let dstPath = path.join(dst, file) - fs.copyFileSync(srcPath, dstPath) - console.log(`Copy: ${srcPath} => ${dstPath}`) -}) - -const manifestRaw = fs.readFileSync(__dirname + "/extension-manifest.json", "utf-8") -const manifest = JSON.parse(manifestRaw) - -const pkgRaw = fs.readFileSync(__dirname + "/package.json", "utf-8") -const pkg = JSON.parse(pkgRaw) - -verExt = pkg["version"] -if (verExt.startsWith("v")) verExt = verExt.slice(1) -if (verExt.includes("-")) verExt = verExt.split("-")[0] -manifest["version"] = `${verExt}.${pkg["ext_build"]}` -manifest["version_name"] = pkg["version"] - -fs.writeFileSync(__dirname + "/dist/manifest.json", JSON.stringify(manifest), "utf-8") -console.log("Write: manifest.json") +const fs = require('fs'); +const path = require('path'); +const src = __dirname + '/src/extension/'; +const dst = __dirname + '/dist'; +fs.readdirSync(src).forEach((file) => { + let srcPath = path.join(src, file); + let dstPath = path.join(dst, file); + fs.copyFileSync(srcPath, dstPath); + console.log(`Copy: ${srcPath} => ${dstPath}`); +}); + +const manifestRaw = fs.readFileSync(__dirname + '/extension-manifest.json', 'utf-8'); +const manifest = JSON.parse(manifestRaw); + +const pkgRaw = fs.readFileSync(__dirname + '/package.json', 'utf-8'); +const pkg = JSON.parse(pkgRaw); + +verExt = pkg['version']; +if (verExt.startsWith('v')) verExt = verExt.slice(1); +if (verExt.includes('-')) verExt = verExt.split('-')[0]; +manifest['version'] = `${verExt}.${pkg['ext_build']}`; +manifest['version_name'] = pkg['version']; + +fs.writeFileSync(__dirname + '/dist/manifest.json', JSON.stringify(manifest), 'utf-8'); +console.log('Write: manifest.json'); diff --git a/package.json b/package.json index 2e702ab..05b1efb 100644 --- a/package.json +++ b/package.json @@ -10,10 +10,6 @@ "url": "https://github.com/ix64/unlock-music" }, "private": true, - "prettier": { - "tabWidth": 2, - "singleQuote": true - }, "scripts": { "postinstall": "patch-package", "serve": "vite", diff --git a/postcss.config.js b/postcss.config.js index 961986e..a47ef4f 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,5 +1,5 @@ module.exports = { plugins: { - autoprefixer: {} - } -} + autoprefixer: {}, + }, +}; diff --git a/src/App.vue b/src/App.vue index b7be1e9..67f4c4f 100644 --- a/src/App.vue +++ b/src/App.vue @@ -5,35 +5,19 @@ - 音乐解锁({{ version }}) :移除已购音乐的加密保护。 - 使用提示 + 音乐解锁({{ version }}) + :移除已购音乐的加密保护。 + 使用提示 - 目前支持 网易云音乐(ncm), QQ音乐(qmc, mflac, mgg), 酷狗音乐(kgm), - 虾米音乐(xm), 酷我音乐(.kwm) - 更多。 + 目前支持 网易云音乐(ncm), QQ音乐(qmc, mflac, mgg), 酷狗音乐(kgm), 虾米音乐(xm), 酷我音乐(.kwm) + 更多 - Copyright © 2019 - {{ new Date().getFullYear() }} MengYX + Copyright © 2019 - {{ new Date().getFullYear() }} MengYX 音乐解锁使用 - MIT许可协议 + MIT许可协议 开放源代码 @@ -78,8 +62,7 @@ export default defineComponent({ if ( updateInfo && process.env.NODE_ENV === 'production' && - (updateInfo.HttpsFound || - (updateInfo.Found && window.location.protocol !== 'https:')) + (updateInfo.HttpsFound || (updateInfo.Found && window.location.protocol !== 'https:')) ) { this.$notify.warning({ title: '发现更新', diff --git a/src/__test__/setup_jest.js b/src/__test__/setup_jest.js index c7b47bf..2666ca5 100644 --- a/src/__test__/setup_jest.js +++ b/src/__test__/setup_jest.js @@ -1,2 +1,2 @@ // Polyfill for node. -global.Blob = global.Blob || require("node:buffer").Blob; +global.Blob = global.Blob || require('node:buffer').Blob; diff --git a/src/component/ConfigDialog.vue b/src/component/ConfigDialog.vue index fa43a5b..6673dec 100644 --- a/src/component/ConfigDialog.vue +++ b/src/component/ConfigDialog.vue @@ -26,20 +26,8 @@ form >>> input {