423 lines
14 KiB
TypeScript
423 lines
14 KiB
TypeScript
// Metro module 6151 (f6152).
|
|
import { AbortCodes } from "../../Constants";
|
|
import { FileUploadErrorTypes } from "../../modules/messages/MessageConstants";
|
|
import Logger from "../../modules/debug/Logger";
|
|
import { EventEmitter } from "../../_bundle/EventEmitter_652";
|
|
import Module12 from "../../_bundle/Module12";
|
|
import { getUploadTarget } from "./UploadTargets";
|
|
import { getKestrelConfig, getEffectiveKestrelLimit } from "../../modules/media_uploads/experiments/KestrelExperiment";
|
|
import { calculateProgress } from "./UploadUtils";
|
|
import { cancelGetAttachmentFile } from "../../utils/AttachmentFile.native";
|
|
import { HermesBuiltin } from "../../_hermes/prelude";
|
|
let c3893_7;
|
|
let env3893 = {};
|
|
const c3893_6 = new Logger("UploaderBase.tsx");
|
|
class UploaderBase extends EventEmitter {
|
|
_aborted = false;
|
|
_errored = false;
|
|
files = [];
|
|
_lastUpdate = 0;
|
|
_loaded = 0;
|
|
alreadyStarted = false;
|
|
_handleStart = (a0) => {
|
|
this._cancel = a0;
|
|
if (!this.alreadyStarted) {
|
|
this.emit("start", this._file);
|
|
}
|
|
this.alreadyStarted = true;
|
|
};
|
|
_handleProgress = (a0, a1, a2) => {
|
|
const _lastUpdate = Date.now();
|
|
const progress = calculateProgress(a0, a1);
|
|
const r11 = Math;
|
|
const rate = r11.floor((a0 - this._loaded) / ((_lastUpdate - this._lastUpdate) / 1000));
|
|
if (a2 != null) {
|
|
const items = this._file.items;
|
|
if (items != null) {
|
|
items.forEach((item) => {
|
|
item.item.progress = a2[item.id];
|
|
});
|
|
}
|
|
}
|
|
this._lastUpdate = _lastUpdate;
|
|
this._loaded = a0;
|
|
this._file = {
|
|
...this._file,
|
|
currentSize: a1,
|
|
progress,
|
|
rate
|
|
};
|
|
this.emit("progress", this._file);
|
|
};
|
|
_handleException = (a0) => {
|
|
this._handleError({
|
|
reason: {
|
|
type: FileUploadErrorTypes.ERROR_SOURCE_UNKNOWN,
|
|
msg: a0.toString()
|
|
}
|
|
});
|
|
};
|
|
_handleAborted = () => {
|
|
this.clearProcessingMessageInterval();
|
|
};
|
|
_handleError = ({ code, reason, body }) => {
|
|
this.clearProcessingMessageInterval();
|
|
if (!this._aborted) {
|
|
this._errored = true;
|
|
c3893_6.log(`_handleError: ${code} (${JSON.stringify(reason)}) for ${this.id}`);
|
|
this.emit("error", this._file, code, body, reason);
|
|
this.removeAllListeners();
|
|
}
|
|
};
|
|
_handleComplete = (a0) => {
|
|
this.clearProcessingMessageInterval();
|
|
c3893_6.log(`_handleComplete for ${this.id}`);
|
|
this.emit("complete", this._file, a0);
|
|
this.removeAllListeners();
|
|
};
|
|
id = Module12.uniqueId("Uploader");
|
|
_file = {
|
|
id: this.id,
|
|
currentSize: 0,
|
|
totalPreCompressionSize: 0,
|
|
compressionProgress: 0,
|
|
progress: 0,
|
|
rate: 0,
|
|
hasImage: false,
|
|
hasVideo: false,
|
|
attachmentsCount: 0,
|
|
items: void 0
|
|
};
|
|
constructor() {
|
|
super();
|
|
}
|
|
_fileSize() {
|
|
return this.files.reduce((acc, { currentSize: currentSize3 }) => {
|
|
if (currentSize3 == null) {
|
|
currentSize3 = 0;
|
|
}
|
|
return acc + currentSize3;
|
|
}, 0);
|
|
}
|
|
async compressAndCheckFileSize() {
|
|
let r39, r110, r207;
|
|
const _this = this;
|
|
let c25722_0, files, currentSize, currentSize2, c25722_6;
|
|
let c25722_7 = 0;
|
|
let c29674_0, c29674_1, c29674_2, c29674_3, c29674_4;
|
|
L43: {
|
|
L42: {
|
|
L41: {
|
|
L35: {
|
|
L34: {
|
|
L37: {
|
|
try {
|
|
c29674_0 = void 0;
|
|
c29674_1 = void 0;
|
|
c29674_2 = void 0;
|
|
c29674_3 = void 0;
|
|
const r24 = _this.files[0];
|
|
const uploadTarget = getUploadTarget(r24 == null ? void 0 : r24.item?.target);
|
|
c29674_0 = uploadTarget;
|
|
if (_this.files.length > uploadTarget.getMaxAttachmentsCount()) {
|
|
c3893_6.log(`Too many attachments for ${_this.id}`);
|
|
_this._handleError({
|
|
code: AbortCodes.TOO_MANY_ATTACHMENTS
|
|
});
|
|
break L43;
|
|
}
|
|
c29674_1 = getKestrelConfig({
|
|
location: "UploaderBase.compressAndCheckFileSize"
|
|
});
|
|
c3893_6.log(`compressing files for ${_this.id}`);
|
|
const files2 = _this.files;
|
|
files = files2;
|
|
const r96 = files2[Symbol.iterator]();
|
|
files = r96.next;
|
|
c25722_0 = r96;
|
|
const r98 = files;
|
|
let r99 = c25722_0;
|
|
const r100 = r99 === void 0 ? void 0 : (r39 = r98.call(r99)).done ? r99 = void 0 : r39.value;
|
|
c25722_0 = r99;
|
|
if (r99 === void 0) {
|
|
r110 = !(_this._fileSize() > c29674_0.getMaxTotalAttachmentSize());
|
|
if (r110) {
|
|
break L42;
|
|
}
|
|
_this._handleError({
|
|
code: AbortCodes.ENTITY_TOO_LARGE,
|
|
reason: {
|
|
type: FileUploadErrorTypes.POSTCOMPRESSION_SUM_TOO_LARGE
|
|
}
|
|
});
|
|
break L41;
|
|
}
|
|
c29674_2 = r100;
|
|
c25722_7 = 2;
|
|
await c29674_2.reactNativeCompressAndExtractData();
|
|
let r133 = "compressAndCheckFileSize() file has been cancelled for compression - ";
|
|
while (true) {
|
|
if (c29674_2.isCancelled()) {
|
|
c3893_6.log(HermesInternal.concat.call(r133, c29674_2.id));
|
|
c25722_7 = 0;
|
|
} else {
|
|
const currentSize3 = c29674_2.currentSize;
|
|
currentSize = currentSize3;
|
|
if (currentSize3 == null) {
|
|
currentSize = 0;
|
|
}
|
|
if (currentSize === 0) {
|
|
_this._handleError({
|
|
code: AbortCodes.ENTITY_EMPTY
|
|
});
|
|
c25722_7 = 0;
|
|
const r162 = c25722_0;
|
|
if (r162 !== void 0 && typeof r162.return === "function") {
|
|
r162.return();
|
|
}
|
|
break L37;
|
|
}
|
|
c29674_3 = getEffectiveKestrelLimit(c29674_1, c29674_0.getMaxFileSize(c29674_2.channelId));
|
|
const currentSize4 = c29674_2.currentSize;
|
|
currentSize2 = currentSize4;
|
|
if (currentSize4 == null) {
|
|
currentSize2 = 0;
|
|
}
|
|
if (currentSize2 > c29674_3) {
|
|
_this._handleError({
|
|
code: AbortCodes.ENTITY_TOO_LARGE,
|
|
reason: {
|
|
type: FileUploadErrorTypes.POSTCOMPRESSION_INDIVIDUAL_FILE_TOO_LARGE
|
|
}
|
|
});
|
|
c25722_7 = 0;
|
|
const r193 = c25722_0;
|
|
if (r193 !== void 0 && typeof r193.return === "function") {
|
|
r193.return();
|
|
}
|
|
break;
|
|
}
|
|
c25722_7 = 0;
|
|
}
|
|
const r195 = files;
|
|
let r196 = c25722_0;
|
|
const r197 = r196 === void 0 ? void 0 : (r39 = r195.call(r196)).done ? r196 = void 0 : r39.value;
|
|
c25722_0 = r196;
|
|
if (r196 === void 0) {
|
|
r207 = !(_this._fileSize() > c29674_0.getMaxTotalAttachmentSize());
|
|
if (r207) {
|
|
break L35;
|
|
}
|
|
_this._handleError({
|
|
code: AbortCodes.ENTITY_TOO_LARGE,
|
|
reason: {
|
|
type: FileUploadErrorTypes.POSTCOMPRESSION_SUM_TOO_LARGE
|
|
}
|
|
});
|
|
break L34;
|
|
}
|
|
c29674_2 = r197;
|
|
c25722_7 = 2;
|
|
await c29674_2.reactNativeCompressAndExtractData();
|
|
r133 = "compressAndCheckFileSize() file has been cancelled for compression - ";
|
|
}
|
|
} catch ($e) {
|
|
const r47 = $e;
|
|
let r8 = r47;
|
|
c25722_6 = r47;
|
|
let r48 = c25722_7;
|
|
if (r48 !== 0) {
|
|
while (true) {
|
|
if (r48 !== 1) {
|
|
try {
|
|
const r266 = c25722_6;
|
|
c25722_7 = 1;
|
|
c29674_4 = r266;
|
|
_this._handleException(c29674_4);
|
|
c25722_7 = 0;
|
|
const r272 = c25722_0;
|
|
if (r272 !== void 0 && typeof r272.return === "function") {
|
|
r272.return();
|
|
}
|
|
} catch (r263) {
|
|
r8 = r263;
|
|
c25722_6 = r263;
|
|
r48 = c25722_7;
|
|
if (r48 === 0) {
|
|
break;
|
|
}
|
|
continue;
|
|
}
|
|
return false;
|
|
}
|
|
try {
|
|
const r277 = c25722_6;
|
|
c25722_7 = 0;
|
|
const r279 = c25722_0;
|
|
if (r279 !== void 0 && typeof r279.return === "function") {
|
|
try {
|
|
r279.return();
|
|
} catch {}
|
|
}
|
|
throw r277;
|
|
} catch (r276) {
|
|
r8 = r276;
|
|
c25722_6 = r276;
|
|
r48 = c25722_7;
|
|
if (r48 === 0) {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
throw r8;
|
|
}
|
|
return false;
|
|
}
|
|
return false;
|
|
}
|
|
return 0;
|
|
}
|
|
return r207;
|
|
}
|
|
return 0;
|
|
}
|
|
return r110;
|
|
}
|
|
return false;
|
|
}
|
|
setUploadingTextForUI() {
|
|
const hasImage = this.files.some((file) => file.isImage);
|
|
const hasVideo = this.files.some((file) => file.isVideo);
|
|
const totalPostCompressionSize = this._fileSize();
|
|
c3893_6.log(`setUploadingTextForUI - total content: ${totalPostCompressionSize} bytes and ${this.files.length} attachments for ${this.id}`);
|
|
this._file = {
|
|
...this._file,
|
|
totalPostCompressionSize,
|
|
currentSize: totalPostCompressionSize,
|
|
hasVideo,
|
|
hasImage,
|
|
attachmentsCount: this.files.length,
|
|
items: this.files
|
|
};
|
|
}
|
|
_recomputeProgress() {
|
|
const r6 = this._recomputeProgressTotal();
|
|
this._handleProgress(r6.loaded, r6.total, this._recomputeProgressByFile());
|
|
}
|
|
_recomputeProgressTotal() {
|
|
const total = this._fileSize();
|
|
return {
|
|
loaded: this.files.reduce((acc, { loaded }) => {
|
|
if (loaded == null) {
|
|
loaded = 0;
|
|
}
|
|
return acc + loaded;
|
|
}, 0),
|
|
total
|
|
};
|
|
}
|
|
_recomputeProgressByFile() {
|
|
const r0 = {};
|
|
let c15524_0 = r0;
|
|
this.files.forEach((file) => {
|
|
c15524_0[file.id] = calculateProgress(file.loaded, file.currentSize);
|
|
});
|
|
return r0;
|
|
}
|
|
_addAttachmentsToPayload(a0, a1, a2) {
|
|
const r5 = {
|
|
...a0
|
|
};
|
|
return Module12.set(r5, a1, [...Module12.get(r5, a1, []), ...a2]);
|
|
}
|
|
clearProcessingMessageInterval() {
|
|
if (this.processingMessageChangeInterval != null) {
|
|
clearInterval(this.processingMessageChangeInterval);
|
|
this.processingMessageChangeInterval = void 0;
|
|
}
|
|
}
|
|
cancel() {
|
|
c3893_6.log(`cancel() for ${this.id}`);
|
|
if (!this._aborted) {
|
|
this._aborted = true;
|
|
const _cancel = this._cancel;
|
|
if (_cancel != null) {
|
|
_cancel.call(this);
|
|
}
|
|
this.files.forEach((file) => file.cancel());
|
|
this._handleComplete();
|
|
}
|
|
}
|
|
async cancelItem(a0) {
|
|
let env15525 = {
|
|
$parent: env3893
|
|
};
|
|
env15525[0] = a0;
|
|
env15525[1] = this;
|
|
let c25723_0, c25723_1, c25723_2;
|
|
L15: {
|
|
L14: {
|
|
let env29675;
|
|
const r14 = env15525;
|
|
c25723_2 = r14;
|
|
const r10 = env29675 = {
|
|
$parent: r14
|
|
};
|
|
c25723_1 = r10;
|
|
env29675[0] = void 0;
|
|
c3893_6.log(`Cancel called for ${env15525[1].id} for item ${env15525[0]}`);
|
|
const r41 = env15525[1].files.find((file) => file.id === env15525[0]);
|
|
env29675[0] = r41;
|
|
if (r41 == null) {
|
|
break L15;
|
|
}
|
|
if (r41.isCancelled()) {
|
|
break L15;
|
|
}
|
|
const r49 = env15525[1].files.indexOf(r41);
|
|
const r50 = env15525[1];
|
|
c25723_0 = 0;
|
|
const r22 = env15525[1].files.slice(0, r49);
|
|
const files2 = [];
|
|
c25723_0 = HermesBuiltin.arraySpread(files2, r22, c25723_0);
|
|
c25723_0 = HermesBuiltin.arraySpread(files2, env15525[1].files.slice(r49 + 1), c25723_0);
|
|
r50.files = files2;
|
|
env15525[1]._file = {
|
|
...env15525[1]._file,
|
|
items: env15525[1].files
|
|
};
|
|
await cancelGetAttachmentFile(r41);
|
|
env29675[0].cancel();
|
|
env15525[1].emit("cancel-upload-item", env15525[1]._file);
|
|
if (env15525[1].files.length !== 0) {
|
|
break L14;
|
|
}
|
|
env15525[1].cancel();
|
|
}
|
|
return void 0;
|
|
}
|
|
}
|
|
upload(a0) {
|
|
if (this._cancel != null) {
|
|
throw new Error("Uploader.upload(...): An upload is already in progress.");
|
|
}
|
|
this._lastUpdate = Date.now();
|
|
this._loaded = 0;
|
|
this._file = {
|
|
id: this.id,
|
|
currentSize: 0,
|
|
totalPreCompressionSize: 0,
|
|
compressionProgress: 0,
|
|
progress: 0,
|
|
rate: 0,
|
|
hasImage: false,
|
|
hasVideo: false,
|
|
attachmentsCount: 0,
|
|
items: a0
|
|
};
|
|
}
|
|
}
|
|
c3893_7 = UploaderBase;
|
|
export default UploaderBase;
|