decord/alpha/source/lib/uploader/UploaderBase.tsx
2026-10-12 06:59:38 +00:00

496 lines
17 KiB
TypeScript

// Module ID: 9701
// Function ID: 9702
// Name: UploaderBase
// Dependencies: [5, 1085, 5085, 3, 580, 12, 7790, 7767, 7768, 2]
// Module 9701 (UploaderBase)
import LoggerDefault from "Logger" /* 3 */;
import _modDef12 from "module_12" /* 12 */;
import _mod580 from "module_580" /* 580 */;
import Constants from "Constants" /* 1085 */;
import MessageConstants from "MessageConstants" /* 5085 */;
import uploader_UploadUtils from "uploader/UploadUtils" /* 7767 */;
import UploadTargets from "UploadTargets" /* 7790 */;
import _asyncToGenerator from "_asyncToGenerator" /* 5 */;
import size from "module_2" /* 2 */;
let c2, c8, c9, constants, id, logger;
const AbortCodes = Constants.AbortCodes;
const FileUploadErrorTypes = MessageConstants.FileUploadErrorTypes;
const tmp2 = new LoggerDefault("UploaderBase.tsx");
const metroRequire = tmp2;
const EventEmitter = _mod580.EventEmitter;
class UploaderBase extends EventEmitter {
constructor() {
const tmp3 = new UploaderBase(tmp2, new.target, this, tmp);
let closure_0 = tmp3;
tmp3._aborted = false;
tmp3._errored = false;
tmp3.files = [];
tmp3._lastUpdate = 0;
tmp3._loaded = 0;
tmp3.alreadyStarted = false;
tmp3._handleStart = function _handleStart(c5) {
closure_0._cancel = c5;
if (!closure_0.alreadyStarted) {
closure_0.emit("start", closure_0._file);
}
closure_0.alreadyStarted = true;
};
tmp3._handleProgress = function _handleProgress(loaded, total, arg2) {
closure_0 = arg2;
const timestamp = Date.now();
const obj = uploader_UploadUtils;
const calculateProgressResult = obj.calculateProgress(loaded, total);
const rounded = Math.floor((loaded - closure_0._loaded) / ((timestamp - closure_0._lastUpdate) / 1000));
if (null != arg2) {
const items = obj2._file.items;
if (items != null) {
const item = items.forEach((item) => {
item.item.progress = closure_0[item.id];
});
}
}
closure_0._lastUpdate = timestamp;
closure_0._loaded = loaded;
const obj3 = { currentSize: total, progress: calculateProgressResult, rate: rounded };
const merged = Object.assign(obj2._file);
closure_0._file = obj3;
closure_0.emit("progress", closure_0._file);
};
tmp3._handleException = function _handleException(arg0, INVALID_FILE_ASSET) {
const obj = { code: INVALID_FILE_ASSET, reason: { type: FileUploadErrorTypes.ERROR_SOURCE_UNKNOWN, msg: arg0.toString() } };
({ type: FileUploadErrorTypes.ERROR_SOURCE_UNKNOWN, msg: arg0.toString() });
closure_0._handleError(obj);
};
tmp3._handleAborted = function _handleAborted() {
const result = closure_0.clearProcessingMessageInterval();
};
tmp3._handleError = function _handleError(arg0) {
let body;
let code;
let reason;
({ code, reason, body } = arg0);
const result = closure_0.clearProcessingMessageInterval();
if (!closure_0._aborted) {
closure_0._errored = true;
const _JSON = JSON;
const _HermesInternal = HermesInternal;
logger.log("_handleError: " + code + " (" + JSON.stringify(reason) + ") for " + closure_0.id);
closure_0.emit("error", closure_0._file, code, body, reason);
closure_0.removeAllListeners();
}
};
tmp3._handleComplete = function _handleComplete(arg0) {
const result = closure_0.clearProcessingMessageInterval();
logger.log("_handleComplete for " + closure_0.id);
closure_0.emit("complete", closure_0._file, arg0);
closure_0.removeAllListeners();
};
let obj = _modDef12;
tmp3.id = obj.uniqueId("Uploader");
tmp3._file = { id: tmp3.id, currentSize: 0, totalPreCompressionSize: 0, compressionProgress: 0, progress: 0, rate: 0, hasImage: false, hasVideo: false, attachmentsCount: 0, items: "code" };
return tmp3;
}
_fileSize() {
const files = this.files;
return files.reduce((acc, currentSize) => {
let num = currentSize.currentSize;
if (num == null) {
num = 0;
}
return acc + num;
}, 0);
}
compressAndCheckFileSize() {
let obj = arg0;
if (arg0 === undefined) {
obj = {};
}
let flag = obj.deferTotalSizeCheckUntilAfterCompression;
if (flag === undefined) {
flag = false;
}
const self = this;
return (async (arg0, value) => {
let files;
let obj8;
let setUploadingTextForUI;
if (c9 === 2) {
c9 = 3;
throw new TypeError("Generator functions may not be called on executing generators");
} else if (tmp3 === 3) {
if (arg0 === 1) {
throw value;
} else if (arg0 === 2) {
const obj2 = { value, done: true };
return obj2;
} else {
return { value: "IconComponent", done: null };
}
} else {
let c7;
try {
let constants2;
let uploadTarget;
let files2;
let maxFileSize;
c9 = 2;
if (0 === c8) {
if (arg0 === 1) {
c9 = 3;
throw value;
} else if (arg0 === 2) {
c9 = 3;
const obj3 = { value, done: true };
return obj3;
} else {
constants2 = tmp;
constants = tmp4;
uploadTarget = undefined;
files2 = undefined;
maxFileSize = undefined;
const first = self.files[0];
let target;
const getUploadTarget = closure_0(c2[6]).getUploadTarget;
const tmp78 = closure_0(c2[6]);
if (first != null) {
const item = first.item;
if (item != null) {
target = item.target;
}
}
uploadTarget = getUploadTarget(target);
if (self.files.length > uploadTarget.getMaxAttachmentsCount()) {
const _HermesInternal2 = HermesInternal;
logger.log("Too many attachments for " + self.id);
const obj4 = { code: constants.TOO_MANY_ATTACHMENTS };
self._handleError(obj4);
c9 = 3;
return { value: false, done: true };
} else {
const _HermesInternal3 = HermesInternal;
logger.log("compressing files for " + self.id);
files2 = self.files;
closure_0 = files2[Symbol.iterator]();
}
}
} else if (1 === c8) {
c7 = 0;
closure_0.return();
throw logger;
} else if (2 === c8) {
c7 = 1;
let closure_3 = logger;
if (files2.isCancelled()) {
c7 = 0;
} else {
closure_133_1._handleException(closure_3, constants.INVALID_FILE_ASSET);
c7 = 0;
closure_0.return();
c9 = 3;
return { value: false, done: true };
}
} else if (arg0 === 1) {
c9 = 3;
throw value;
} else if (arg0 === 2) {
c7 = 0;
closure_0.return();
c9 = 3;
const obj5 = { value, done: true };
return obj5;
} else {
if (files2.isCancelled()) {
const _HermesInternal = HermesInternal;
logger.log("compressAndCheckFileSize() file has been cancelled for compression - " + files2.id);
c7 = 0;
} else {
const currentSize = files2.currentSize;
c2 = currentSize;
if (currentSize == null) {
c2 = 0;
}
if (0 === c2) {
const obj6 = { code: constants.ENTITY_EMPTY };
closure_133_1._handleError(obj6);
c7 = 0;
closure_0.return();
c9 = 3;
return { value: false, done: true };
} else {
maxFileSize = uploadTarget.getMaxFileSize(files2.channelId);
const currentSize2 = files2.currentSize;
let c3 = currentSize2;
if (currentSize2 == null) {
c3 = 0;
}
if (c3 > maxFileSize) {
const obj = { isCompressionComplete: files.every((reactNativeFilePrepped) => reactNativeFilePrepped.reactNativeFilePrepped) };
({ files, setUploadingTextForUI } = closure_133_1);
const result = setUploadingTextForUI(obj);
const obj7 = { code: constants.ENTITY_TOO_LARGE, reason: obj8 };
obj8 = { type: constants2.POSTCOMPRESSION_INDIVIDUAL_FILE_TOO_LARGE };
closure_133_1._handleError(obj7);
c7 = 0;
closure_0.return();
c9 = 3;
return { value: false, done: true };
} else {
c7 = 1;
}
}
}
c7 = 0;
}
if (closure_0 === undefined) {
const result1 = closure_133_0 || closure_133_1.checkTotalAttachmentSize();
c9 = 3;
const obj9 = { value: result1, done: true };
return obj9;
} else {
c7 = 1;
files2 = tmp47;
if (!files2.isCancelled()) {
c7 = 2;
c8 = 3;
c9 = 1;
const obj10 = { value: files2.reactNativeCompressAndExtractData(), done: false };
return obj10;
}
}
} catch (tmp61) {
logger = tmp61;
if (0 === c7) {
c9 = 3;
throw tmp61;
} else if (1 === tmp63) {
c8 = 1;
} else {
c8 = 2;
}
}
}
})();
}
checkTotalAttachmentSize() {
let obj2;
const self = this;
const first = this.files[0];
let target;
const getUploadTarget = UploadTargets.getUploadTarget;
UploadTargets;
if (first != null) {
const item = first.item;
if (item != null) {
target = item.target;
}
}
const uploadTarget = getUploadTarget(target);
const _fileSizeResult = self._fileSize();
let flag = _fileSizeResult <= uploadTarget.getMaxTotalAttachmentSize();
if (!flag) {
const result = self.setUploadingTextForUI();
const obj = { code: AbortCodes.ENTITY_TOO_LARGE, reason: obj2 };
obj2 = { type: FileUploadErrorTypes.POSTCOMPRESSION_SUM_TOO_LARGE };
self._handleError(obj);
flag = false;
}
return flag;
}
setUploadingTextForUI(arg0) {
let _fileSizeResult;
let files;
let files2;
let tmp8;
let obj = arg0;
if (arg0 === undefined) {
obj = {};
}
let flag = obj.isCompressionComplete;
if (flag === undefined) {
flag = true;
}
const self = this;
({ files, files: files2 } = this);
const someResult = files.some((isImage) => isImage.isImage);
const someResult1 = files2.some((isVideo) => isVideo.isVideo);
if (flag) {
_fileSizeResult = self._fileSize();
} else {
const obj2 = _modDef12;
_fileSizeResult = obj2.sumBy(self.files, (reactNativeFilePrepped) => reactNativeFilePrepped.reactNativeFilePrepped ? reactNativeFilePrepped.currentSize : reactNativeFilePrepped.preCompressionSize);
}
logger.log("setUploadingTextForUI - total content: " + _fileSizeResult + " bytes and " + self.files.length + " attachments for " + self.id);
const obj3 = { totalPostCompressionSize: tmp8, currentSize: _fileSizeResult, hasVideo: someResult1, hasImage: someResult, attachmentsCount: self.files.length, items: self.files };
const merged = Object.assign(self._file);
tmp8 = undefined;
if (flag) {
tmp8 = _fileSizeResult;
}
self._file = obj3;
}
_recomputeProgress() {
let loaded;
let total;
const result = this._recomputeProgressTotal();
({ loaded, total } = result);
this._handleProgress(loaded, total, this._recomputeProgressByFile());
}
_recomputeProgressTotal() {
let _fileSizeResult;
let files;
const obj = {
loaded: files.reduce((acc, loaded) => {
let num = loaded.loaded;
if (num == null) {
num = 0;
}
return acc + num;
}, 0),
total: _fileSizeResult
};
files = this.files;
_fileSizeResult = this._fileSize();
return obj;
}
_recomputeProgressByFile() {
let obj = {};
const files = this.files;
const item = files.forEach((id) => {
id = id.id;
obj = uploader_UploadUtils;
obj[id] = obj.calculateProgress(id.loaded, id.currentSize);
});
return obj;
}
_addAttachmentsToPayload(arg0, arg1, arg2) {
const obj = {};
const merged = Object.assign(arg0);
_modDef12;
const items = [...arg2];
const obj2 = _modDef12;
return obj2.set(obj, arg1, items);
}
clearProcessingMessageInterval() {
const self = this;
if (null != this.processingMessageChangeInterval) {
const _clearInterval = clearInterval;
clearInterval(self.processingMessageChangeInterval);
self.processingMessageChangeInterval = undefined;
}
}
cancel() {
const self = this;
logger.log("cancel() for " + this.id);
if (!this._aborted) {
self._aborted = true;
const _cancel = self._cancel;
if (_cancel != null) {
_cancel();
}
const files = self.files;
const item = files.forEach((cancel) => cancel.cancel());
self._handleComplete();
}
}
cancelItem(itemId) {
const self = this;
return (async (arg0, value) => {
let closure_0;
if (c3 === 2) {
c3 = 3;
throw new TypeError("Generator functions may not be called on executing generators");
} else if (tmp4 === 3) {
if (arg0 === 1) {
throw value;
} else if (arg0 === 2) {
const obj2 = { value, done: true };
return obj2;
} else {
return { value: "IconComponent", done: null };
}
} else {
try {
c3 = 2;
if (0 === c2) {
if (arg0 === 1) {
c3 = 3;
throw value;
} else if (arg0 === 2) {
c3 = 3;
const obj4 = { value, done: true };
return obj4;
} else {
let closure_1 = tmp;
const _HermesInternal = HermesInternal;
logger.log("Cancel called for " + self.id + " for item " + itemId);
const files = self.files;
const found = files.find((id) => id.id === closure_1_0);
if (null != found) {
if (!found.isCancelled()) {
const files1 = self.files;
const index = files1.indexOf(found);
itemId = 0;
const files2 = self.files;
const items = [];
itemId = HermesBuiltin.arraySpread(items, files2.slice(0, index), itemId);
const files3 = self.files;
itemId = HermesBuiltin.arraySpread(items, files3.slice(index + 1), itemId);
self.files = items;
const obj5 = { items: self.files };
const merged = Object.assign(self._file);
self._file = obj5;
found.cancel();
const obj3 = itemId(c2[8]);
c2 = 1;
c3 = 1;
const obj6 = { value: obj3.cancelGetAttachmentFile(found), done: false };
return obj6;
}
}
}
} else if (arg0 === 1) {
c3 = 3;
throw value;
} else if (arg0 === 2) {
c3 = 3;
const obj = { value, done: true };
return obj;
} else {
closure_129_1.emit("cancel-upload-item", closure_129_1._file);
if (0 === closure_129_1.files.length) {
closure_129_1.cancel();
}
}
c3 = 3;
return { value: "IconComponent", done: null };
} catch (tmp28) {
c3 = 3;
throw tmp28;
}
}
})();
}
upload(items) {
const self = this;
if (null != this._cancel) {
const _Error = Error;
const self2 = this;
const self3 = this;
const error = new Error("Uploader.upload(...): An upload is already in progress.");
throw error;
} else {
const _Date = Date;
self._lastUpdate = Date.now();
self._loaded = 0;
const obj = { id: self.id, currentSize: 0, totalPreCompressionSize: 0, compressionProgress: 0, progress: 0, rate: 0, hasImage: false, hasVideo: false, attachmentsCount: 0, items };
self._file = obj;
}
}
}
const prototype = UploaderBase.prototype;
let result = size.fileFinishedImporting("lib/uploader/UploaderBase.tsx");
export default UploaderBase;