This commit is contained in:
Emmm Monster
2021-05-24 23:48:52 +08:00
parent c7e5dfb4c4
commit 759c1bd87e
9 changed files with 230 additions and 164 deletions

View File

@@ -22,7 +22,7 @@
<script>
import {spawn, Worker, Pool} from "threads"
import {CommonDecrypt} from "@/decrypt/common.ts";
import {DecryptQueue} from "@/component/utils";
import {DecryptQueue} from "@/utils/utils";
export default {
name: "FileSelector",
@@ -42,10 +42,10 @@ export default {
}
},
mounted() {
if (window.Worker) {
if (window.Worker && process.env.NODE_ENV === 'production') {
console.log("Using Worker Pool")
this.queue = Pool(
() => spawn(new Worker('@/component/worker.ts')),
() => spawn(new Worker('@/utils/worker.ts')),
navigator.hardwareConcurrency || 1
)
} else {
@@ -64,7 +64,7 @@ export default {
this.$emit("success", await dec(file));
} catch (e) {
console.error(e)
this.$emit("error", file)
this.$emit("error", e, file.name)
} finally {
this.task_finished++
}

View File

@@ -11,22 +11,22 @@
</template>
</el-table-column>
<el-table-column label="歌曲">
<template slot-scope="scope">
<template #default="scope">
<span>{{ scope.row.title }}</span>
</template>
</el-table-column>
<el-table-column label="歌手">
<template slot-scope="scope">
<template #default="scope">
<p>{{ scope.row.artist }}</p>
</template>
</el-table-column>
<el-table-column label="专辑">
<template slot-scope="scope">
<template #default="scope">
<p>{{ scope.row.album }}</p>
</template>
</el-table-column>
<el-table-column label="操作">
<template slot-scope="scope">
<template #default="scope">
<el-button circle
icon="el-icon-video-play" type="success" @click="handlePlay(scope.$index, scope.row)">
</el-button>
@@ -42,25 +42,25 @@
</template>
<script>
import {DownloadBlobMusic, RemoveBlobMusic} from '@/component/utils'
import {DownloadBlobMusic, RemoveBlobMusic} from '@/utils/utils'
export default {
name: "PreviewTable",
props: {
tableData: {type: Array, required: true},
filename_format: {type: String, required: true}
policy: {type: Number, required: true}
},
methods: {
handlePlay(index, row) {
this.$emit("music_changed", row.file);
this.$emit("play", row.file);
},
handleDelete(index, row) {
RemoveBlobMusic(row);
this.tableData.splice(index, 1);
},
handleDownload(row) {
DownloadBlobMusic(row, this.download_format)
DownloadBlobMusic(row, this.policy)
},
}
}

View File

@@ -1,49 +0,0 @@
import {DecryptResult} from "@/decrypt/entity";
export function DownloadBlobMusic(data: DecryptResult, format: string) {//todo: use enum
const a = document.createElement('a');
a.href = data.file;
switch (format) {
default:
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();
a.remove();
}
export function RemoveBlobMusic(data: DecryptResult) {
URL.revokeObjectURL(data.file);
if (data.picture?.startsWith("blob:")) {
URL.revokeObjectURL(data.picture);
}
}
export class DecryptQueue {
private readonly pending: (() => Promise<void>)[];
constructor() {
this.pending = []
}
queue(fn: () => Promise<void>) {
this.pending.push(fn)
this.consume()
}
private consume() {
const fn = this.pending.shift()
if (fn) fn().then(() => this.consume).catch(console.error)
}
}

View File

@@ -1,4 +0,0 @@
import {expose} from "threads/worker";
import {CommonDecrypt} from "@/decrypt/common";
expose(CommonDecrypt)