|
@@ -23,7 +23,6 @@ const router = useRouter();
|
|
|
import { getStudents, countStudents, getPackages } from "@/api/api";
|
|
|
import { httpApp } from "@/plugins/axiosApp";
|
|
|
import mustache from "mustache";
|
|
|
-import { ImageParams } from "@/types";
|
|
|
|
|
|
async function getImageDim(
|
|
|
blob: Blob
|
|
@@ -69,44 +68,6 @@ async function cacheImages(urls: string) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-const taskQueue = [] as Array<ImageParams>;
|
|
|
-// 批量处理水印
|
|
|
-async function batchWaterMarkImages() {
|
|
|
- const MAX_CONCURRENT = 1;
|
|
|
- console.log("start batchWaterMarkImages", taskQueue.length);
|
|
|
-
|
|
|
- async function sleep() {
|
|
|
- if (!doneFetch.value && taskQueue.length === 0) {
|
|
|
- console.log("sleep because taskQueue is empty ", taskQueue.length);
|
|
|
- await new Promise((res) => setTimeout(res, 300));
|
|
|
- await sleep();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- // 如果网络取完了,永不sleep
|
|
|
- if (!doneFetch.value) {
|
|
|
- await sleep();
|
|
|
- }
|
|
|
- const toProcessTasks = taskQueue.splice(0, MAX_CONCURRENT);
|
|
|
- try {
|
|
|
- console.log(toProcessTasks);
|
|
|
- await window.electron.addWatermarkBatch(toProcessTasks);
|
|
|
- } catch (error) {
|
|
|
- console.log(error);
|
|
|
- }
|
|
|
-
|
|
|
- if (finished.value) {
|
|
|
- console.log("被异常结束");
|
|
|
- } else if (doneFetch.value && taskQueue.length === 0) {
|
|
|
- finished.value = true;
|
|
|
- } else {
|
|
|
- console.log("继续batchWaterMarkImages ", taskQueue.length);
|
|
|
- await batchWaterMarkImages();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-let finished = ref(false); // 下载结束,无论有错误终止,还是完整下载完毕
|
|
|
-let doneFetch = ref(false); // 下载结束,无论有错误终止,还是完整下载完毕
|
|
|
const totalCount = ref(0);
|
|
|
let finishedCount = ref(0);
|
|
|
let errorCount = ref(0);
|
|
@@ -118,7 +79,6 @@ onMounted(async () => {
|
|
|
try {
|
|
|
if (config.type === "1") {
|
|
|
console.log("download start ", Date.now());
|
|
|
- batchWaterMarkImages();
|
|
|
const res = await countStudents(store.env.examId, {
|
|
|
upload: true,
|
|
|
withSheetUrl: true,
|
|
@@ -184,24 +144,21 @@ onMounted(async () => {
|
|
|
// console.log(await imageRes.data.arrayBuffer());
|
|
|
// console.log(new Uint8Array(await imageRes.data.arrayBuffer()));
|
|
|
|
|
|
- taskQueue.push({
|
|
|
- store: storePassedToNodeJs,
|
|
|
- imageData: arrayBuffer,
|
|
|
- imageWidth: width,
|
|
|
- imageHeight: height,
|
|
|
- file: filePath,
|
|
|
+ await window.electron.addWatermark(
|
|
|
+ storePassedToNodeJs,
|
|
|
+ arrayBuffer,
|
|
|
+ width,
|
|
|
+ height,
|
|
|
+ filePath,
|
|
|
student,
|
|
|
- index: index + 1,
|
|
|
- trackMode: config.trackMode,
|
|
|
- x: config.x,
|
|
|
- y: config.y,
|
|
|
- });
|
|
|
-
|
|
|
- // await window.electron.addWatermark();
|
|
|
+ index + 1,
|
|
|
+ config.trackMode,
|
|
|
+ config.x,
|
|
|
+ config.y
|
|
|
+ );
|
|
|
} catch (error) {
|
|
|
errorCount.value += 1;
|
|
|
if (config.failover) {
|
|
|
- finished.value = true;
|
|
|
throw error;
|
|
|
} else {
|
|
|
console.log(student, error);
|
|
@@ -209,35 +166,21 @@ onMounted(async () => {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- // // 下载完一个学生
|
|
|
+ // 下载完一个学生
|
|
|
finishedCount.value += 1;
|
|
|
-
|
|
|
- // 等待照片水印处理,以免进度过快
|
|
|
- const sleep = async () => {
|
|
|
- console.log(
|
|
|
- "sleep because network too fast, taskQueue.length",
|
|
|
- taskQueue.length
|
|
|
- );
|
|
|
- if (taskQueue.length > 20) {
|
|
|
- await new Promise((res) => setTimeout(res, 300));
|
|
|
- await sleep();
|
|
|
- }
|
|
|
- };
|
|
|
- await sleep();
|
|
|
}
|
|
|
}
|
|
|
- doneFetch.value = true;
|
|
|
- console.log("network end ", Date.now());
|
|
|
+ console.log("all end ", Date.now());
|
|
|
} else if (config.type === "2") {
|
|
|
await processPackage();
|
|
|
}
|
|
|
|
|
|
- // const modal = Modal.success({});
|
|
|
- // modal.update({
|
|
|
- // title: "图片下载完成",
|
|
|
- // content: "完成",
|
|
|
- // onOk: () => router.back(),
|
|
|
- // });
|
|
|
+ const modal = Modal.success({});
|
|
|
+ modal.update({
|
|
|
+ title: "图片下载完成",
|
|
|
+ content: "完成",
|
|
|
+ onOk: () => router.back(),
|
|
|
+ });
|
|
|
} catch (error) {
|
|
|
const modal = Modal.error({});
|
|
|
console.log(error);
|
|
@@ -249,17 +192,6 @@ onMounted(async () => {
|
|
|
}
|
|
|
});
|
|
|
|
|
|
-// 只有config==1才会用到
|
|
|
-watch(finished, () => {
|
|
|
- const modal = Modal.success({});
|
|
|
- modal.update({
|
|
|
- title: "图片下载完成",
|
|
|
- content: "完成",
|
|
|
- onOk: () => router.back(),
|
|
|
- });
|
|
|
- console.log("all end ", Date.now());
|
|
|
-});
|
|
|
-
|
|
|
async function processPackage() {
|
|
|
const res = await getPackages(store.env.examId, true, true);
|
|
|
const array = res.data;
|
|
@@ -305,12 +237,5 @@ async function processPackage() {
|
|
|
}
|
|
|
finishedCount.value += 1;
|
|
|
}
|
|
|
-
|
|
|
- const modal = Modal.success({});
|
|
|
- modal.update({
|
|
|
- title: "图片下载完成",
|
|
|
- content: "完成",
|
|
|
- onOk: () => router.back(),
|
|
|
- });
|
|
|
}
|
|
|
</script>
|