Compare commits
7 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
98ca5bc8ff | ||
![]() |
984b549448 | ||
![]() |
9fd7177ebb | ||
![]() |
f7d19e62fd | ||
![]() |
86d59f4e6f | ||
![]() |
3906572723 | ||
![]() |
179f72687a |
52
package-lock.json
generated
52
package-lock.json
generated
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "unlock-music",
|
||||
"version": "1.3.0",
|
||||
"version": "1.3.1",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
@@ -3432,9 +3432,9 @@
|
||||
}
|
||||
},
|
||||
"crypto-js": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npm.taobao.org/crypto-js/download/crypto-js-3.2.0.tgz",
|
||||
"integrity": "sha1-q+Ekhn5J0mleIP6gkXKCdqn3YcA="
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/crypto-js/download/crypto-js-4.0.0.tgz?cache=0&sync_timestamp=1581509247325&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcrypto-js%2Fdownload%2Fcrypto-js-4.0.0.tgz",
|
||||
"integrity": "sha1-KQSrJnep0EKFai6i74DekuSjbcw="
|
||||
},
|
||||
"css-color-names": {
|
||||
"version": "0.0.4",
|
||||
@@ -4631,26 +4631,14 @@
|
||||
}
|
||||
},
|
||||
"file-type": {
|
||||
"version": "13.1.2",
|
||||
"resolved": "https://registry.npm.taobao.org/file-type/download/file-type-13.1.2.tgz",
|
||||
"integrity": "sha1-DltyvKdWnBUuLVqE7OB+lPd/gz8=",
|
||||
"version": "14.1.2",
|
||||
"resolved": "https://registry.npm.taobao.org/file-type/download/file-type-14.1.2.tgz",
|
||||
"integrity": "sha1-7nrfoqBIPYvjo4rqWP3ycFqwD7Q=",
|
||||
"requires": {
|
||||
"readable-web-to-node-stream": "^2.0.0",
|
||||
"strtok3": "^5.0.2",
|
||||
"strtok3": "^6.0.0",
|
||||
"token-types": "^2.0.0",
|
||||
"typedarray-to-buffer": "^3.1.5"
|
||||
},
|
||||
"dependencies": {
|
||||
"strtok3": {
|
||||
"version": "5.0.2",
|
||||
"resolved": "https://registry.npm.taobao.org/strtok3/download/strtok3-5.0.2.tgz",
|
||||
"integrity": "sha1-u4Hx9WdC4W8aMMzOXcPZSYqlR1o=",
|
||||
"requires": {
|
||||
"@tokenizer/token": "^0.1.1",
|
||||
"debug": "^4.1.1",
|
||||
"peek-readable": "^3.1.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"file-uri-to-path": {
|
||||
@@ -7178,13 +7166,13 @@
|
||||
"dev": true
|
||||
},
|
||||
"music-metadata": {
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npm.taobao.org/music-metadata/download/music-metadata-6.3.1.tgz",
|
||||
"integrity": "sha1-uoSReMdBryECX2XCRmCt9uk7uCo=",
|
||||
"version": "6.3.4",
|
||||
"resolved": "https://registry.npm.taobao.org/music-metadata/download/music-metadata-6.3.4.tgz",
|
||||
"integrity": "sha1-GHeOIEMn9KTMQ285mUWsBgFdPFE=",
|
||||
"requires": {
|
||||
"content-type": "^1.0.4",
|
||||
"debug": "^4.1.0",
|
||||
"file-type": "^13.1.2",
|
||||
"file-type": "^14.1.2",
|
||||
"media-typer": "^1.1.0",
|
||||
"strtok3": "^6.0.0",
|
||||
"token-types": "^2.0.0"
|
||||
@@ -7198,15 +7186,15 @@
|
||||
}
|
||||
},
|
||||
"music-metadata-browser": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npm.taobao.org/music-metadata-browser/download/music-metadata-browser-2.0.3.tgz",
|
||||
"integrity": "sha1-CHD1ZbbqemrJ8kAqft5QbrPZCZ8=",
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npm.taobao.org/music-metadata-browser/download/music-metadata-browser-2.0.4.tgz",
|
||||
"integrity": "sha1-G6dva/mVN9XpkvuJv468rAuv94Q=",
|
||||
"requires": {
|
||||
"assert": "^2.0.0",
|
||||
"buffer": "^5.2.1",
|
||||
"debug": "^4.0.1",
|
||||
"music-metadata": "^6.3.1",
|
||||
"readable-stream": "^3.5.0",
|
||||
"music-metadata": "^6.3.4",
|
||||
"readable-stream": "^3.6.0",
|
||||
"readable-web-to-node-stream": "^2.0.0",
|
||||
"remove": "^0.1.5",
|
||||
"typedarray-to-buffer": "^3.1.5"
|
||||
@@ -7233,9 +7221,9 @@
|
||||
}
|
||||
},
|
||||
"readable-stream": {
|
||||
"version": "3.5.0",
|
||||
"resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.5.0.tgz",
|
||||
"integrity": "sha1-Rl1w5tEIf2Fi0HnNC123++v9FgY=",
|
||||
"version": "3.6.0",
|
||||
"resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz",
|
||||
"integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
|
||||
"requires": {
|
||||
"inherits": "^2.0.3",
|
||||
"string_decoder": "^1.1.1",
|
||||
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "unlock-music",
|
||||
"version": "1.3.0",
|
||||
"version": "1.3.2",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
@@ -9,9 +9,9 @@
|
||||
"dependencies": {
|
||||
"browser-id3-writer": "^4.3.0",
|
||||
"core-js": "^3.6.4",
|
||||
"crypto-js": "^3.2.0",
|
||||
"crypto-js": "^4.0.0",
|
||||
"element-ui": "^2.13.0",
|
||||
"music-metadata-browser": "^2.0.3",
|
||||
"music-metadata-browser": "^2.0.4",
|
||||
"register-service-worker": "^1.6.2",
|
||||
"vue": "^2.6.11"
|
||||
},
|
||||
|
75
src/App.vue
75
src/App.vue
@@ -7,13 +7,16 @@
|
||||
<el-row id="app-control">
|
||||
<el-row style="padding-bottom: 1em; font-size: 14px">
|
||||
歌曲命名格式:
|
||||
<el-radio name="format" v-model="download_format" label="1">歌曲名</el-radio>
|
||||
<el-radio name="format" v-model="download_format" label="2">歌手-歌曲名</el-radio>
|
||||
<el-radio name="format" v-model="download_format" label="3">歌曲名-歌手</el-radio>
|
||||
<el-checkbox v-model="instant_download" border>立即保存</el-checkbox>
|
||||
<el-radio label="1" name="format" v-model="download_format">歌手-歌曲名</el-radio>
|
||||
<el-radio label="2" name="format" v-model="download_format">歌曲名</el-radio>
|
||||
<el-radio label="3" name="format" v-model="download_format">歌曲名-歌手</el-radio>
|
||||
<el-radio label="4" name="format" v-model="download_format">同原文件名</el-radio>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-button @click="handleDownloadAll" icon="el-icon-download" plain>下载全部</el-button>
|
||||
<el-button @click="handleDeleteAll" icon="el-icon-delete" plain type="danger">删除全部</el-button>
|
||||
<el-checkbox border style="margin-left: 1em" v-model="instant_download">立即保存</el-checkbox>
|
||||
</el-row>
|
||||
<el-button @click="handleDownloadAll" icon="el-icon-download" plain>下载全部</el-button>
|
||||
<el-button @click="handleDeleteAll" icon="el-icon-delete" plain type="danger">删除全部</el-button>
|
||||
</el-row>
|
||||
<audio :autoplay="playing_auto" :src="playing_url" controls/>
|
||||
|
||||
@@ -23,18 +26,19 @@
|
||||
</el-main>
|
||||
<el-footer id="app-footer">
|
||||
<el-row>
|
||||
音乐解锁:移除已购音乐的加密保护。
|
||||
目前支持网易云音乐(ncm)、QQ音乐(qmc, mflac, tkm)以及
|
||||
<a href="https://github.com/ix64/unlock-music/blob/master/README.md" target="_blank">其他格式</a>。
|
||||
<a href="https://github.com/ix64/unlock-music" target="_blank">音乐解锁</a>(v<span
|
||||
v-text="version"></span>):移除已购音乐的加密保护。
|
||||
<a href="https://github.com/ix64/unlock-music/wiki/使用提示" target="_blank">使用提示</a>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<span>Copyright © 2019</span>
|
||||
<a href="https://github.com/ix64" target="_blank">MengYX</a>
|
||||
目前支持网易云音乐(ncm)、QQ音乐(qmc, mflac, mgg, tkm)以及
|
||||
<a href="https://github.com/ix64/unlock-music/blob/master/README.md" target="_blank">其他格式</a>。
|
||||
</el-row>
|
||||
<el-row>
|
||||
<span>Copyright © 2019</span> MengYX
|
||||
音乐解锁使用
|
||||
<a href="https://github.com/ix64/unlock-music/blob/master/LICENSE" target="_blank">MIT许可协议</a>
|
||||
开放
|
||||
<a href="https://github.com/ix64/unlock-music" target="_blank">源代码</a>
|
||||
开放源代码
|
||||
</el-row>
|
||||
</el-footer>
|
||||
</el-container>
|
||||
@@ -46,6 +50,7 @@
|
||||
import upload from "./component/upload"
|
||||
import preview from "./component/preview"
|
||||
import {DownloadBlobMusic, RemoveBlobMusic} from "./component/util"
|
||||
import config from "../package"
|
||||
|
||||
export default {
|
||||
name: 'app',
|
||||
@@ -55,11 +60,12 @@
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
version: config.version,
|
||||
activeIndex: '1',
|
||||
tableData: [],
|
||||
playing_url: "",
|
||||
playing_auto: false,
|
||||
download_format: '2',
|
||||
download_format: '1',
|
||||
instant_download: false,
|
||||
}
|
||||
},
|
||||
@@ -69,18 +75,39 @@
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
finishLoad() {
|
||||
async finishLoad() {
|
||||
const mask = document.getElementById("loader-mask");
|
||||
if (!!mask) mask.remove();
|
||||
this.$notify.info({
|
||||
title: '离线使用',
|
||||
message: '我们使用PWA技术,无网络也能使用<br/>' +
|
||||
'最近更新:提供实验性mgg支持<br/>' +
|
||||
'点击查看 <a target="_blank" href="https://github.com/ix64/unlock-music/wiki/使用提示">使用提示</a>',
|
||||
dangerouslyUseHTMLString: true,
|
||||
duration: 10000,
|
||||
position: 'top-left'
|
||||
});
|
||||
let updateInfo;
|
||||
try {
|
||||
const resp = await fetch("https://stats.ixarea.com/collect/music/app-version", {
|
||||
method: "POST", headers: {"Content-Type": "application/json"},
|
||||
body: JSON.stringify({Version: this.version})
|
||||
});
|
||||
updateInfo = await resp.json();
|
||||
} catch (e) {
|
||||
}
|
||||
if (!!updateInfo.Found) {
|
||||
this.$notify.warning({
|
||||
title: '发现更新',
|
||||
message: '发现新版本 v' + updateInfo.Version +
|
||||
'<br/>更新详情:' + updateInfo.Detail +
|
||||
'<br/><a target="_blank" href="' + updateInfo.URL + '">获取更新</a>',
|
||||
dangerouslyUseHTMLString: true,
|
||||
duration: 15000,
|
||||
position: 'top-left'
|
||||
});
|
||||
} else {
|
||||
this.$notify.info({
|
||||
title: '离线使用',
|
||||
message: '我们使用PWA技术,无网络也能使用' +
|
||||
'<br/>最近更新:提供实验性mgg支持' +
|
||||
'<br/><a target="_blank" href="https://github.com/ix64/unlock-music/wiki/使用提示">使用提示</a>',
|
||||
dangerouslyUseHTMLString: true,
|
||||
duration: 10000,
|
||||
position: 'top-left'
|
||||
});
|
||||
}
|
||||
},
|
||||
showSuccess(data) {
|
||||
if (data.status) {
|
||||
|
@@ -2,16 +2,19 @@ export function DownloadBlobMusic(data, format) {
|
||||
const a = document.createElement('a');
|
||||
a.href = data.file;
|
||||
switch (format) {
|
||||
case "1":
|
||||
a.download = data.title + "." + data.ext;
|
||||
break;
|
||||
default:
|
||||
case "2":
|
||||
case "1":
|
||||
a.download = data.artist + " - " + data.title + "." + data.ext;
|
||||
break;
|
||||
case "2":
|
||||
a.download = data.title + "." + data.ext;
|
||||
break;
|
||||
case "3":
|
||||
a.download = data.title + " - " + data.artist + "." + data.ext;
|
||||
break;
|
||||
case "4":
|
||||
a.download = data.rawFilename + "." + data.ext;
|
||||
break;
|
||||
}
|
||||
document.body.append(a);
|
||||
a.click();
|
||||
|
@@ -115,7 +115,7 @@ export function QmcMaskDetectMflac(data) {
|
||||
for (let block_idx = 0; block_idx < search_len; block_idx += 128) {
|
||||
try {
|
||||
mask = new QmcMask(data.slice(block_idx, block_idx + 128));
|
||||
if (!IsBytesEqual(FLAC_HEADER, mask.Decrypt(data.slice(0, FLAC_HEADER.length)))) break;
|
||||
if (IsBytesEqual(FLAC_HEADER, mask.Decrypt(data.slice(0, FLAC_HEADER.length)))) break;
|
||||
} catch (e) {
|
||||
}
|
||||
}
|
||||
|
@@ -20,7 +20,8 @@ if (process.env.NODE_ENV === 'production') {
|
||||
console.log('New content is downloading.')
|
||||
},
|
||||
updated() {
|
||||
console.log('New content is available; please refresh.')
|
||||
console.log('New content is available.');
|
||||
window.location.reload();
|
||||
},
|
||||
offline() {
|
||||
console.log('No internet connection found. App is running in offline mode.')
|
||||
|
@@ -1,4 +1,9 @@
|
||||
module.exports = {
|
||||
publicPath: '',
|
||||
productionSourceMap: true
|
||||
};
|
||||
productionSourceMap: true,
|
||||
pwa: {
|
||||
workboxOptions: {
|
||||
skipWaiting: true
|
||||
}
|
||||
}
|
||||
};
|
||||
|
Reference in New Issue
Block a user