13 Commits
1.3.2 ... 1.3.3

Author SHA1 Message Date
MengYX
97ca09dbae Bump Version 2020-03-04 09:30:48 +08:00
MengYX
e78118b4d0 Add fix-compatibility npm command 2020-03-04 09:29:05 +08:00
MengYX
37c60caa06 Update Dependencies 2020-03-04 08:37:54 +08:00
MengYX
fba020969b Update Babel config 2020-03-04 08:37:39 +08:00
MengYX
790715726a Add temporary solution to fix compatibility for Edge 18 2020-03-04 08:37:16 +08:00
MengYX
4ca45e1233 Merge branch 'pull/22' 2020-03-03 20:01:42 +08:00
MengYX
cfacb77d15 Optimize loader tips for outdated browser 2020-03-03 20:00:44 +08:00
任宝硕
5f7461e8aa Update index.html 2020-03-03 16:41:45 +08:00
MengYX
aa98ec422c Reformat Code 2020-03-01 23:36:16 +08:00
MengYX
d2ec667c19 Fix Update Check 2020-03-01 23:34:24 +08:00
任宝硕
94ee8eb3bd Update index.html 2020-03-01 16:16:34 +08:00
任宝硕
c13f7fcced 对部分老旧浏览器进行显示调整 + 部分内容修复 2020-03-01 16:14:43 +08:00
MengYX
1d83898f08 #20 Add Support For Netease DJ Files 2020-02-29 19:52:41 +08:00
10 changed files with 548 additions and 331 deletions

View File

@@ -15,6 +15,7 @@ steps:
- name: build - name: build
image: node:lts image: node:lts
commands: commands:
- npm run fix-compatibility
- npm run build - npm run build
- tar -czf legacy.tar.gz -C ./dist . - tar -czf legacy.tar.gz -C ./dist .
- npm run build -- --modern - npm run build -- --modern

View File

@@ -1,6 +1,6 @@
module.exports = { module.exports = {
presets: [ presets: [
'@vue/cli-plugin-babel/preset' '@vue/app'
], ],
plugins: [ plugins: [
["component", { ["component", {

757
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,13 +1,21 @@
{ {
"name": "unlock-music", "name": "unlock-music",
"version": "1.3.2", "version": "1.3.3",
"updateInfo": "支持网易云音乐DJ类型ncm优化旧浏览器的支持",
"license": "MIT",
"description": "Unlock encrypted music file in browser.",
"repository": {
"type": "git",
"url": "https://github.com/ix64/unlock-music"
},
"private": true, "private": true,
"scripts": { "scripts": {
"serve": "vue-cli-service serve", "serve": "vue-cli-service serve",
"build": "vue-cli-service build" "build": "vue-cli-service build",
"fix-compatibility": "node ./src/fix-compatibility.js"
}, },
"dependencies": { "dependencies": {
"browser-id3-writer": "^4.3.0", "browser-id3-writer": "^4.4.0",
"core-js": "^3.6.4", "core-js": "^3.6.4",
"crypto-js": "^4.0.0", "crypto-js": "^4.0.0",
"element-ui": "^2.13.0", "element-ui": "^2.13.0",
@@ -16,9 +24,9 @@
"vue": "^2.6.11" "vue": "^2.6.11"
}, },
"devDependencies": { "devDependencies": {
"@vue/cli-plugin-babel": "^4.2.2", "@vue/cli-plugin-babel": "^4.2.3",
"@vue/cli-plugin-pwa": "^4.2.2", "@vue/cli-plugin-pwa": "^4.2.3",
"@vue/cli-service": "^4.2.2", "@vue/cli-service": "^4.2.3",
"babel-plugin-component": "^1.1.1", "babel-plugin-component": "^1.1.1",
"vue-cli-plugin-element": "^1.0.1", "vue-cli-plugin-element": "^1.0.1",
"vue-template-compiler": "^2.6.11", "vue-template-compiler": "^2.6.11",

View File

@@ -2,17 +2,19 @@
<html lang="zh-CN"> <html lang="zh-CN">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta content="IE=edge" http-equiv="X-UA-Compatible"> <meta content="webkit" name="renderer">
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
<meta content="width=device-width,initial-scale=1.0" name="viewport"> <meta content="width=device-width,initial-scale=1.0" name="viewport">
<script>var _paq = window._paq || []; <!--@formatter:off-->
_paq.push(['setRequestMethod', 'POST'], ['trackPageView'], ['enableLinkTracking'], ['setSiteId', '2'], <script>var _paq=window._paq||[];_paq.push(["setRequestMethod","POST"],["trackPageView"],["enableLinkTracking"],["setSiteId","2"],["setTrackerUrl","https://stats.ixarea.com/ixarea-stats/report"]);</script>
['setTrackerUrl', 'https://stats.ixarea.com/ixarea-stats/report']); <!--@formatter:on-->
</script>
<script async src="https://stats.ixarea.com/ixarea-stats.js"></script> <script async src="https://stats.ixarea.com/ixarea-stats.js"></script>
<title>音乐解锁 - By IXarea</title> <title>音乐解锁 - By IXarea</title>
<meta content="音乐,解锁,ncm,qmc,qmc0,qmc3,qmcflac,qmcogg,mflac,qq音乐,网易云音乐,加密" name="keywords"/> <meta content="音乐,解锁,ncm,qmc,qmc0,qmc3,qmcflac,qmcogg,mflac,qq音乐,网易云音乐,加密" name="keywords"/>
<meta content="音乐解锁 - 在任何设备上解锁已购的加密音乐!" name="description"/> <meta content="音乐解锁 - 在任何设备上解锁已购的加密音乐!" name="description"/>
<!--@formatter:off-->
<style>#loader{position:absolute;left:50%;top:50%;z-index:1010;margin:-75px 0 0 -75px;border:16px solid #f3f3f3;border-radius:50%;border-top:16px solid #3498db;width:120px;height:120px;animation:spin 2s linear infinite}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}#loader-mask{position:absolute;width:100%;height:100%;bottom:0;left:0;right:0;top:0;z-index:1009;background-color:rgba(242,246,252,0.88)}</style> <style>#loader{position:absolute;left:50%;top:50%;z-index:1010;margin:-75px 0 0 -75px;border:16px solid #f3f3f3;border-radius:50%;border-top:16px solid #3498db;width:120px;height:120px;animation:spin 2s linear infinite}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}#loader-mask{position:absolute;width:100%;height:100%;bottom:0;left:0;right:0;top:0;z-index:1009;background-color:rgba(242,246,252,0.88)}</style>
<!--@formatter:on-->
</head> </head>
<body> <body>
@@ -23,13 +25,46 @@
src="https://stats.ixarea.com/ixarea-stats/report?idsite=2&rec=1&action_name=音乐解锁+-+By+IXarea" src="https://stats.ixarea.com/ixarea-stats/report?idsite=2&rec=1&action_name=音乐解锁+-+By+IXarea"
style="border:0"/> style="border:0"/>
</noscript> </noscript>
<strong>音乐解锁采用了一些新特性!建议使用 <div hidden id="loader-tips-outdated">
<h2>您可能在使用不受支持的<span style="color:#f00;">过时</span>浏览器,这可能导致此应用无法正常工作。</h2>
<h3>如果您使用双核浏览器,您可以尝试切换<span style="color:#f00;">“极速模式”</span>解决此问题。</h3>
<h3>或者,您可以尝试更换下方的几个浏览器之一。</h3>
</div>
<h3 hidden id="loader-tips-timeout">
音乐解锁采用了一些新特性!建议使用
<a href="https://www.microsoftedgeinsider.com/zh-cn/download" target="_blank">Microsoft Edge Chromium</a>
<a href="https://www.google.cn/chrome/" target="_blank">Google Chrome</a> <a href="https://www.google.cn/chrome/" target="_blank">Google Chrome</a>
<a href="https://www.firefox.com.cn/" target="_blank">Mozilla Firefox</a> <a href="https://www.firefox.com.cn/" target="_blank">Mozilla Firefox</a>
<a href="https://www.microsoftedgeinsider.com/zh-cn/download" target="_blank">Mozilla Firefox</a>
| <a href="https://github.com/ix64/unlock-music/wiki/使用提示" target="_blank">使用提示</a> | <a href="https://github.com/ix64/unlock-music/wiki/使用提示" target="_blank">使用提示</a>
</strong> </h3>
</div> </div>
<div id="app"></div> <div id="app"></div>
<script>
(function () {
setTimeout(function () {
var ele = document.getElementById("loader-tips-timeout");
if (ele != null) {
ele.hidden = false;
}
}, 2000);
var ua = navigator && navigator.userAgent;
var detected = (function () {
var m;
if (!ua) return true;
if (/MSIE |Trident\//.exec(ua)) return true; // no IE
m = /Edge\/([\d.]+)/.exec(ua); // Edge >= 16
if (m && Number(m[1]) < 16) return true;
m = /Chrome\/([\d.]+)/.exec(ua); // Chrome >= 50
if (m && Number(m[1]) < 50) return true;
m = /Firefox\/([\d.]+)/.exec(ua); // Firefox >= 38
return m && Number(m[1]) < 38;
})();
if (detected) {
document.getElementById('loader-tips-outdated').hidden = false;
document.getElementById("loader-tips-timeout").hidden = false;
}
})();
</script>
</body> </body>
</html> </html>

View File

@@ -2,7 +2,7 @@
<el-container id="app"> <el-container id="app">
<el-main> <el-main>
<x-upload v-on:handle_finish="showSuccess" v-on:handle_error="showFail"></x-upload> <x-upload v-on:handle_error="showFail" v-on:handle_finish="showSuccess"></x-upload>
<el-row id="app-control"> <el-row id="app-control">
<el-row style="padding-bottom: 1em; font-size: 14px"> <el-row style="padding-bottom: 1em; font-size: 14px">
@@ -20,7 +20,7 @@
</el-row> </el-row>
<audio :autoplay="playing_auto" :src="playing_url" controls/> <audio :autoplay="playing_auto" :src="playing_url" controls/>
<x-preview :table-data="tableData" :download_format="download_format" <x-preview :download_format="download_format" :table-data="tableData"
v-on:music_changed="changePlaying"></x-preview> v-on:music_changed="changePlaying"></x-preview>
</el-main> </el-main>
@@ -87,7 +87,7 @@
updateInfo = await resp.json(); updateInfo = await resp.json();
} catch (e) { } catch (e) {
} }
if (!!updateInfo.Found) { if (!!updateInfo && !!updateInfo.Found) {
this.$notify.warning({ this.$notify.warning({
title: '发现更新', title: '发现更新',
message: '发现新版本 v' + updateInfo.Version + message: '发现新版本 v' + updateInfo.Version +
@@ -101,7 +101,7 @@
this.$notify.info({ this.$notify.info({
title: '离线使用', title: '离线使用',
message: '我们使用PWA技术无网络也能使用' + message: '我们使用PWA技术无网络也能使用' +
'<br/>最近更新:提供实验性mgg支持' + '<br/>最近更新:' + config.updateInfo +
'<br/><a target="_blank" href="https://github.com/ix64/unlock-music/wiki/使用提示">使用提示</a>', '<br/><a target="_blank" href="https://github.com/ix64/unlock-music/wiki/使用提示">使用提示</a>',
dangerouslyUseHTMLString: true, dangerouslyUseHTMLString: true,
duration: 10000, duration: 10000,

View File

@@ -32,7 +32,7 @@ export async function Decrypt(file) {
const artists = []; const artists = [];
musicMeta.artist.forEach(arr => artists.push(arr[0])); musicMeta.artist.forEach(arr => artists.push(arr[0]));
if (musicMeta.format === "mp3") if (musicMeta.format === "mp3")
audioData = await writeID3(audioData, artists, musicMeta.musicName, musicMeta.album, musicMeta.albumPic) audioData = await writeID3(audioData, artists, musicMeta.musicName, musicMeta.album, musicMeta.albumPic);
const musicData = new Blob([audioData], {type: mime}); const musicData = new Blob([audioData], {type: mime});
return { return {
@@ -145,9 +145,12 @@ function getMetaData(dataView, fileBuffer, offset) {
}, },
META_KEY, META_KEY,
{mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7} {mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7}
); ).toString(CryptoJS.enc.Utf8);
const labelIndex = plainText.indexOf(":");
const result = JSON.parse(plainText.toString(CryptoJS.enc.Utf8).slice(6)); let result = JSON.parse(plainText.slice(labelIndex + 1));
if (plainText.slice(0, labelIndex) === "dj") {
result = result.mainMusic;
}
result.albumPic = result.albumPic.replace("http:", "https:"); result.albumPic = result.albumPic.replace("http:", "https:");
return {data: result, offset: offset}; return {data: result, offset: offset};
} }

View File

@@ -1,5 +1,5 @@
import {AudioMimeType, DetectAudioExt, GetArrayBuffer, GetCoverURL, GetFileInfo} from "./util"; import {AudioMimeType, DetectAudioExt, GetArrayBuffer, GetCoverURL, GetFileInfo} from "./util";
import {QmcMaskCreate58, QmcMaskGetDefault, QmcMaskDetectMgg, QmcMaskDetectMflac} from "./qmcMask"; import {QmcMaskCreate58, QmcMaskDetectMflac, QmcMaskDetectMgg, QmcMaskGetDefault} from "./qmcMask";
const musicMetadata = require("music-metadata-browser"); const musicMetadata = require("music-metadata-browser");

View File

@@ -1,5 +1,5 @@
const musicMetadata = require("music-metadata-browser"); const musicMetadata = require("music-metadata-browser");
import {GetCoverURL, GetFileInfo, AudioMimeType, DetectAudioExt, GetArrayBuffer} from "./util"; import {AudioMimeType, DetectAudioExt, GetArrayBuffer, GetCoverURL, GetFileInfo} from "./util";
export async function Decrypt(file, raw_filename, raw_ext, detect = true) { export async function Decrypt(file, raw_filename, raw_ext, detect = true) {
let ext = raw_ext; let ext = raw_ext;

25
src/fix-compatibility.js Normal file
View File

@@ -0,0 +1,25 @@
//TODO: Use other method to fix this
// !! Only Temporary Solution
// it seems like that @babel/plugin-proposal-object-rest-spread not working
// to fix up the compatibility for Edge 18 and some older Chromium
// now manually edit the dependency files
const fs = require('fs');
const filePath = "./node_modules/file-type/core.js";
const regReplace = /{\s*([a-zA-Z0-9:,\s]*),\s*\.\.\.([a-zA-Z0-9]*)\s*};/m;
if (fs.existsSync(filePath)) {
console.log("File Found!");
let data = fs.readFileSync(filePath).toString();
const regResult = regReplace.exec(data);
if (regResult != null) {
data = data.replace(regResult[0],
"Object.assign({ " + regResult[1] + " }, " + regResult[2] + ");"
);
fs.writeFileSync(filePath, data);
console.log("Object rest spread in file-type fixed!");
} else {
console.log("No fix needed.");
}
} else {
console.log("File Not Found!");
}