whale-plus
Version:
A Component Library for Vue 3
98 lines (93 loc) • 2.79 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var TaskQueue = require('../upload-core/TaskQueue.js');
var EventEmitter = require('../upload-core/EventEmitter.js');
var MultiThreadSplitor = require('./split/imp-work/MultiThreadSplitor.js');
var testRequest = require('./testRequest.js');
class MaxFileUpload {
constructor(file) {
this.token = "";
this.uploadEmitter = new EventEmitter.EventEmitter();
this.chunkSize = 5 * 1024 * 1024;
this.fileListener = null;
this.file = file;
this.requestStrategy = new testRequest.TestRequest();
this.taskQueue = new TaskQueue.TaskQueue(4);
this.splitStrategy = new MultiThreadSplitor.MultiThreadSplitor(this.file, this.chunkSize);
}
setFileListener(listener) {
this.fileListener = listener;
return this;
}
setRequestStrategy(requestStrategy) {
this.requestStrategy = requestStrategy;
return this;
}
setSplitStrategy(splitStrategy) {
this.splitStrategy = splitStrategy;
return this;
}
setTaskQueue(taskQueue) {
this.taskQueue = taskQueue;
return this;
}
setFile(file) {
this.file = file;
return this;
}
setToken(token) {
this.token = token;
return this;
}
setChunkSize(chunkSize) {
this.chunkSize = chunkSize;
return this;
}
static with(file) {
return new MaxFileUpload(file);
}
async start() {
this.token = await this.requestStrategy.createFile(this.file);
this.splitStrategy.split();
this.splitStrategy.on("chunks", this.handleChunks.bind(this));
this.splitStrategy.on("wholeHash", this.handleWholeHash.bind(this));
this.uploadEmitter.on("end", (chunk) => {
var _a;
if ((_a = this.fileListener) == null ? void 0 : _a.uploadSuccessListener) {
this.fileListener.uploadSuccessListener(chunk);
}
});
}
handleChunks(chunks) {
var _a;
if ((_a = this.fileListener) == null ? void 0 : _a.chunkListener) {
this.fileListener.chunkListener(chunks);
}
chunks.forEach((chunk) => {
this.taskQueue.addAndStart(new TaskQueue.Task(this.uploadChunk.bind(this), chunk));
});
}
async uploadChunk(chunk) {
const resp = await this.requestStrategy.patchHash(
this.token,
chunk.hash,
"chunk"
);
if (resp.hasFile) {
return;
}
await this.requestStrategy.uploadChunk(chunk, this.uploadEmitter);
}
async handleWholeHash(hash) {
var _a;
if ((_a = this.fileListener) == null ? void 0 : _a.chunkEndListener) {
this.fileListener.chunkEndListener(hash);
}
const resp = await this.requestStrategy.patchHash(this.token, hash, "file");
if (resp.hasFile) {
return;
}
}
}
exports.MaxFileUpload = MaxFileUpload;
//# sourceMappingURL=MaxFileUpload.js.map