7 Commits
1.3.0 ... 1.3.2

Author SHA1 Message Date
MengYX
98ca5bc8ff Bump Version 2020-02-23 13:52:03 +08:00
MengYX
984b549448 #19 Add Download Type: Origin Filename 2020-02-23 13:45:30 +08:00
MengYX
9fd7177ebb Add Update Check 2020-02-23 13:44:19 +08:00
MengYX
f7d19e62fd Immediately Load Latest App 2020-02-23 13:42:50 +08:00
MengYX
86d59f4e6f Update Dependencies 2020-02-23 13:42:20 +08:00
MengYX
3906572723 Optimize UI 2020-02-23 13:41:39 +08:00
MengYX
179f72687a Fix Decrypt Mflac Error 2020-02-12 23:04:48 +08:00
7 changed files with 91 additions and 67 deletions

52
package-lock.json generated
View File

@@ -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",

View File

@@ -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"
},

View File

@@ -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 &copy; 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 &copy; 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) {

View File

@@ -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();

View File

@@ -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) {
}
}

View File

@@ -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.')

View File

@@ -1,4 +1,9 @@
module.exports = {
publicPath: '',
productionSourceMap: true
};
productionSourceMap: true,
pwa: {
workboxOptions: {
skipWaiting: true
}
}
};