decord/stable/source/lib/uploader/native/CloudUploader.tsx
2026-10-06 22:12:49 +00:00

491 lines
18 KiB
TypeScript

// Module ID: 7262
// Function ID: 7263
// Name: CloudUploader
// Dependencies: [5, 1086, 4830, 3, 7263, 7178, 1127, 7264, 5489, 7265, 7266, 5440, 5441, 1433, 12, 2]
// Module 7262 (CloudUploader)
import LoggerDefault from "Logger" /* 3 */;
import _modDef12 from "module_12" /* 12 */;
import MessageConstants from "MessageConstants" /* 4830 */;
import Upload from "Upload" /* 5441 */;
import _asyncToGenerator from "_asyncToGenerator" /* 5 */;
import Constants from "Constants" /* 1086 */;
import UploaderBase from "UploaderBase" /* 7263 */;
import size from "module_2" /* 2 */;
let _self, c2, c4, closure_0, constants, logger, set, uri;
let closure_4;
let hasOwnProperty;
({ AbortCodes: closure_4, NOOP: hasOwnProperty } = Constants);
const FileUploadErrorTypes = MessageConstants.FileUploadErrorTypes;
const tmp3 = new LoggerDefault("CloudUploader(Native).tsx");
let closure_7 = tmp3;
class CloudUploader extends UploaderBase {
constructor() {
const applyArgumentsResult = HermesBuiltin.applyArguments(this, new.target);
applyArgumentsResult.mediaEventSubscriptions = new Map();
new Map();
applyArgumentsResult.uploadItems = new Map();
applyArgumentsResult.preCompressionFileSizes = [];
new Map();
return applyArgumentsResult;
}
uploadFiles(c1) {
let closure_1 = c1;
const _superprop_getUpload = () => super.upload;
let self = this;
return self(function*(arg0, value) {
let c6;
let closure_3;
let closure_4;
let files;
let obj10;
let obj7;
let obj9;
if (logger === 2) {
logger = 3;
const str = "Generator functions may not be called on executing generators";
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) {
let obj2 = { value, done: true };
return obj2;
} else {
return { value: "IconComponent", done: null };
}
} else {
let tmp57;
let c5;
try {
let closure_2;
let tmp;
let preCompressionSize;
let uploadTarget;
let promise;
logger = 2;
const tmp4 = constants;
if (0 === constants) {
if (arg0 === 1) {
logger = 3;
throw value;
} else if (arg0 === 2) {
logger = 3;
let obj3 = { value, done: true };
return obj3;
} else {
closure_2 = tmp4;
tmp = undefined;
tmp57 = undefined;
preCompressionSize = undefined;
uploadTarget = undefined;
files(closure_2[5]).backgroundTaskIdentifierInvalid;
const onceResult = self.once("start", tmp(function*(arg0, value) {
let intl;
let intl2;
let length;
let obj5;
if (c2 === 2) {
c2 = 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 {
try {
let _aborted;
c2 = 2;
if (0 === length) {
if (arg0 === 1) {
c2 = 3;
throw value;
} else if (arg0 === 2) {
c2 = 3;
const obj3 = { value, done: true };
return obj3;
} else {
_aborted = tmp;
const obj4 = { title: intl.string(closure_2_0(closure_2_2[6]).t["B/HSDd"]), content: intl2.formatToPlainString(closure_2_0(closure_2_2[6]).t.D0noUt, obj5) };
const startBackgroundTask = files(closure_2_2[5]).startBackgroundTask;
const tmp18 = files(closure_2_2[5]);
intl = closure_2_0(closure_2_2[6]).intl;
intl2 = closure_2_0(closure_2_2[6]).intl;
obj5 = { count: length.length };
length = 1;
c2 = 1;
const obj6 = { value: startBackgroundTask(obj4), done: false };
return obj6;
}
} else if (arg0 === 1) {
c2 = 3;
throw value;
} else if (arg0 === 2) {
c2 = 3;
const obj7 = { value, done: true };
return obj7;
} else {
_aborted = value;
if (_aborted._aborted) {
const obj = files(closure_2_2[5]);
obj.endBackgroundTask(_aborted);
}
c2 = 3;
return { value: "IconComponent", done: null };
}
} catch (tmp12) {
c2 = 3;
throw tmp12;
}
}
}));
function onCompleteTask() {
const obj = files(closure_2[5]);
obj.endBackgroundTask(closure_1_0);
closure_2_0.removeListener("complete", closure_1_1);
closure_2_0.removeListener("error", closure_1_1);
}
const onceResult1 = self.once("error", onCompleteTask);
self.once("complete", onCompleteTask);
self = this;
const self2 = this;
promise = new Promise((arg0, arg1) => {
closure_0 = arg0;
let closure_1 = arg1;
closure_0.once("error", (file, code, responseBody, reason) => {
const obj = { file, code, responseBody, reason };
closure_1(obj);
});
closure_0.once("complete", () => {
if (!closure_2_0._errored) {
closure_0(tmp.files);
}
});
});
c5 = 1;
self.files = files;
const obj16 = _superprop_getUpload();
obj16.call(self, files);
self._file.attachmentsCount = files.length;
self._handleStart(undefined);
tmp = 0;
files = self.files;
_self = files[Symbol.iterator]();
}
} else if (1 === tmp4) {
c5 = 0;
closure_7 = tmp57;
const _HermesInternal = HermesInternal;
logger.log("" + closure_131_0.id + " failed in CloudUploader uploadFiles " + closure_7);
closure_131_0._handleException(closure_7);
logger = 3;
let obj4 = { value: promise, done: true };
return obj4;
} else if (2 === tmp4) {
c5 = 1;
_self.return();
throw tmp57;
} else if (arg0 === 1) {
logger = 3;
throw value;
} else if (arg0 === 2) {
_self.return();
c5 = 0;
logger = 3;
let obj5 = { value, done: true };
return obj5;
} else {
preCompressionSize = value;
const prop = closure_131_0.preCompressionFileSizes;
prop.push(preCompressionSize);
tmp57.preCompressionSize = preCompressionSize;
tmp = tmp + preCompressionSize;
closure_131_0._file.totalPreCompressionSize = tmp;
closure_131_0._file.currentSize = tmp;
const obj15 = _self(closure_2[8]);
uploadTarget = obj15.getUploadTarget(tmp57.item.target);
if (preCompressionSize > uploadTarget.getMaxFileSize(tmp57.channelId)) {
let obj6 = { code: tmp57.ENTITY_TOO_LARGE, reason: obj7 };
obj7 = { type: constants.PRECOMPRESSION_INDIVIDUAL_FILE_TOO_LARGE };
closure_131_0._handleError(obj6);
const tmp19 = promise;
_self.return();
c5 = 0;
logger = 3;
const obj8 = { value: tmp19, done: true };
return obj8;
} else if (tmp > uploadTarget.getMaxTotalAttachmentSize()) {
let obj = { code: tmp57.ENTITY_TOO_LARGE, reason: obj10 };
obj10 = { type: constants.PRECOMPRESSION_SUM_TOO_LARGE };
closure_131_0._handleError(obj);
const tmp12 = _self;
_self.return();
c5 = 0;
logger = 3;
const obj12 = { value: promise, done: true };
return obj12;
} else {
c5 = 1;
}
}
if (_self === undefined) {
const _HermesInternal2 = HermesInternal;
logger.log("" + closure_131_0.id + " queued");
const obj11 = files(closure_2[9]);
obj11.enqueue(() => {
closure_1_0.startUpload();
return closure_1_0;
});
c5 = 0;
logger = 3;
const obj13 = { value: promise, done: true };
return obj13;
} else {
c5 = 2;
tmp57 = tmp43;
constants = 3;
logger = 1;
const obj14 = { value: obj9.getPreCompressionFileSize(tmp57.item), done: false };
obj9 = _self(closure_2[7]);
return obj14;
}
} catch (tmp57) {
if (0 === c5) {
logger = 3;
throw tmp57;
} else if (1 === tmp59) {
constants = 1;
} else {
constants = 2;
}
}
}
})();
}
startUpload() {
let self = this;
return (async function(arg0, value) {
let closure_1;
let self;
if (c5 === 2) {
c5 = 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 c3;
try {
let result;
c5 = 2;
if (0 === c4) {
if (arg0 === 1) {
c5 = 3;
throw value;
} else if (arg0 === 2) {
c5 = 3;
const obj3 = { value, done: true };
return obj3;
} else {
_self = undefined;
if (self._aborted) {
self._handleAborted();
} else {
self._handleStart(c5);
_self = self.observeCompressionProgress(self.files);
c3 = 2;
result = self.compressAndCheckFileSize();
c4 = 4;
c5 = 1;
const obj4 = { value: result, done: false };
return obj4;
}
}
} else {
let tmp;
if (1 === c4) {
c3 = 0;
tmp = closure_2;
result = closure_129_0;
closure_129_0._handleException(tmp);
} else if (2 === c4) {
c3 = 1;
_self();
throw closure_2;
} else if (3 === c4) {
if (arg0 === 1) {
c5 = 3;
throw value;
} else if (arg0 === 2) {
c3 = 0;
c5 = 3;
const obj5 = { value, done: true };
return obj5;
} else if (0 === closure_129_0.files.length) {
const _HermesInternal2 = HermesInternal;
logger.log("All uploads cancelled for " + closure_129_0.id);
closure_129_0._handleComplete();
c3 = 0;
c5 = 3;
const obj6 = { value: undefined, done: true };
return obj6;
} else {
result = closure_129_0.files;
if (result.every((status) => status.status === closure_1_0(closure_1_2[11]).CloudUploadStatus.COMPLETED)) {
result = closure_129_0._file.items;
if (result != null) {
const item = result.forEach((item) => {
item.item.progress = 100;
});
}
const obj7 = { progress: 100 };
const merged = Object.assign(closure_129_0._file);
closure_129_0._file = obj7;
closure_129_0.emit("progress", closure_129_0._file);
result = logger.log;
const _HermesInternal = HermesInternal;
result("All uploads complete for " + closure_129_0.id);
closure_129_0._handleComplete();
c3 = 0;
} else {
const _Error = Error;
self = this;
const self2 = this;
const error = new Error("Not all attachments were uploaded successfully");
throw error;
}
}
} else if (arg0 === 1) {
c5 = 3;
throw value;
} else if (arg0 === 2) {
_self();
c3 = 0;
c5 = 3;
const obj8 = { value, done: true };
return obj8;
} else {
c3 = 1;
_self();
if (value) {
const result1 = closure_129_0.setUploadingTextForUI();
result = tmp(closure_2[10]);
const _recomputeProgress = closure_129_0._recomputeProgress;
c4 = 3;
c5 = 1;
const obj = { value: result(closure_129_0.files, true, _recomputeProgress.bind(closure_129_0)), done: false };
return obj;
} else {
c3 = 0;
c5 = 3;
return { value: "IconComponent", done: null };
}
}
}
c5 = 3;
return { value: "IconComponent", done: null };
} catch (tmp57) {
closure_2 = tmp57;
if (0 === c3) {
c5 = 3;
throw tmp57;
} else if (1 === tmp59) {
c4 = 1;
} else {
c4 = 2;
}
}
}
})();
}
observeCompressionProgress(files) {
const self = this;
function cleanUp() {
const mediaEventSubscriptions = self.mediaEventSubscriptions;
const value = mediaEventSubscriptions.get(self._file.id);
if (value != null) {
value.remove();
}
const mediaEventSubscriptions2 = obj.mediaEventSubscriptions;
mediaEventSubscriptions2.delete(self._file.id);
const uploadItems = obj.uploadItems;
uploadItems.clear();
self.removeListener("complete", cleanUp);
self.removeListener("error", cleanUp);
}
let item = files.forEach((item) => {
item = item.item;
if (item.platform === Upload.UploadPlatform.REACT_NATIVE) {
item.compressionProgress = 0;
const uploadItems = self.uploadItems;
const result = uploadItems.set(item.uri, item);
}
});
let mediaEventSubscriptions = this.mediaEventSubscriptions;
const id = this._file.id;
set = mediaEventSubscriptions.set;
const obj = self(1433);
let result = set(id, obj.onCompressionProgress((uri) => {
uri = uri.uri;
const uploadItems = self.uploadItems;
const progress = uri.progress;
if (uploadItems.has(uri)) {
const uploadItems2 = obj.uploadItems;
uploadItems2.get(uri).compressionProgress = progress;
const uploadItems3 = obj.uploadItems;
const meanBy = _modDef12.meanBy;
const items = [];
_modDef12;
HermesBuiltin.arraySpread(items, uploadItems3.values(), 0);
const meanByResult = meanBy(items, "compressionProgress");
if (meanByResult >= 100) {
const mediaEventSubscriptions = obj.mediaEventSubscriptions;
const value = mediaEventSubscriptions.get(obj._file.id);
if (value != null) {
value.remove();
}
const mediaEventSubscriptions2 = obj.mediaEventSubscriptions;
mediaEventSubscriptions2.delete(self._file.id);
const uploadItems4 = obj.uploadItems;
uploadItems4.clear();
self.removeListener("complete", cleanUp);
self.removeListener("error", cleanUp);
const items1 = obj._file.items;
if (items1 != null) {
const item = items1.forEach((item) => {
item.item.compressionProgress = 100;
});
}
const obj2 = { compressionProgress: 100 };
const merged = Object.assign(obj._file);
self._file = obj2;
} else {
const obj3 = { compressionProgress: meanByResult };
const merged1 = Object.assign(obj._file);
self._file = obj3;
}
self.emit("compression-progress", self._file);
}
}));
this.once("complete", cleanUp);
this.once("error", cleanUp);
return cleanUp;
}
}
let closure_8 = CloudUploader.prototype;
let result = size.fileFinishedImporting("lib/uploader/native/CloudUploader.tsx");
export default CloudUploader;