2025-04-22 22:04:01 +08:00

166 lines
4.3 KiB
XML

<template>
<div class="wrapper">
<list class="list" bounces="false">
<list-item type="ceiling">
<input
type="button"
class="button"
value="下载数据{{fileList.length}}"
onclick="downloadFile(jsonDataList)"
/>
</list-item>
<list-item type="item" for="{{ fileList }}">
<text class="text">{{ $item.uri.split('/').pop() }}</text>
</list-item>
</list>
</div>
</template>
<script>
import fetch from '@blueos.network.fetch'
import prompt from '@blueos.window.prompt'
import file from '@blueos.storage.file'
import storage from '@blueos.storage.storage'
export default {
data: {
fileList: null,
jsonDataList: ['output_part_1.json', 'output_part_10.json', 'output_part_2.json', 'output_part_3.json', 'output_part_4.json', 'output_part_5.json', 'output_part_6.json', 'output_part_7.json', 'output_part_8.json', 'output_part_9.json', 'a.json', 'b.json', 'c.json', 'd.json', 'e.json', 'f.json', 'g.json', 'h.json', 'i.json', 'j.json', 'k.json', 'l.json', 'm.json', 'n.json', 'o.json', 'p.json', 'q.json', 'r.json', 's.json', 't.json', 'u.json', 'v.json', 'w.json', 'x.json', 'y.json', 'z.json'],
},
onInit() {
file.list({
uri: 'internal://files/',
success: (data) => {
this.fileList = data.fileList;
}
})
},
async fetchPromise(options) {
return new Promise((resolve, reject) => {
fetch.fetch({
...options,
success: resolve,
fail: reject,
});
});
},
async writeTextPromise(options) {
return new Promise((resolve, reject) => {
file.writeText({
...options,
success: resolve,
fail: (data, code) => reject({ data, code }),
});
});
},
async writeArrayBufferPromise(options) {
return new Promise((resolve, reject) => {
file.writeArrayBuffer({
...options,
success: resolve,
fail: (data, code) => reject({ data, code }),
});
});
},
async getFile(fileName) {
return new Promise((resolve, reject) => {
file.get({
uri: `internal://files/${fileName}`,
success: () => {
resolve(true);
},
fail: (_, code) => {
reject(`handling fail, code = ${code}`);
},
});
});
},
async downloadFile(data) {
prompt.showToast({ message: "开始下载" });
let totalNum = data.length;
let hasDownload = 0;
for (let i = 0; i < totalNum; i++) {
const fileName = data[i];
let isInFile = false;
try {
isInFile = await this.getFile(fileName);
} catch (error) {
console.log(error);
}
if (isInFile) hasDownload++;
if (!isInFile) {
try {
let fileUri = `internal://files/${fileName}`;
let baseUrl = 'http://download.chorblack.top'
const chunkResponse = await this.fetchPromise({
url: `${baseUrl}/pd/local/dictionary/${fileName}`,
responseType: "arraybuffer",
});
const textData = chunkResponse.data;
/*
await this.writeTextPromise({
uri: fileUri,
text: textData,
});
*/
await this.writeArrayBufferPromise({
uri: fileUri,
buffer: new Uint8Array(textData),
});
prompt.showToast({
message: `${data.length - i - 1}`
})
hasDownload++;
} catch (error) {
//prompt.showToast({message:`: ${error}`});
console.error(`: ${fileName}`, error);
}
file.list({
uri: 'internal://files/',
success: (data) => {
this.fileList = data.fileList;
}
})
}
}
if (hasDownload == totalNum) {
prompt.showToast({ message: "下载完成" });
storage.set({
key: 'isFinish',
value: '1',
})
}
},
}
</script>
<style>
.wrapper {
flex-direction: column;
}
.text {
height: 180px;
width: 466px;
text-align: center;
font-size: 40px;
background-color: #203a43;
color: #ffffff;
border-bottom: 1px solid #2c5364;
}
.title {
background-color: #0f2027;
}
.ceiling {
position: fixed;
top: 0;
left: 0;
}
.button {
width: 466px;
height: 80px;
align-items: center;
color: #ffffff;
background-color: #1890ff;
}
</style>