This repository has been archived on 2022-11-08. You can view files and clone it, but cannot push or open issues or pull requests.
web-archived/js/app.a8c1864a.js

1 line
34 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function(e){function t(t){for(var r,c,o=t[0],s=t[1],l=t[2],f=0,d=[];f<o.length;f++)c=o[f],Object.prototype.hasOwnProperty.call(a,c)&&a[c]&&d.push(a[c][0]),a[c]=0;for(r in s)Object.prototype.hasOwnProperty.call(s,r)&&(e[r]=s[r]);u&&u(t);while(d.length)d.shift()();return i.push.apply(i,l||[]),n()}function n(){for(var e,t=0;t<i.length;t++){for(var n=i[t],r=!0,o=1;o<n.length;o++){var s=n[o];0!==a[s]&&(r=!1)}r&&(i.splice(t--,1),e=c(c.s=n[0]))}return e}var r={},a={app:0},i=[];function c(t){if(r[t])return r[t].exports;var n=r[t]={i:t,l:!1,exports:{}};return e[t].call(n.exports,n,n.exports,c),n.l=!0,n.exports}c.m=e,c.c=r,c.d=function(e,t,n){c.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},c.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},c.t=function(e,t){if(1&t&&(e=c(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(c.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var r in e)c.d(n,r,function(t){return e[t]}.bind(null,r));return n},c.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return c.d(t,"a",t),t},c.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},c.p="";var o=window["webpackJsonp"]=window["webpackJsonp"]||[],s=o.push.bind(o);o.push=t,o=o.slice();for(var l=0;l<o.length;l++)t(o[l]);var u=s;i.push([0,"chunk-vendors"]),n()})({0:function(e,t,n){e.exports=n("cd49")},"0565":function(e,t,n){"use strict";(function(e){var r=n("7327"),a=n("731b"),i=n("25f1"),c=n("eaa5"),o=n("73ec");t["a"]={name:"FileSelector",data(){return{task_all:0,task_finished:0,queue:new o["a"],parallel:!1}},computed:{progress_value(){return this.task_all?this.task_finished/this.task_all*100:0},progress_show(){return this.task_all!==this.task_finished}},mounted(){window.Worker&&"file:"!==window.location.protocol?(console.log("Using Worker Pool"),this.queue=Object(r["a"])(()=>Object(a["a"])(new i["a"](e)),navigator.hardwareConcurrency||1),this.parallel=!0):console.log("Using Queue in Main Thread")},methods:{progress_string(){return`${this.task_finished} / ${this.task_all}`},async addFile(e){this.task_all++,this.queue.queue(async(t=c["a"])=>{console.log("start handling",e.name);try{this.$emit("success",await t(e))}catch(n){console.error(n),this.$emit("error",n,e.name)}finally{this.task_finished++}})}}}}).call(this,n("2e83"))},1:function(e,t){},2:function(e,t){},"2e83":function(e,t,n){e.exports=n.p+"js/0.34ae486e.worker.js"},3:function(e,t){},"432b":function(e,t,n){"use strict";n.d(t,"a",(function(){return a}));n("907a"),n("219c");var r=new Uint8Array([119,72,50,115,222,242,192,200,149,236,48,178,81,195,225,160,158,230,157,207,250,127,20,209,206,184,220,195,74,103,147,214,40,194,145,112,202,141,162,164,240,8,97,144,126,111,162,224,235,174,62,182,103,199,146,244,145,181,246,108,94,132,64,247,243,27,2,127,213,171,65,137,40,244,37,204,82,17,173,67,104,166,65,139,132,181,255,44,146,74,38,216,71,106,124,149,97,204,230,203,187,63,71,88,137,117,195,117,161,217,175,204,8,115,23,220,170,154,162,22,65,216,162,6,198,139,252,102,52,159,207,24,35,160,10,116,231,43,39,112,146,233,175,55,230,140,167,188,98,101,156,194,8,201,136,179,243,67,172,116,44,15,212,175,161,195,1,100,149,78,72,159,244,53,120,149,122,57,214,106,160,109,64,232,79,168,239,17,29,243,27,63,63,7,221,111,91,25,48,25,251,239,14,55,240,14,205,22,73,254,83,71,19,26,189,164,241,64,25,96,14,237,104,9,6,95,77,207,61,26,254,32,119,228,217,218,249,164,43,118,28,113,219,0,188,253,12,108,165,71,247,246,0,121,74,17]),a=function(){function e(){}return e.prototype.getMask=function(e){return e>32767&&(e%=32767),r[e*e+27&255]},e.prototype.decrypt=function(e,t){for(var n=0;n<e.length;n++)e[n]^=this.getMask(t+n)},e}()},"5c0b":function(e,t,n){"use strict";n("9c0c")},"73ec":function(e,t,n){"use strict";n.d(t,"e",(function(){return r})),n.d(t,"d",(function(){return i})),n.d(t,"b",(function(){return o})),n.d(t,"c",(function(){return s})),n.d(t,"f",(function(){return l})),n.d(t,"a",(function(){return u}));var r,a=n("9ab4");(function(e){e[e["ArtistAndTitle"]=0]="ArtistAndTitle",e[e["TitleOnly"]=1]="TitleOnly",e[e["TitleAndArtist"]=2]="TitleAndArtist",e[e["SameAsOriginal"]=3]="SameAsOriginal"})(r||(r={}));var i=[{key:r.ArtistAndTitle,text:"歌手-歌曲名"},{key:r.TitleOnly,text:"歌曲名"},{key:r.TitleAndArtist,text:"歌曲名-歌手"},{key:r.SameAsOriginal,text:"同源文件名"}];function c(e,t){switch(t){case r.TitleOnly:return"".concat(e.title,".").concat(e.ext);case r.TitleAndArtist:return"".concat(e.title," - ").concat(e.artist,".").concat(e.ext);case r.SameAsOriginal:return"".concat(e.rawFilename,".").concat(e.ext);default:case r.ArtistAndTitle:return"".concat(e.artist," - ").concat(e.title,".").concat(e.ext)}}function o(e,t,n){return Object(a["a"])(this,void 0,void 0,(function(){var r,i,o;return Object(a["b"])(this,(function(a){switch(a.label){case 0:r=c(e,t),a.label=1;case 1:return a.trys.push([1,3,,4]),[4,n.getFileHandle(r)];case 2:return a.sent(),r="".concat((new Date).getTime()," - ").concat(r),[3,4];case 3:return a.sent(),[3,4];case 4:return[4,n.getFileHandle(r,{create:!0})];case 5:return i=a.sent(),[4,i.createWritable()];case 6:return o=a.sent(),[4,o.write(e.blob)];case 7:return a.sent(),[4,o.close()];case 8:return a.sent(),[2]}}))}))}function s(e,t){var n=document.createElement("a");n.href=e.file,n.download=c(e,t),document.body.append(n),n.click(),n.remove()}function l(e){var t;URL.revokeObjectURL(e.file),(null===(t=e.picture)||void 0===t?void 0:t.startsWith("blob:"))&&URL.revokeObjectURL(e.picture)}var u=function(){function e(){this.pending=[]}return e.prototype.queue=function(e){this.pending.push(e),this.consume()},e.prototype.consume=function(){var e=this,t=this.pending.shift();t&&t().then((function(){return e.consume})).catch(console.error)},e}()},8850:function(e,t,n){"use strict";(function(e){n.d(t,"b",(function(){return f})),n.d(t,"a",(function(){return d}));n("907a"),n("219c");var r=n("9ab4"),a=n("432b"),i=n("cc74"),c=n("cb96"),o=n("a00c"),s=n("acf9"),l=n.n(s),u=n("97e5"),f={mgg:{ext:"ogg",version:2},mgg1:{ext:"ogg",version:2},mflac:{ext:"flac",version:2},mflac0:{ext:"flac",version:2},qmcflac:{ext:"flac",version:2},qmcogg:{ext:"ogg",version:2},qmc0:{ext:"mp3",version:1},qmc2:{ext:"ogg",version:1},qmc3:{ext:"mp3",version:1},bkcmp3:{ext:"mp3",version:1},bkcflac:{ext:"flac",version:1},tkm:{ext:"m4a",version:1},"666c6163":{ext:"flac",version:1},"6d7033":{ext:"mp3",version:1},"6f6767":{ext:"ogg",version:1},"6d3461":{ext:"m4a",version:1},776176:{ext:"wav",version:1}};function d(t,n,s){var u,d,b,p;return Object(r["a"])(this,void 0,Promise,(function(){var h,v,w,g,y,O,_,j,k,x,A,T,U,P,E;return Object(r["b"])(this,(function(r){switch(r.label){case 0:if(!(s in f))throw"Qmc cannot handle type: ".concat(s);return h=f[s],v=h.version,[4,Object(i["c"])(t)];case 1:return w=r.sent(),2!==v?[3,3]:[4,Object(o["a"])(w)];case 2:y=r.sent(),y?g=y:v=1,r.label=3;case 3:if(1===v)O=new a["a"],g=new Uint8Array(w),O.decrypt(g,0);else if(!g)throw new Error("解密失败: ".concat(s));return _=Object(i["g"])(g,h.ext),j=i["a"][_],k=new Blob([g],{type:j}),[4,Object(c["parseBlob"])(k)];case 4:for(A in x=r.sent(),x.native)x.native.hasOwnProperty(A)&&x.native[A].some((function(e){return"TCON"===e.id&&"(12)"===e.value}))&&(console.warn("try using gbk encoding to decode meta"),x.common.artist=l.a.decode(new e(null!==(u=x.common.artist)&&void 0!==u?u:""),"gbk"),x.common.title=l.a.decode(new e(null!==(d=x.common.title)&&void 0!==d?d:""),"gbk"),x.common.album=l.a.decode(new e(null!==(b=x.common.album)&&void 0!==b?b:""),"gbk"));return T=Object(i["f"])(n,x.common.title,x.common.artist),U=Object(i["d"])(x),U?[3,7]:[4,m(T.title,T.artist,x.common.album)];case 5:return U=r.sent(),U?[4,Object(i["e"])(U)]:[3,7];case 6:if(P=r.sent(),P){U=P.url;try{E={picture:P.buffer,title:T.title,artists:null===(p=T.artist)||void 0===p?void 0:p.split(" _ ")},"mp3"===_?(g=Object(i["j"])(e.from(g),E,x),k=new Blob([g],{type:j})):"flac"===_?(g=Object(i["i"])(e.from(g),E,x),k=new Blob([g],{type:j})):console.info("writing metadata for "+_+" is not being supported for now")}catch(S){console.warn("Error while appending cover image to file "+S)}}r.label=7;case 7:return[2,{title:T.title,artist:T.artist,ext:_,album:x.common.album,picture:U,file:URL.createObjectURL(k),blob:k,mime:j}]}}))}))}function m(e,t,n){return Object(r["a"])(this,void 0,Promise,(function(){var a,i,c;return Object(r["b"])(this,(function(r){switch(r.label){case 0:a="https://stats.ixarea.com/apis/music/qq-cover",r.label=1;case 1:return r.trys.push([1,3,,4]),[4,Object(u["b"])(e,t,n)];case 2:return i=r.sent(),[2,"".concat(a,"/").concat(i.Type,"/").concat(i.Id)];case 3:return c=r.sent(),console.warn(c),[3,4];case 4:return[2,""]}}))}))}}).call(this,n("1c35").Buffer)},9224:function(e){e.exports=JSON.parse('{"name":"unlock-music","version":"v1.10.0-beta.1","updateInfo":"新增写入本地文件系统; 优化.kwm解锁; 支持.acc嗅探; 使用Typescript重构","license":"MIT","description":"Unlock encrypted music file in browser.","repository":{"type":"git","url":"https://github.com/ix64/unlock-music"},"private":true,"scripts":{"postinstall":"patch-package","serve":"vue-cli-service serve","build":"vue-cli-service build","test":"jest","make-extension":"node ./make-extension.js"},"dependencies":{"@babel/preset-typescript":"^7.16.5","@jixun/qmc2-crypto":"^0.0.5-R4","base64-js":"^1.5.1","browser-id3-writer":"^4.4.0","core-js":"^3.16.0","crypto-js":"^4.1.1","element-ui":"^2.15.5","iconv-lite":"^0.6.3","jimp":"^0.16.1","metaflac-js":"^1.0.5","music-metadata":"7.9.0","music-metadata-browser":"2.2.7","register-service-worker":"^1.7.2","threads":"^1.6.5","vue":"^2.6.14"},"devDependencies":{"@types/crypto-js":"^4.0.2","@types/jest":"^27.0.3","@vue/cli-plugin-babel":"^4.5.13","@vue/cli-plugin-pwa":"^4.5.13","@vue/cli-plugin-typescript":"^4.5.13","@vue/cli-service":"^4.5.13","babel-plugin-component":"^1.1.1","jest":"^27.4.5","patch-package":"^6.4.7","sass":"^1.38.1","sass-loader":"^10.2.0","semver":"^7.3.5","threads-plugin":"^1.4.0","typescript":"^4.5.4","vue-cli-plugin-element":"^1.0.1","vue-template-compiler":"^2.6.14"}}')},"97e5":function(e,t,n){"use strict";n.d(t,"a",(function(){return i})),n.d(t,"b",(function(){return c}));n("907a"),n("219c");var r=n("9ab4"),a=(n("1fb5"),"https://um-api.ixarea.com");function i(e){return Object(r["a"])(this,void 0,Promise,(function(){var t;return Object(r["b"])(this,(function(n){switch(n.label){case 0:return[4,fetch(a+"/music/app-version",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({Version:e})})];case 1:return t=n.sent(),[4,t.json()];case 2:return[2,n.sent()]}}))}))}function c(e,t,n){return Object(r["a"])(this,void 0,Promise,(function(){var i,c,o;return Object(r["b"])(this,(function(r){switch(r.label){case 0:return i=a+"/music/qq-cover",c=new URLSearchParams([["Title",e],["Artist",null!==t&&void 0!==t?t:""],["Album",null!==n&&void 0!==n?n:""]]),[4,fetch("".concat(i,"?").concat(c.toString()))];case 1:return o=r.sent(),[4,o.json()];case 2:return[2,r.sent()]}}))}))}},"9c0c":function(e,t,n){},a00c:function(e,t,n){"use strict";n.d(t,"a",(function(){return l}));n("907a"),n("219c");var r=n("9ab4"),a=n("d9f0"),i=n.n(a),c=40,o=2097152;function s(e){var t=0;e.forEach((function(e){t+=e.length}));var n=new Uint8Array(t),r=0;return e.forEach((function(e){n.set(e,r),r+=e.length})),n}function l(e){return Object(r["a"])(this,void 0,void 0,(function(){var t,n,a,l,u,f,d,m,b,p,h,v,w,g,y,O,_,j;return Object(r["b"])(this,(function(r){switch(r.label){case 0:return[4,i()()];case 1:if(t=r.sent(),n=new Uint8Array(e.slice(-c)),a=t._malloc(n.length),t.writeArrayToMemory(n,a),l=t._malloc(t.sizeof_qmc_detection()),u=t.detectKeyEndPosition(l,a,n.length),f=t.getValue(l,"i32"),d=t.getValue(l+4,"i32"),t._free(a),t._free(l),!u)return[2,!1];m=e.byteLength-c+f,b=new Uint8Array(e.slice(m,m+d)),p=new TextDecoder,h=p.decode(b),v=t.createInstWidthEKey(h),w=t._malloc(o),g=[],y=0,O=m;while(O>0)_=Math.min(O,o),j=new Uint8Array(e.slice(y,y+_)),t.writeArrayToMemory(j,w),t.decryptStream(v,w,y,_),g.push(t.HEAPU8.slice(w,w+_)),y+=_,O-=_;return t._free(w),v.delete(),[2,s(g)]}}))}))}},cc74:function(e,t,n){"use strict";(function(e){n.d(t,"a",(function(){return h})),n.d(t,"b",(function(){return v})),n.d(t,"g",(function(){return w})),n.d(t,"c",(function(){return g})),n.d(t,"d",(function(){return y})),n.d(t,"f",(function(){return O})),n.d(t,"e",(function(){return _})),n.d(t,"j",(function(){return j})),n.d(t,"i",(function(){return k})),n.d(t,"h",(function(){return x}));var r=n("9ab4"),a=n("7907"),i=n.n(a),c=n("b686"),o=n.n(c),s=[102,76,97,67],l=[73,68,51],u=[79,103,103,83],f=[102,116,121,112],d=[48,38,178,117,142,102,207,17,166,217,0,170,0,98,206,108],m=[82,73,70,70],b=[255,241],p=[70,82,77,56],h={mp3:"audio/mpeg",flac:"audio/flac",m4a:"audio/mp4",ogg:"audio/ogg",wma:"audio/x-ms-wma",wav:"audio/x-wav",dff:"audio/x-dff"};function v(e,t){return!(t.length>e.length)&&t.every((function(t,n){return t===e[n]}))}function w(e,t){return void 0===t&&(t="mp3"),v(e,l)?"mp3":v(e,s)?"flac":v(e,u)?"ogg":e.length>=4+f.length&&v(e.slice(4),f)?"m4a":v(e,m)?"wav":v(e,d)?"wma":v(e,b)?"aac":v(e,p)?"dff":t}function g(e){return e.arrayBuffer?e.arrayBuffer():new Promise((function(t,n){var r=new FileReader;r.onload=function(e){var r,a=null===(r=e.target)||void 0===r?void 0:r.result;a?t(a):n("read file failed")},r.readAsArrayBuffer(e)}))}function y(e){var t;return(null===(t=e.common)||void 0===t?void 0:t.picture)&&e.common.picture.length>0?URL.createObjectURL(new Blob([e.common.picture[0].data],{type:e.common.picture[0].format})):""}function O(e,t,n,r){void 0===r&&(r="-");var a={title:null!==t&&void 0!==t?t:"",artist:n},i=e.split(r);return i.length>1?(a.artist||(a.artist=i[0].trim()),a.title||(a.title=i[1].trim())):1===i.length&&(a.title||(a.title=i[0].trim())),a}function _(e){return Object(r["a"])(this,void 0,Promise,(function(){var t,n,a,i,c;return Object(r["b"])(this,(function(r){switch(r.label){case 0:return r.trys.push([0,4,,5]),[4,fetch(e)];case 1:return t=r.sent(),n=t.headers.get("Content-Type"),(null===n||void 0===n?void 0:n.startsWith("image/"))?[4,t.arrayBuffer()]:[3,3];case 2:return a=r.sent(),i=URL.createObjectURL(new Blob([a],{type:n})),[2,{buffer:a,url:i,mime:n}];case 3:return[3,5];case 4:return c=r.sent(),console.warn(c),[3,5];case 5:return[2]}}))}))}function j(e,t,n){var r=new i.a(e),a=n.native["ID3v2.4"]||n.native["ID3v2.3"]||n.native["ID3v2.2"]||[];a.forEach((function(e){if("TPE1"!==e.id&&"TIT2"!==e.id&&"TALB"!==e.id)try{r.setFrame(e.id,e.value)}catch(t){}}));var c=n.common;return r.setFrame("TPE1",(null===c||void 0===c?void 0:c.artists)||t.artists||[]).setFrame("TIT2",(null===c||void 0===c?void 0:c.title)||t.title).setFrame("TALB",(null===c||void 0===c?void 0:c.album)||t.album||""),t.picture&&r.setFrame("APIC",{type:3,data:t.picture,description:t.picture_desc||"Cover"}),r.addTag()}function k(t,n,r){var a=new o.a(t),i=r.common;return i.title||i.album||!i.artists||(a.setTag("TITLE="+n.title),a.setTag("ALBUM="+n.album),n.artists&&(a.removeTag("ARTIST"),n.artists.forEach((function(e){return a.setTag("ARTIST="+e)})))),n.picture&&a.importPictureFromBuffer(e.from(n.picture)),a.save()}function x(e){var t=e.lastIndexOf(".");return{ext:e.substring(t+1).toLowerCase(),name:e.substring(0,t)}}}).call(this,n("1c35").Buffer)},cd49:function(e,t,n){"use strict";n.r(t);n("9e1f"),n("450d");var r=n("6ed5"),a=n.n(r),i=(n("46a1"),n("e5f2")),c=n.n(i),o=(n("6b30"),n("c284")),s=n.n(o),l=(n("0c67"),n("299c")),u=n.n(l),f=(n("b5d8"),n("f494")),d=n.n(f),m=(n("560b"),n("dcdc")),b=n.n(m),p=(n("f225"),n("89a9")),h=n.n(p),v=(n("f4f9"),n("c2cc")),w=n.n(v),g=(n("7a0f"),n("0f6c")),y=n.n(g),O=(n("aaa5"),n("a578")),_=n.n(O),j=(n("adec"),n("3d2d")),k=n.n(j),x=(n("bdc7"),n("aa2f")),A=n.n(x),T=(n("de31"),n("c69e")),U=n.n(T),P=(n("5466"),n("ecdf")),E=n.n(P),S=(n("38a0"),n("ad41")),L=n.n(S),D=(n("1951"),n("eedf")),B=n.n(D),F=(n("acb6"),n("c673")),R=n.n(F),q=(n("fd71"),n("a447")),$=n.n(q),C=n("2b0e"),I=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-container",{attrs:{id:"app"}},[n("el-main",[n("Home")],1),n("el-footer",{attrs:{id:"app-footer"}},[n("el-row",[n("a",{attrs:{href:"https://github.com/ix64/unlock-music",target:"_blank"}},[e._v("音乐解锁")]),e._v("("+e._s(e.version)+") :移除已购音乐的加密保护。 "),n("a",{attrs:{href:"https://github.com/ix64/unlock-music/wiki/使用提示",target:"_blank"}},[e._v("使用提示")])]),n("el-row",[e._v(" 目前支持 QQ音乐(qmc, mflac, mgg), 酷狗音乐(kgm), 虾米音乐(xm), 酷我音乐(.kwm) "),n("a",{attrs:{href:"https://github.com/ix64/unlock-music/blob/master/README.md",target:"_blank"}},[e._v("更多")]),e._v("。 ")]),n("el-row",[n("span",[e._v("Copyright © 2019 - "+e._s((new Date).getFullYear())+" MengYX")]),e._v(" 音乐解锁使用 "),n("a",{attrs:{href:"https://github.com/ix64/unlock-music/blob/master/LICENSE",target:"_blank"}},[e._v("MIT许可协议")]),e._v(" 开放源代码 ")])],1)],1)},M=[],N=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-upload",{attrs:{"auto-upload":!1,"on-change":e.addFile,"show-file-list":!1,action:"",drag:"",multiple:""}},[n("i",{staticClass:"el-icon-upload"}),n("div",{staticClass:"el-upload__text"},[e._v("将文件拖到此处,或"),n("em",[e._v("点击选择")])]),n("div",{staticClass:"el-upload__tip",attrs:{slot:"tip"},slot:"tip"},[n("div",[e._v(" 仅在浏览器内对文件进行解锁,无需消耗流量 "),n("el-tooltip",{attrs:{effect:"dark",placement:"top-start"}},[n("div",{attrs:{slot:"content"},slot:"content"},[e._v(" 算法在源代码中已经提供,所有运算都发生在本地 ")]),n("i",{staticClass:"el-icon-info",staticStyle:{"font-size":"12px"}})])],1),n("div",[e._v(" 工作模式: "+e._s(e.parallel?"多线程 Worker":"单线程 Queue")+" "),n("el-tooltip",{attrs:{effect:"dark",placement:"top-start"}},[n("div",{attrs:{slot:"content"},slot:"content"},[e._v(" 将此工具部署在HTTPS环境下可以启用Web Worker特性"),n("br"),e._v(" 从而更快的利用并行处理完成解锁 ")]),n("i",{staticClass:"el-icon-info",staticStyle:{"font-size":"12px"}})])],1)]),n("transition",{attrs:{name:"el-fade-in"}},[n("el-progress",{directives:[{name:"show",rawName:"v-show",value:e.progress_show,expression:"progress_show"}],staticStyle:{margin:"16px 6px 0 6px"},attrs:{format:e.progress_string,percentage:e.progress_value,"stroke-width":16,"text-inside":!0}})],1)],1)},H=[],W=n("0565"),V=W["a"],Q=n("2877"),J=Object(Q["a"])(V,N,H,!1,null,null,null),z=J.exports,K=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("el-table",{staticStyle:{width:"100%"},attrs:{data:e.tableData}},[n("el-table-column",{attrs:{label:"封面"},scopedSlots:e._u([{key:"default",fn:function(t){return[n("el-image",{staticStyle:{width:"100px",height:"100px"},attrs:{src:t.row.picture}},[n("div",{staticClass:"image-slot el-image__error",attrs:{slot:"error"},slot:"error"},[e._v(" 暂无封面 ")])])]}}])}),n("el-table-column",{attrs:{label:"歌曲"},scopedSlots:e._u([{key:"default",fn:function(t){return[n("span",[e._v(e._s(t.row.title))])]}}])}),n("el-table-column",{attrs:{label:"歌手"},scopedSlots:e._u([{key:"default",fn:function(t){return[n("p",[e._v(e._s(t.row.artist))])]}}])}),n("el-table-column",{attrs:{label:"专辑"},scopedSlots:e._u([{key:"default",fn:function(t){return[n("p",[e._v(e._s(t.row.album))])]}}])}),n("el-table-column",{attrs:{label:"操作"},scopedSlots:e._u([{key:"default",fn:function(t){return[n("el-button",{attrs:{circle:"",icon:"el-icon-video-play",type:"success"},on:{click:function(n){return e.handlePlay(t.$index,t.row)}}}),n("el-button",{attrs:{circle:"",icon:"el-icon-download"},on:{click:function(n){return e.handleDownload(t.row)}}}),n("el-button",{attrs:{circle:"",icon:"el-icon-delete",type:"danger"},on:{click:function(n){return e.handleDelete(t.$index,t.row)}}})]}}])})],1)},G=[],Y=n("73ec"),X={name:"PreviewTable",props:{tableData:{type:Array,required:!0},policy:{type:Number,required:!0}},methods:{handlePlay(e,t){this.$emit("play",t.file)},handleDelete(e,t){Object(Y["f"])(t),this.tableData.splice(e,1)},handleDownload(e){this.$emit("download",e)}}},Z=X,ee=Object(Q["a"])(Z,K,G,!1,null,"1458a804",null),te=ee.exports,ne=n("9224"),re=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",[n("file-selector",{on:{error:e.showFail,success:e.showSuccess}}),n("div",{attrs:{id:"app-control"}},[n("el-row",{staticClass:"mb-3"},[n("span",[e._v("歌曲命名格式:")]),e._l(e.FilenamePolicies,(function(t){return n("el-radio",{key:t.key,attrs:{label:t.key},model:{value:e.filename_policy,callback:function(t){e.filename_policy=t},expression:"filename_policy"}},[e._v(" "+e._s(t.text)+" ")])}))],2),n("el-row",[n("el-button",{attrs:{icon:"el-icon-download",plain:""},on:{click:e.handleDownloadAll}},[e._v("下载全部")]),n("el-button",{attrs:{icon:"el-icon-delete",plain:"",type:"danger"},on:{click:e.handleDeleteAll}},[e._v("清除全部")]),n("el-tooltip",{staticClass:"item",attrs:{effect:"dark",placement:"top-start"}},[n("div",{attrs:{slot:"content"},slot:"content"},[e.instant_save?n("span",[e._v("工作模式: "+e._s(e.dir?"写入本地文件系统":"调用浏览器下载"))]):n("span",[e._v(" 当您使用此工具进行大量文件解锁的时候,建议开启此选项。"),n("br"),e._v(" 开启后,解锁结果将不会存留于浏览器中,防止内存不足。 ")])]),n("el-checkbox",{staticClass:"ml-2",attrs:{border:""},model:{value:e.instant_save,callback:function(t){e.instant_save=t},expression:"instant_save"}},[e._v("立即保存")])],1)],1)],1),n("audio",{attrs:{autoplay:e.playing_auto,src:e.playing_url,controls:""}}),n("PreviewTable",{attrs:{policy:e.filename_policy,"table-data":e.tableData},on:{download:e.saveFile,play:e.changePlaying}})],1)},ae=[],ie={name:"Home",components:{FileSelector:z,PreviewTable:te},data(){return{tableData:[],playing_url:"",playing_auto:!1,filename_policy:Y["e"].ArtistAndTitle,instant_save:!1,FilenamePolicies:Y["d"],dir:null}},watch:{instant_save(e){e&&this.showDirectlySave()}},methods:{async showSuccess(e){this.instant_save?(await this.saveFile(e),Object(Y["f"])(e)):(this.tableData.push(e),this.$notify.success({title:"解锁成功",message:"成功解锁 "+e.title,duration:3e3}));{let t=[e.title,e.artist,e.album];window._paq.push(["trackEvent","Unlock",e.rawExt+","+e.mime,JSON.stringify(t)])}},showFail(e,t){console.error(e,t),this.$notify.error({title:"出现问题",message:e+""+t+',参考<a target="_blank" href="https://github.com/ix64/unlock-music/wiki/使用提示">使用提示</a>',dangerouslyUseHTMLString:!0,duration:6e3}),window._paq.push(["trackEvent","Error",String(e),t])},changePlaying(e){this.playing_url=e,this.playing_auto=!0},handleDeleteAll(){this.tableData.forEach(e=>{Object(Y["f"])(e)}),this.tableData=[]},handleDownloadAll(){let e=0,t=setInterval(()=>{e<this.tableData.length?(this.saveFile(this.tableData[e]),e++):clearInterval(t)},300)},async saveFile(e){this.dir?(await Object(Y["b"])(e,this.filename_policy,this.dir),this.$notify({title:"保存成功",message:e.title,position:"top-left",type:"success",duration:3e3})):Object(Y["c"])(e,this.filename_policy)},async showDirectlySave(){if(window.showDirectoryPicker){try{await this.$confirm("您的浏览器支持文件直接保存到磁盘,是否使用?","新特性提示",{confirmButtonText:"使用",cancelButtonText:"不使用",type:"warning",center:!0})}catch(e){return void console.log(e)}try{this.dir=await window.showDirectoryPicker();const e="__unlock_music_write_test.txt";await this.dir.getFileHandle(e,{create:!0}),await this.dir.removeEntry(e)}catch(e){console.error(e)}}}}},ce=ie,oe=Object(Q["a"])(ce,re,ae,!1,null,null,null),se=oe.exports,le=n("97e5"),ue={name:"app",components:{FileSelector:z,PreviewTable:te,Home:se},data(){return{version:ne.version}},created(){this.$nextTick(()=>this.finishLoad())},methods:{async finishLoad(){const e=document.getElementById("loader-mask");let t;e&&e.remove();try{t=await Object(le["a"])(this.version)}catch(n){console.warn("check version info failed",n)}t&&(t.HttpsFound||t.Found&&"https:"!==window.location.protocol)?this.$notify.warning({title:"发现更新",message:`发现新版本 v${t.Version}<br/>更新详情:${t.Detail}<br/> <a target="_blank" href="${t.URL}">获取更新</a>`,dangerouslyUseHTMLString:!0,duration:15e3,position:"top-left"}):this.$notify.info({title:"离线使用",message:`我们使用PWA技术无网络也能使用<br/>最近更新:${ne.updateInfo}<br/><a target="_blank" href="https://github.com/ix64/unlock-music/wiki/使用提示">使用提示</a>`,dangerouslyUseHTMLString:!0,duration:1e4,position:"top-left"})}}},fe=ue,de=(n("5c0b"),Object(Q["a"])(fe,I,M,!1,null,null,null)),me=de.exports,be=n("9483");"https:"===window.location.protocol&&Object(be["a"])("service-worker.js",{ready(){console.log("App is being served from cache by a service worker.")},registered(){console.log("Service worker has been registered.")},cached(){console.log("Content has been cached for offline use.")},updatefound(){console.log("New content is downloading.")},updated(){console.log("New content is available."),window.location.reload()},offline(){console.log("No internet connection found. App is running in offline mode.")},error(e){console.error("Error during service worker registration:",e)}}),C["default"].use($.a),C["default"].use(R.a),C["default"].use(B.a),C["default"].use(L.a),C["default"].use(E.a),C["default"].use(U.a),C["default"].use(A.a),C["default"].use(k.a),C["default"].use(_.a),C["default"].use(y.a),C["default"].use(w.a),C["default"].use(h.a),C["default"].use(b.a),C["default"].use(d.a),C["default"].use(u.a),C["default"].use(s.a),C["default"].prototype.$notify=c.a,C["default"].prototype.$confirm=a.a.confirm,C["default"].config.productionTip=!1,new C["default"]({render:function(e){return e(me)}}).$mount("#app")},eaa5:function(e,t,n){"use strict";n.d(t,"a",(function(){return P}));var r=n("9ab4"),a=(n("907a"),n("219c"),n("cc74")),i=n("cb96");function c(e,t,n,c){return void 0===c&&(c=!0),Object(r["a"])(this,void 0,Promise,(function(){var o,s,l,u,f,d,m;return Object(r["b"])(this,(function(r){switch(r.label){case 0:return o=n,c?(l=Uint8Array.bind,[4,Object(a["c"])(e)]):[3,2];case 1:s=new(l.apply(Uint8Array,[void 0,r.sent()])),o=Object(a["g"])(s,n),o!==n&&(e=new Blob([s],{type:a["a"][o]})),r.label=2;case 2:return[4,Object(i["parseBlob"])(e)];case 3:return u=r.sent(),f=Object(a["f"])(t,u.common.title,u.common.artist),d=f.title,m=f.artist,[2,{title:d,artist:m,ext:o,album:u.common.album,picture:Object(a["d"])(u),file:URL.createObjectURL(e),blob:e,mime:a["a"][o]}]}}))}))}var o=[105,102,109,116],s=[254,254,254,254],l={" WAV":".wav",FLAC:".flac"," MP3":".mp3"," A4M":".m4a"};function u(e,t,n){return Object(r["a"])(this,void 0,Promise,(function(){var u,f,d,m,b,p,h,v,w,g,y,O,_,j,k;return Object(r["b"])(this,(function(r){switch(r.label){case 0:return f=Uint8Array.bind,[4,Object(a["c"])(e)];case 1:if(u=new(f.apply(Uint8Array,[void 0,r.sent()])),Object(a["b"])(u,o)&&Object(a["b"])(u.slice(8,12),s))return[3,4];if("xm"!==n)return[3,2];throw Error("此xm文件已损坏");case 2:return[4,c(e,t,n,!0)];case 3:return[2,r.sent()];case 4:if(d=(new TextDecoder).decode(u.slice(4,8)),!l.hasOwnProperty(d))throw Error("未知的.xm文件类型");for(m=u[15],b=u[12]|u[13]<<8|u[14]<<16,p=u.slice(16),h=p.length,v=b;v<h;++v)p[v]=p[v]-m^255;return w=l[d],g=a["a"][w],y=new Blob([p],{type:g}),[4,Object(i["parseBlob"])(y)];case 5:return O=r.sent(),"wav"===w&&(console.info(O.common),O.common.album="",O.common.artist="",O.common.title=""),_=Object(a["f"])(t,O.common.title,O.common.artist,-1===t.indexOf("_")?"-":"_"),j=_.title,k=_.artist,[2,{title:j,artist:k,ext:w,mime:g,album:O.common.album,picture:Object(a["d"])(O),file:URL.createObjectURL(y),blob:y,rawExt:"xm"}]}}))}))}var f=n("8850");function d(e,t,n){return Object(r["a"])(this,void 0,Promise,(function(){var n,c,o,s,l,u,d,m,b,p,h;return Object(r["b"])(this,(function(r){switch(r.label){case 0:return c=Uint8Array.bind,[4,Object(a["c"])(e)];case 1:for(n=new(c.apply(Uint8Array,[void 0,r.sent()])),o=n.length,s=0;s<o;s++)n[s]^=244,n[s]<=63?n[s]=4*n[s]:n[s]<=127?n[s]=4*(n[s]-64)+1:n[s]<=191?n[s]=4*(n[s]-128)+2:n[s]=4*(n[s]-192)+3;if(l=Object(a["g"])(n,""),u=Object(a["h"])(t),""===l&&"mp3"!==u.ext){if(u.ext in f["b"])return d=new Blob([n],{type:"application/octet-stream"}),[2,Object(f["a"])(d,u.name,u.ext)];throw"不支持的QQ音乐缓存格式"}return d=new Blob([n],{type:a["a"][l]}),[4,Object(i["parseBlob"])(d)];case 2:return m=r.sent(),b=Object(a["f"])(t,m.common.title,m.common.artist),p=b.title,h=b.artist,[2,{title:p,artist:h,ext:l,album:m.common.album,picture:Object(a["d"])(m),file:URL.createObjectURL(d),blob:d,mime:a["a"][l]}]}}))}))}var m=n("9224"),b=[5,40,188,150,233,228,90,67,145,170,189,208,122,245,54,49],p=[124,213,50,235,134,2,127,75,168,175,166,142,15,255,153,20],h=[37,223,232,166,117,30,117,14,47,128,243,45,184,182,227,17,0];function v(e,t,n){return Object(r["a"])(this,void 0,Promise,(function(){var c,o,s,l,u,f,d,m,v,O,_,j,k,x,A,T,U;return Object(r["b"])(this,(function(r){switch(r.label){case 0:return o=Uint8Array.bind,[4,Object(a["c"])(e)];case 1:if(c=new(o.apply(Uint8Array,[void 0,r.sent()])),"vpr"===n){if(!Object(a["b"])(c,b))throw Error("Not a valid vpr file!")}else if(!Object(a["b"])(c,p))throw Error("Not a valid kgm(a) file!");if(s=new DataView(c.slice(16,20).buffer),l=s.getUint32(0,!0),u=c.slice(l),f=u.length,u.byteLength>1<<26)throw Error("文件过大,请使用 <a target='_blank' href='https://github.com/unlock-music/cli'>CLI版本</a> 进行解锁");return d=new Uint8Array(17),d.set(c.slice(28,44),0),0!==g.length?[3,3]:[4,y()];case 2:if(!r.sent())throw Error("加载Kgm/Vpr Mask数据失败");r.label=3;case 3:for(O=0;O<f;O++)m=d[O%17]^u[O],m^=(15&m)<<4,v=w(O),v^=(15&v)<<4,u[O]=m^v;if("vpr"===n)for(O=0;O<f;O++)u[O]^=h[O%17];return _=Object(a["g"])(u),j=a["a"][_],k=new Blob([u],{type:j}),[4,Object(i["parseBlob"])(k)];case 4:return x=r.sent(),A=Object(a["f"])(t,x.common.title,x.common.artist),T=A.title,U=A.artist,[2,{album:x.common.album,picture:Object(a["d"])(x),file:URL.createObjectURL(k),blob:k,ext:_,mime:j,title:T,artist:U}]}}))}))}function w(e){return O[e%272]^g[e>>4]}var g=new Uint8Array(0);function y(){return Object(r["a"])(this,void 0,Promise,(function(){var e,t,n,a;return Object(r["b"])(this,(function(r){switch(r.label){case 0:e="https://cdn.jsdelivr.net/gh/unlock-music/unlock-music@".concat(m.version,"/public/static/kgm.mask"),["http:","https:"].some((function(e){return e==self.location.protocol}))&&(e=self.document?"./static/kgm.mask":"../static/kgm.mask"),r.label=1;case 1:return r.trys.push([1,4,,5]),[4,fetch(e,{method:"GET"})];case 2:return t=r.sent(),n=Uint8Array.bind,[4,t.arrayBuffer()];case 3:return g=new(n.apply(Uint8Array,[void 0,r.sent()])),[2,!0];case 4:return a=r.sent(),console.error(a),[2,!1];case 5:return[2]}}))}))}var O=[184,213,61,178,233,175,120,140,131,51,113,81,118,160,205,55,47,62,53,141,169,190,152,183,231,140,34,206,90,97,223,104,105,137,254,165,182,222,169,119,252,200,189,189,229,109,62,90,54,239,105,78,190,225,233,102,28,243,217,2,182,242,18,155,68,208,111,185,53,137,182,70,109,115,130,6,105,193,237,215,133,194,48,223,162,98,190,121,45,98,98,61,13,126,190,72,137,35,2,160,228,213,117,81,50,2,83,253,22,58,33,59,22,15,195,178,187,179,226,186,58,61,19,236,246,1,69,132,165,112,15,147,73,12,100,205,49,213,204,76,7,1,158,0,26,35,144,191,136,30,59,171,166,62,196,115,71,16,126,59,94,188,227,0,132,255,9,212,224,137,15,91,88,112,79,251,101,216,92,83,27,211,200,198,191,239,152,176,80,79,15,234,229,131,88,140,40,44,132,103,205,208,158,71,219,39,80,202,244,99,99,232,151,127,27,75,12,194,193,33,76,204,88,245,148,82,163,243,211,224,104,244,0,35,243,94,10,123,147,221,171,18,178,19,232,132,215,167,159,15,50,76,85,29,4,54,82,220,3,243,249,78,66,233,61,97,239,124,182,179,147,80],_=[121,101,101,108,105,111,110,45,107,117,119,111,45,116,109,101],j="MoOtOiTvINGwd2E6n0E1i7L5t2IoOoNk";function k(e,t,n){return Object(r["a"])(this,void 0,Promise,(function(){var n,o,s,l,u,f,d,m,b,p,h,v,w,g;return Object(r["b"])(this,(function(r){switch(r.label){case 0:return o=Uint8Array.bind,[4,Object(a["c"])(e)];case 1:return n=new(o.apply(Uint8Array,[void 0,r.sent()])),Object(a["b"])(n,_)?[3,4]:"aac"!==Object(a["g"])(n)?[3,3]:[4,c(e,t,"aac",!1)];case 2:return[2,r.sent()];case 3:throw Error("not a valid kwm file");case 4:for(s=n.slice(24,32),l=x(s),u=n.slice(1024),f=u.length,d=0;d<f;++d)u[d]^=l[d%32];return m=Object(a["g"])(u),b=a["a"][m],p=new Blob([u],{type:b}),[4,Object(i["parseBlob"])(p)];case 5:return h=r.sent(),v=Object(a["f"])(t,h.common.title,h.common.artist),w=v.title,g=v.artist,[2,{album:h.common.album,picture:Object(a["d"])(h),file:URL.createObjectURL(p),blob:p,mime:b,title:w,artist:g,ext:m}]}}))}))}function x(e){for(var t=new DataView(e.buffer),n=t.getBigUint64(0,!0).toString(),r=A(n),a=new Uint8Array(32),i=0;i<32;i++)a[i]=j.charCodeAt(i)^r.charCodeAt(i);return a}function A(e){var t=e.length,n=e;return t>32?n=e.slice(0,32):t<32&&(n=e.padEnd(32,e)),n}var T=[0,0,0,32,102,116,121,112];function U(e,t){return Object(r["a"])(this,void 0,Promise,(function(){var n,i,o,s;return Object(r["b"])(this,(function(r){switch(r.label){case 0:return i=Uint8Array.bind,[4,Object(a["c"])(e)];case 1:for(n=new(i.apply(Uint8Array,[void 0,r.sent()])),o=0;o<8;++o)n[o]=T[o];return s=new Blob([n],{type:"audio/mp4"}),[4,c(s,t,"m4a",!1)];case 2:return[2,r.sent()]}}))}))}function P(e){return Object(r["a"])(this,void 0,Promise,(function(){var t,n,i;return Object(r["b"])(this,(function(r){switch(r.label){case 0:switch(t=Object(a["h"])(e.name),i=t.ext,i){case"kwm":return[3,1];case"xm":return[3,3];case"wav":return[3,3];case"mp3":return[3,3];case"flac":return[3,3];case"m4a":return[3,3];case"ogg":return[3,5];case"tm0":return[3,7];case"tm3":return[3,7];case"qmc3":return[3,9];case"qmc2":return[3,9];case"qmc0":return[3,9];case"qmcflac":return[3,9];case"qmcogg":return[3,9];case"tkm":return[3,9];case"bkcmp3":return[3,9];case"bkcflac":return[3,9];case"mflac":return[3,9];case"mflac0":return[3,9];case"mgg":return[3,9];case"mgg1":return[3,9];case"666c6163":return[3,9];case"6d7033":return[3,9];case"6f6767":return[3,9];case"6d3461":return[3,9];case"776176":return[3,9];case"tm2":return[3,11];case"tm6":return[3,11];case"cache":return[3,13];case"vpr":return[3,15];case"kgm":return[3,15];case"kgma":return[3,15]}return[3,17];case 1:return[4,k(e.raw,t.name,t.ext)];case 2:return n=r.sent(),[3,18];case 3:return[4,u(e.raw,t.name,t.ext)];case 4:return n=r.sent(),[3,18];case 5:return[4,c(e.raw,t.name,t.ext)];case 6:return n=r.sent(),[3,18];case 7:return[4,c(e.raw,t.name,"mp3")];case 8:return n=r.sent(),[3,18];case 9:return[4,Object(f["a"])(e.raw,t.name,t.ext)];case 10:return n=r.sent(),[3,18];case 11:return[4,U(e.raw,t.name)];case 12:return n=r.sent(),[3,18];case 13:return[4,d(e.raw,t.name,t.ext)];case 14:return n=r.sent(),[3,18];case 15:return[4,v(e.raw,t.name,t.ext)];case 16:return n=r.sent(),[3,18];case 17:throw"不支持此文件格式";case 18:return n.rawExt||(n.rawExt=t.ext),n.rawFilename||(n.rawFilename=t.name),console.log(n),[2,n]}}))}))}}});