added silent mode to the block data transfer API

This commit is contained in:
Bogdan Pilyugin 2024-03-28 16:04:41 +02:00
parent 2431f43f73
commit 6e57bb53e2
2 changed files with 23 additions and 20 deletions

View File

@ -15,17 +15,12 @@
<q-btn class="btn q-ma-xs" flat label="DOWNLOAD" @click="DownloadFile"></q-btn> <q-btn class="btn q-ma-xs" flat label="DOWNLOAD" @click="DownloadFile"></q-btn>
<q-btn class="btn q-ma-xs" flat label="UPLOAD" @click="UploadFile"></q-btn> <q-btn class="btn q-ma-xs" flat label="UPLOAD" @click="UploadFile"></q-btn>
<q-btn class="btn q-ma-xs" flat label="DELETE" @click="DeleteFile"></q-btn> <q-btn class="btn q-ma-xs" flat label="DELETE" @click="DeleteFile"></q-btn>
<q-btn class="btn q-ma-xs" flat label="GET ART" @click="GetArtnetTest"></q-btn>
<q-btn class="btn q-ma-xs" flat label="PUT ART" @click="PutArtnetTest"></q-btn>
</div> </div>
</q-card-section> </q-card-section>
</q-card> </q-card>
</template> </template>
<script setup> <script setup>
import { GetArtnetTest, PutArtnetTest } from "assets/dimmer"
import { computed, onUnmounted, reactive, onMounted, ref } from "vue"; import { computed, onUnmounted, reactive, onMounted, ref } from "vue";
import { GetBlockObject, PutBlockObject, PostData } from "components/webguicomp//network"; import { GetBlockObject, PutBlockObject, PostData } from "components/webguicomp//network";
import { useQuasar, Dialog } from 'quasar'; import { useQuasar, Dialog } from 'quasar';
@ -66,13 +61,13 @@ async function DownloadFile() {
if (selected.value[0]) { if (selected.value[0]) {
const buf = new Uint8Array(selected.value[0].size); const buf = new Uint8Array(selected.value[0].size);
//await ReveiveFileChunks(buf); //await ReveiveFileChunks(buf);
await GetBlockObject('file_block', selected.value[0].name, selected.value[0].size, buf); await GetBlockObject('file_block', selected.value[0].name, selected.value[0].size, buf, true);
SaveFile(buf, selected.value[0].name); SaveFile(buf, selected.value[0].name);
} }
} }
async function SendFile(buf) { async function SendFile(buf) {
await PutBlockObject('file_block', file.value.name, file.value.size, buf); await PutBlockObject('file_block', file.value.name, file.value.size, buf, true);
PostData(data, 2, 0, null); PostData(data, 2, 0, null);
} }

View File

@ -33,18 +33,20 @@ function base64ToArrayBuffer(base64) {
return bytes; return bytes;
} }
async function GetBlockObject(namespase, name, size, buf) { async function GetBlockObject(namespase, name, size, buf, verb) {
let partsnum = Math.floor(size / BLOCK_SIZE); let partsnum = Math.floor(size / BLOCK_SIZE);
if (size % BLOCK_SIZE) if (size % BLOCK_SIZE)
partsnum++; partsnum++;
console.log(`Found ${partsnum} blocks in file ${name}`) console.log(`Found ${partsnum} blocks in file ${name}`)
let i; let i;
let resp; let resp, dialog;
const dialog = Dialog.create({ message: `File "${name}" download 0%`, progress: true, persistent: true, ok: false, style: 'border: none; box-shadow: none;' }) if (verb)
dialog = Dialog.create({ message: `File "${name}" download 0%`, progress: true, persistent: true, ok: false, style: 'border: none; box-shadow: none;' })
for (i = 0; i < partsnum; i++) { for (i = 0; i < partsnum; i++) {
resp = await ReceiveChunk(i, partsnum, name, namespase); resp = await ReceiveChunk(i, partsnum, name, namespase);
if (typeof resp[namespase] === 'string' || resp[namespase] instanceof String) { if (typeof resp[namespase] === 'string' || resp[namespase] instanceof String) {
dialog.hide(); if (verb)
dialog.hide();
Notify.create({ color: "negative", position: "top", message: resp[namespase], icon: "report_problem", }); Notify.create({ color: "negative", position: "top", message: resp[namespase], icon: "report_problem", });
return; return;
} }
@ -52,9 +54,11 @@ async function GetBlockObject(namespase, name, size, buf) {
let decoded = base64ToArrayBuffer(resp[namespase].dat); let decoded = base64ToArrayBuffer(resp[namespase].dat);
for (let k = 0; k < decoded.byteLength; k++) for (let k = 0; k < decoded.byteLength; k++)
buf[i * BLOCK_SIZE + k] = decoded[k]; buf[i * BLOCK_SIZE + k] = decoded[k];
dialog.update({ message: `File "${name}" download ${Math.floor(i * 100 / partsnum)}%` }) if (verb)
dialog.update({ message: `File "${name}" download ${Math.floor(i * 100 / partsnum)}%` })
} }
dialog.hide(); if (verb)
dialog.hide();
} }
function ToBase64(bytes) { function ToBase64(bytes) {
@ -82,7 +86,7 @@ function SendChunk(cur, total, name, namespase, buf) {
part: cur, part: cur,
parts: total, parts: total,
mem_object: name, mem_object: name,
size: length, size: arr.byteLength,
dat: encode dat: encode
} }
}; };
@ -92,24 +96,28 @@ function SendChunk(cur, total, name, namespase, buf) {
}) })
} }
async function PutBlockObject(namespase, name, size, buf) { async function PutBlockObject(namespase, name, size, buf, verb) {
let partsnum = Math.floor(size / BLOCK_SIZE); let partsnum = Math.floor(size / BLOCK_SIZE);
if (size % BLOCK_SIZE) if (size % BLOCK_SIZE)
partsnum++; partsnum++;
console.log(`Found ${partsnum} blocks in file`) console.log(`Found ${partsnum} blocks in file`)
let i; let i;
let resp; let resp, dialog;
const dialog = Dialog.create({ message: `File "${name}" upload 0%`, progress: true, persistent: true, ok: false, style: 'border: none; box-shadow: none;' }) if (verb)
dialog = Dialog.create({ message: `File "${name}" upload 0%`, progress: true, persistent: true, ok: false, style: 'border: none; box-shadow: none;' })
for (i = 0; i < partsnum; i++) { for (i = 0; i < partsnum; i++) {
resp = await SendChunk(i, partsnum, name, namespase, buf); resp = await SendChunk(i, partsnum, name, namespase, buf);
if (typeof resp[namespase] === 'string' || resp[namespase] instanceof String) { if (typeof resp[namespase] === 'string' || resp[namespase] instanceof String) {
dialog.hide(); if (verb)
dialog.hide();
Notify.create({ color: "negative", position: "top", message: resp[namespase], icon: "report_problem", }); Notify.create({ color: "negative", position: "top", message: resp[namespase], icon: "report_problem", });
return; return;
} }
dialog.update({ message: `File "${name}" upload ${Math.floor(i * 100 / partsnum)}%` }) if (verb)
dialog.update({ message: `File "${name}" upload ${Math.floor(i * 100 / partsnum)}%` })
} }
dialog.hide(); if (verb)
dialog.hide();
} }
function PostDataControlled(varlist, messtype, applytype, onfinished, enable) { function PostDataControlled(varlist, messtype, applytype, onfinished, enable) {