// Module ID: 4675 // Function ID: 40657 // Name: openImagePickerUnhandled // Dependencies: [29, 5, 27, 1280, 4223, 1850, 653, 4345, 3, 4676, 4687, 4667, 4693, 477, 3831, 1212, 3777, 4666, 1247, 4696, 4698, 4671, 4111, 4699, 4700, 4701, 1327, 4702, 4703, 4704, 4359, 4705, 2] // Exports: cancelGetFileInfo, getAppDir, getCaptionLabel, getFileFromUploadItem, getFileInfo, getFileSize, getImageCompressionQuality, getImageDimensionsIfMissing, getType, isHEVCEncodingSupported, openImagePicker // Module 4675 (openImagePickerUnhandled) import getMobileImageEncodingLadderConfig from "getMobileImageEncodingLadderConfig"; import closure_5 from "_isNativeReflectConstruct"; import get_ActivityIndicator from "apexExperiment"; import _isNativeReflectConstruct from "_isNativeReflectConstruct"; import closure_10 from "_isNativeReflectConstruct"; import closure_11 from "_isNativeReflectConstruct"; import closure_12 from "_isNativeReflectConstruct"; import ME from "ME"; import { NativePermissionTypes } from "NativePermissionStatus"; import importDefaultResult from "_isNativeReflectConstruct"; let Base64GIFPrefix; let closure_13; let closure_15; let closure_16; let closure_17; let closure_18; let closure_6; let closure_7; let closure_8; let closure_9; const require = arg1; function openImagePickerUnhandled() { return _openImagePickerUnhandled(...arguments); } async function _openImagePickerUnhandled(arg0, arg1) { let height; let width; let obj = outer2_1(outer2_2[9]); if (yield obj.requestPermission(outer2_19.PHOTOS)) { obj = {}; if ("size" in arg0) { ({ size: obj2.width, size: obj2.height } = arg0); let tmp8 = obj; } else { ({ width: obj2.width, height: obj2.height } = arg0); tmp8 = obj; } ({ width, height } = tmp8); const tmp12 = yield new Promise((arg0, arg1) => { let closure_0 = arg0; let closure_1 = arg1; outer3_1(outer3_2[10]).launchImageLibrary({ mediaType: "photo", includeBase64: true, disableNewIOSPicker: true }, (assets) => { let first = null; if (null != assets.assets) { first = null; if (assets.assets.length > 0) { first = assets.assets[0]; } } if (assets.didCancel) { const _Error2 = Error; const error = new Error(outer4_23); callback2(error); } else { if (null == assets.errorCode) { let uri; if (null != first) { uri = first.uri; } if (null != uri) { const obj = {}; ({ uri: obj.uri, base64: obj.base64 } = first); callback(obj); } } const _Error = Error; const error1 = new Error(assets.errorMessage); callback2(error1); } }); }); let obj2 = outer2_0(outer2_2[11]); obj = { uri: tmp12.uri, i: "" }; const file = obj2.getFile(obj); let obj4 = outer2_1(outer2_2[12]); const catchPromise = obj4.fromFileUri(tmp12.uri).catch(() => null); if (null != tmp12.base64) { if (obj10.isAndroid()) { let base64 = tmp13.base64; if (base64.startsWith("UklGR")) { const obj1 = { base64: outer2_17 + tmp12.base64, mimeType: "image/webp", originalMd5: yield catchPromise }; return obj1; } else { base64 = tmp13.base64; if (4 === base64.indexOf("ZnR5cA==")) { const base641 = tmp13.base64; if (8 !== base641.indexOf("YXZpZg==")) { const base642 = tmp13.base64; } obj2 = { base64: outer2_18 + tmp13.base64, mimeType: "image/avif", originalMd5: yield catchPromise }; return obj2; } } } obj10 = outer2_0(outer2_2[13]); } if ("image/gif" === file.type) { const obj3 = { base64: outer2_14 + tmp13.base64, mimeType: "image/gif", originalMd5: yield catchPromise }; return obj3; } else { obj4 = { uri: tmp13.uri, width, height, includeBase64: true }; const preferredMimeType = arg0.preferredMimeType; if (null != preferredMimeType) { let type = preferredMimeType; } else { type = file.type; } obj4.mimeType = type; const tmp25 = yield outer2_1(outer2_2[10]).launchCropper(obj4); const obj5 = {}; const _HermesInternal = HermesInternal; obj5.base64 = "data:" + tmp25.mime + ";base64," + tmp25.data; obj5.mimeType = tmp25.mime; obj5.originalMd5 = yield catchPromise; return obj5; } const fromFileUriResult = obj4.fromFileUri(tmp12.uri); } else { let _Error = Error; let error = new Error("Missing permission"); throw error; } } function openImagePicker(arg0) { return _openImagePicker(...arguments); } async function _openImagePicker(arg0, arg1) { let obj = outer2_1(outer2_2[9]); if (yield obj.requestPermission(outer2_19.PHOTOS)) { const tmp2 = yield outer2_24(arg0); if (null != tmp2.errorStr) { const intl = outer2_0(outer2_2[15]).intl; obj = { reason: tmp3.errorStr }; outer2_0(outer2_2[14]).presentFailedToast(intl.formatToPlainString(outer2_0(outer2_2[15]).t.Ex162J, obj)); const obj3 = outer2_0(outer2_2[14]); } return tmp2; } else { obj = { errorStr: "Missing permission" }; return obj; } } function mediaManager() { return _mediaManager(...arguments); } async function _mediaManager(arg0, arg1, arg2) { let iter = (function*(arg0, arg1) { let tmp = arg2; if (tmp === undefined) { tmp = null; } yield undefined; const MediaManager = outer2_6.MediaManager; return yield MediaManager[arg0](arg1, tmp); })(); iter.next(); return iter; } function getVideoQuality(localWant) { if (closure_10.dataSavingMode) { if (store.getType() === constants3.CELLULAR) { return constants.LOW; } } const videoUploadQuality = closure_10.videoUploadQuality; currentUser = currentUser.getCurrentUser(); if (obj.canUseHighVideoUploadQuality(currentUser)) { let tmp5 = resolveModeToVideoQualityForUserWithFeature(videoUploadQuality); } else { tmp5 = resolveModeToVideoQualityForFreeUser(videoUploadQuality); } return tmp5; } function resolveModeToVideoQualityForUserWithFeature(videoUploadQuality) { if (constants2.DATA_SAVER === videoUploadQuality) { return constants.LOW; } else if (constants2.STANDARD === videoUploadQuality) { return constants.HIGH; } else if (constants2.BEST === videoUploadQuality) { return constants.VERY_HIGH; } else { return constants.MEDIUM; } } function resolveModeToVideoQualityForFreeUser(videoUploadQuality) { if (constants2.DATA_SAVER === videoUploadQuality) { return constants.LOW; } else if (constants2.STANDARD === videoUploadQuality) { return constants.MEDIUM; } else if (constants2.BEST === videoUploadQuality) { return constants.HIGH; } else { return constants.LOW; } } function getAppDir() { if (obj.isAndroid()) { if (null == importDefault(1247)) { const _Error = Error; const error = new Error("RTNFileManager doesn't exist?"); throw error; } else { const obj2 = importDefault(1247); return importDefault(1247).getConstants().CacheDirPath.replace(/cache$/, ""); } } else { return "/private" + closure_6.DCDFileManager.DocumentsDirPath.replace(/Documents$/, ""); } obj = require(477) /* set */; } function getFileInfo(value, arg1) { let description; let filename; let item; let mimeType; let mimeType2; let originalUri; let spoiler; let str = arg1; ({ item, spoiler, description, mimeType } = value); if (arg1 === undefined) { str = ""; } if (item.platform !== require(4666) /* _isNativeReflectConstruct */.UploadPlatform.REACT_NATIVE) { const _Error = Error; const error = new Error("Try to get file info for unsupported upload item"); throw error; } else { ({ originalUri, filename, mimeType: mimeType2 } = item); if (null != mimeType2) { mimeType = mimeType2; } if (isVideo(originalUri, mimeType)) { let obj = { originalUri, filename, mimeType, fileSize: item.size, spoiler, description, i: str }; let tmp2 = (function processVideoUpload(arg0) { return outer1_40(...arguments); })(obj); } else { obj = { originalUri, filename, mimeType, spoiler, description, i: str }; ({ width: obj.width, height: obj.height } = item); obj.allowOptimization = value.allowOptimization; tmp2 = (function processImageOrFileUpload(arg0) { return outer1_41(...arguments); })(obj); } return tmp2; } } async function _getPhotoKitDataUTI(arg0, arg1) { if (obj.isIOS()) { if (arg0.startsWith("ph://")) { const MediaManager = outer2_6.MediaManager; const tmp3 = yield MediaManager.getImageContentType(arg0); let tmp6; if (null != tmp3) { tmp6 = tmp3; } return tmp6; } } } async function _shouldConvertToPNG(arg0, arg1, arg2) { if (obj.isIOS()) { if (obj2.isPhotoKitAsset(arg0, arg1)) { let match; if (null != arg1) { match = arg1.match(/\.png$/i); } if (null == match) { return false; } } else if (null == arg0.match(/^(assets-library|file):\/\/.+(&ext=|\.)png$/i)) { return false; } const MediaManager = outer2_6.MediaManager; return yield MediaManager.imageHasTransparency(arg0); } else { return false; } obj = outer2_0(outer2_2[13]); } function shouldResolveToMediaFilePath(str) { let isAndroidResult = require(477) /* set */.isAndroid(); if (isAndroidResult) { isAndroidResult = null != str.match(/^content:\/\/.+$/i); } return isAndroidResult; } function isVideo(uri, mimeType) { let obj = require(4667) /* items */; obj = { uri, overrideType: mimeType }; return obj.getFile(obj).isVideo; } function isImage(uri, overrideType) { let obj = require(4667) /* items */; obj = { uri, overrideType }; return obj.getFile(obj).isImage; } function getType(uri) { let obj = require(4667) /* items */; obj = { uri }; return obj.getFile(obj).type; } function convertVideo(videoMetadata) { let closure_3; let dependencyMap; let importDefault; let require; let videoQualitySetting; ({ uri: require, filename: importDefault, isLowQuality: dependencyMap, compressionQuality: closure_3, videoQualitySetting } = videoMetadata); videoMetadata = videoMetadata.videoMetadata; let obj; let c7; const VideoQualityTarget = require(4698) /* calculateTargetDimensions */.VideoQualityTarget; let result = VideoQualityTarget.fromCompressionQuality(videoQualitySetting); obj = require(4698) /* calculateTargetDimensions */; let result1 = obj.canSkipVideoTranscode(result, videoMetadata, videoMetadata.fileSize, require(4671) /* _createForOfIteratorHelperLoose */.maxFileSize()); let obj2 = require(4671) /* _createForOfIteratorHelperLoose */; const size = require(4698) /* calculateTargetDimensions */.calculateTargetDimensions(videoMetadata, result.targetResolution); let obj3 = require(4698) /* calculateTargetDimensions */; obj = {}; let result2 = require(4698) /* calculateTargetDimensions */.calculateOptimalBitrate(videoMetadata, result, require(4698) /* calculateTargetDimensions */.DEFAULT_VIDEO_ENCODING_CONFIG.bitrateFloor); const merged = Object.assign(require(4698) /* calculateTargetDimensions */.DEFAULT_VIDEO_ENCODING_CONFIG); obj["videoQuality"] = result; obj["targetWidth"] = size.width; obj["targetHeight"] = size.height; obj["targetBitrate"] = result2; const obj4 = require(4698) /* calculateTargetDimensions */; if (obj6.isAndroid()) { if (obj7.getSystemVersionMajor() > 34) { let _Math = Math; let frameRate = Math.min(videoMetadata.frameRate, require(4698) /* calculateTargetDimensions */.DEFAULT_VIDEO_ENCODING_CONFIG.frameRate); } obj["frameRate"] = frameRate; obj["skipVideoTranscode"] = result1; obj["createHDR"] = videoMetadata.isHDRContent; obj["rotationDegrees"] = videoMetadata.rotationDegrees; c7 = 0; let promise = new Promise((arg0, arg1) => { let closure_0 = arg0; let closure_1 = arg1; async function _findCompatibleConfig() { function* _loop() { let heightAlignment; let widthAlignment; let capabilities; let tmp = yield outer6_46(outer5_6); if (tmp.isSupported) { let obj = { v: true }; return obj; } else { if (null != tmp) { if (null != tmp.capabilities) { if (null != tmp.failures) { if (0 !== tmp.failures.length) { const failures = tmp.failures; if (null != failures.find((type) => "codec_not_found" === type.type)) { if (outer5_6.useHEVC) { outer5_6.useHEVC = false; obj = 1; } else { outer6_20.error("No supported video encoder found"); const _Error3 = Error; const error = new Error("No supported video encoder found"); outer4_1(error); obj = { v: false }; } return obj; } else { const failures1 = tmp.failures; let flag = false; if (null != failures1.find((type) => { let tmp = "resolution" === type.type; if (!tmp) { tmp = "resolution_alignment" === type.type; } return tmp; })) { flag = false; if (null != tmp.capabilities.resolution) { if (0 !== outer5_6.targetHeight) { if (0 !== outer5_6.targetWidth) { const result = outer5_6.targetWidth / outer5_6.targetHeight; const _Math6 = Math; let bound = Math.min(outer5_6.targetWidth, tmp.capabilities.resolution.maxWidth); const _Math7 = Math; let bound1 = Math.min(outer5_6.targetHeight, tmp.capabilities.resolution.maxHeight); if (bound !== outer5_6.targetWidth) { const _Math = Math; bound1 = Math.round(bound / result); } if (bound1 !== outer5_6.targetHeight) { const _Math2 = Math; bound = Math.round(bound1 * result); } ({ widthAlignment, heightAlignment } = tmp.capabilities.blockSize); const _Math3 = Math; const result1 = Math.floor(bound / widthAlignment) * widthAlignment; const _Math4 = Math; const result2 = Math.floor(bound1 / heightAlignment) * heightAlignment; let tmp10 = result1 === outer5_6.targetWidth; if (tmp10) { tmp10 = result2 === outer5_6.targetHeight; } flag = false; if (!tmp10) { outer5_6.targetWidth = result1; outer5_6.targetHeight = result2; flag = true; } } } const _Error2 = Error; const error1 = new Error("Invalid video dimensions: width or height is 0"); outer4_1(error1); const obj1 = { v: false }; return obj1; } } const failures2 = tmp.failures; const found = failures2.find((type) => "frameRate" === type.type); capabilities = tmp.capabilities; let flag2 = flag; if (null != found) { let min; if (null != capabilities) { const frameRate = capabilities.frameRate; if (null != frameRate) { min = frameRate.min; } } flag2 = flag; if (null != min) { let max; if (null != capabilities) { const frameRate2 = capabilities.frameRate; if (null != frameRate2) { max = frameRate2.max; } } flag2 = flag; if (null != max) { const frameRate3 = outer5_6.frameRate; const message = found.message; if (message.includes("not supported at resolution")) { const items = [60, 30, 29.97, 24, 15]; const sorted = items.sort((arg0, arg1) => arg1 - arg0); min = sorted.find((arg0) => { let tmp = arg0 < outer6_6.frameRate; if (tmp) { tmp = arg0 >= capabilities.frameRate.min; } return tmp; }); if (null == min) { min = capabilities.frameRate.min; } let bound2 = min; } else { const _Math5 = Math; bound2 = Math.min(outer5_6.frameRate, capabilities.frameRate.max); } flag2 = flag; if (bound2 !== outer5_6.frameRate) { outer5_6.frameRate = bound2; flag2 = true; } } } } if (flag2) { outer5_7 = outer5_7 + 1; } else { obj = { currentFailures: tmp.failures, config: outer5_6, capabilities: tmp.capabilities, attempt: outer5_7 + 1 }; outer6_20.error("No adjustments possible for current failures", obj); const _Error = Error; const error2 = new Error("No adjustments possible for current failures"); outer4_1(error2); const obj2 = { v: false }; return obj2; } } } } } } const obj3 = { config: outer5_6, attempt: outer5_7 + 1 }; outer6_20.warn("Unable to determine device capabilities or adjust parameters", obj3); return 0; } } if (outer3_7 < 4) { const _Symbol = Symbol; const iter7 = _loop()[Symbol.iterator](); HermesBuiltin.ensureObject("iterator is not an object"); const iter = iter7.next(undefined); HermesBuiltin.ensureObject("iterator.next() did not return an object"); if (iter.done) { while (true) { let value = iter2.value; let num = 0; let num2 = 1; if (0 === value) { break; } else { while (true) { let tmp16 = value; if (1 !== value) { if (value) { break; } } let tmp17 = outer3_7; if (outer3_7 >= 4) { break label0; } else { let _loopResult1 = _loop(); let _Symbol2 = Symbol; let iter8 = _loopResult1[Symbol.iterator](); let tmp36 = iter8; let str12 = "iterator is not an object"; let ensureObjectResult2 = HermesBuiltin.ensureObject("iterator is not an object"); let iter4 = iter8.next(undefined); let tmp18 = iter4; let str4 = "iterator.next() did not return an object"; let ensureObjectResult3 = HermesBuiltin.ensureObject("iterator.next() did not return an object"); if (iter4.done) { while (true) { if (0 !== iter5.value) { break; } else { break label0; } break label0; } } else { let result = HermesBuiltin.generatorSetDelegated(); let tmp21 = yield iter4; let tmp22 = tmp21; let tmp23 = tmp2; while (true) { let str5 = "return"; let tmp25 = iter8; let tmp24 = tmp21; let method = HermesBuiltin.getMethod("return"); if (method === undefined) { return tmp21; } else { let tmp27 = tmp21; let iter6 = method(tmp24); let str6 = "iterator.return() did not return an object"; let tmp28 = iter6; let ensureObjectResult4 = HermesBuiltin.ensureObject("iterator.return() did not return an object"); if (iter6.done) { return iter6.value; } else { let result1 = HermesBuiltin.generatorSetDelegated(); tmp21 = yield iter6; continue; } } } } } break label0; } return value.v; } break; } } else { let result2 = HermesBuiltin.generatorSetDelegated(); let tmp6 = yield iter; while (true) { let str2 = "return"; let tmp10 = iter7; let tmp9 = tmp6; let method1 = HermesBuiltin.getMethod("return"); if (method1 === undefined) { return tmp6; } else { let tmp12 = tmp6; let iter3 = method1(tmp9); let str3 = "iterator.return() did not return an object"; let tmp13 = iter3; let ensureObjectResult5 = HermesBuiltin.ensureObject("iterator.return() did not return an object"); if (iter3.done) { return iter3.value; } else { let result3 = HermesBuiltin.generatorSetDelegated(); tmp6 = yield iter3; continue; } } } } const _loopResult = _loop(); } return false; } function resolveWithConfig(path) { return lib({ path, encodingConfig: outer1_6 }); } const promise = (function findCompatibleConfig() { return _findCompatibleConfig(...arguments); })(); (function findCompatibleConfig() { return _findCompatibleConfig(...arguments); })().then((arg0) => { if (arg0) { if (outer2_34(lib)) { let obj = { encodingConfig: outer1_6, compressionQuality: resolveWithConfig, isLowQuality: _findCompatibleConfig, videoQuality: outer1_4, skipVideoTranscode: outer1_5 }; let nextPromise = outer2_27("resolveToMediaFilePath", lib, obj).then(resolveWithConfig, callback); const promise4 = outer2_27("resolveToMediaFilePath", lib, obj); } else { let obj1 = outer2_0(outer2_2[13]); const tmp16 = !obj1.isIOS(); if (tmp16) { if (!tmp16) { obj = { encodingConfig: outer1_6, videoQuality: outer1_4, isMov: true, skipVideoTranscode: outer1_5 }; nextPromise = outer2_27("compressVideo", lib, obj).then(resolveWithConfig, callback); const promise3 = outer2_27("compressVideo", lib, obj); } else { let obj3 = outer2_0(outer2_2[13]); const tmp26 = !obj3.isIOS(); if (tmp26) { if (!tmp26) { obj1 = { encodingConfig: outer1_6, videoQuality: outer1_4, skipVideoTranscode: outer1_5 }; nextPromise = outer2_27("compressVideo", lib, obj1).then(resolveWithConfig, callback); const promise2 = outer2_27("compressVideo", lib, obj1); } else { const formatted = lib.toLowerCase(); let isIOSResult = outer2_0(outer2_2[13]).isIOS(); if (isIOSResult) { isIOSResult = obj6.startsWith("file"); } if (isIOSResult) { let endsWithResult = formatted.endsWith("mov"); if (!endsWithResult) { endsWithResult = formatted.endsWith("mp4"); } if (!endsWithResult) { endsWithResult = formatted.endsWith("qt"); } isIOSResult = endsWithResult; } if (isIOSResult) { let obj2 = { encodingConfig: outer1_6, videoQuality: outer1_4 }; const formatted1 = lib.toLowerCase(); let endsWithResult1 = formatted1.endsWith("mov"); if (!endsWithResult1) { const formatted2 = lib.toLowerCase(); endsWithResult1 = formatted2.endsWith("qt"); } obj2.isMov = endsWithResult1; obj2.skipVideoTranscode = outer1_5; nextPromise = outer2_27("compressVideo", lib, obj2).then(resolveWithConfig, callback); const tmp50 = outer2_27; const tmp50Result = outer2_27("compressVideo", lib, obj2); const tmp51 = lib; } else { obj3 = { uri: lib, filename: callback }; outer2_20.error("Unsupported video URI format", obj3); const _Error2 = Error; const _HermesInternal = HermesInternal; const error = new Error("Unsupported video URI format: " + lib); callback(error); } obj6 = lib; const obj8 = outer2_0(outer2_2[13]); } } else { if (obj5.isPhotoKitAsset(str5, str6)) { let match; if (null != str6) { match = str6.match(/\.mp4$/i); } let tmp30 = null != match; } else { tmp30 = null != str5.match(/^assets-library:\/\/.+&ext=mp4$/i); if (tmp30) { tmp30 = outer2_35(str5); } } obj5 = outer2_0(outer2_2[19]); } } } else { obj2 = outer2_0(outer2_2[19]); if (obj2.isPhotoKitAsset(str3, str4)) { let match1; if (null != str4) { match1 = str4.match(/\.(mov|qt)$/i); } let tmp20 = null != match1; } else { tmp20 = null != str3.match(/^assets-library:\/\/.+&ext=(mov|qt)$/i); if (tmp20) { tmp20 = outer2_35(str3); } } } } } else { obj = { finalConfig: outer1_6, attempts: outer1_7 }; outer2_20.error("Could not find compatible encoding configuration after multiple attempts", obj); const _Error = Error; const error1 = new Error("Could not find compatible encoding configuration after multiple attempts"); callback(error1); } }).catch(arg1); }); return promise; } frameRate = videoMetadata.frameRate; } function buildResolvedUpload(arg0) { return _buildResolvedUpload(...arguments); } async function _buildResolvedUpload(arg0, arg1) { let obj = outer2_0(outer2_2[11]); obj = { uri: arg0.path, i: arg0.i, overrideType: arg0.mimeType, overrideFilename: arg0.filename }; const file = obj.getFile(obj); obj = {}; if (tmp3) { obj = yield outer2_48(arg0.originalUri, arg0.path, arg0.filename, arg0.attachmentQualityMetricsEnabled, arg0.attachmentOriginDetectionEnabled); } const obj1 = {}; const merged = Object.assign(outer2_4(file, outer2_3)); obj1["name"] = file.filename; obj1["spoiler"] = arg0.spoiler; obj1["description"] = arg0.description; obj1["imageCompressionQuality"] = arg0.compressionQuality; obj1["imageEncoderType"] = arg0.imageEncoderType; obj1["videoCompressionQuality"] = arg0.videoQualitySetting; obj1["videoMetadata"] = arg0.videoMetadata; obj1["encodingConfig"] = arg0.encodingConfig; obj1["sourceWidth"] = arg0.sourceImageDimensions.width; obj1["sourceHeight"] = arg0.sourceImageDimensions.height; obj1["uploadedImageWidth"] = arg0.uploadedImageWidth; obj1["uploadedImageHeight"] = arg0.uploadedImageHeight; obj1["psnr"] = obj.psnr; obj1["ssim"] = obj.ssim; obj1["origin"] = obj.origin; obj1["psnrMeasurementLatencyMs"] = obj.psnrMeasurementLatencyMs; obj1["ssimMeasurementLatencyMs"] = obj.ssimMeasurementLatencyMs; return obj1; } async function _processVideoUpload(arg0, arg1) { let iter = (function*(arg0) { let description; let fileSize; let filename; let i; let mimeType; let originalUri; let spoiler; ({ originalUri, filename, mimeType, fileSize, spoiler, description, i } = arg0); yield undefined; const tmp2 = outer2_29(); let dataSavingMode = outer2_10.dataSavingMode; if (dataSavingMode) { dataSavingMode = outer2_11.getType() === outer2_15.CELLULAR; } const tmp5 = yield (function fetchVideoMetadata(originalUri, mimeType) { return outer3_43(...arguments); })(originalUri, mimeType); if (null == tmp5) { const _Error3 = Error; const error = new Error("Video metadata is required for video conversion"); throw error; } else { let obj = { location: "upload_utils.process_video_upload" }; if (obj3.getVideoFrameRateValidationExperimentConfig(obj).enableFrameRateValidation) { if (null != tmp5.frameRate) { const _Number = Number; } const _Error2 = Error; const _HermesInternal = HermesInternal; const error1 = new Error("Invalid video frame rate: " + tmp5.frameRate); throw error1; } obj = { uri: originalUri, filename, isLowQuality: dataSavingMode, compressionQuality: outer2_16.LOW, videoQualitySetting: tmp2, videoMetadata: tmp5, fileSize }; obj3 = outer2_0(outer2_2[23]); const path = yield outer2_37(obj).path; if (null == path) { const _Error = Error; const error2 = new Error("Failed to get video file path"); throw error2; } else { obj = { path, i, mimeType, filename, originalUri, spoiler, description, compressionQuality: outer2_16.LOW, videoQualitySetting: tmp2, videoMetadata: tmp5, encodingConfig: tmp9, sourceImageDimensions: {}, isImage: false }; return outer2_38(obj); } const tmp8 = yield outer2_37(obj); } })(); iter.next(); return iter; } async function _processImageOrFileUpload(arg0, arg1) { let iter = (function*(arg0) { let allowOptimization; let description; let enableOriginDetection; let enableQualityMetrics; let filename; let height; let i; let mimeType; let originalUri; let spoiler; let targetHeight; let targetWidth; let width; ({ originalUri, filename, mimeType, width, height, allowOptimization, spoiler, description, i } = arg0); yield undefined; let dataSavingMode = outer2_10.dataSavingMode; if (dataSavingMode) { dataSavingMode = outer2_11.getType() === outer2_15.CELLULAR; } const tmp4 = outer2_36(originalUri, mimeType); if (tmp4) { let obj = { width, height }; let size = obj; } else { size = {}; } let LOW = outer2_16.LOW; let tmp5 = tmp4; if (tmp4) { tmp5 = !dataSavingMode; } let flag = false; if (tmp5) { const useOriginalIfSmaller = outer2_0(outer2_2[24]).ADAPTIVE_COMPRESSION_CONFIG.useOriginalIfSmaller; let obj1 = outer2_0(outer2_2[24]); const adaptiveImageCompressionQuality = obj1.getAdaptiveImageCompressionQuality(size, outer2_0(outer2_2[24]).ADAPTIVE_COMPRESSION_CONFIG); const _HermesInternal = HermesInternal; outer2_20.log("Got image compression quality: " + adaptiveImageCompressionQuality + " for " + originalUri + " with dimensions: " + width + "x" + height + " and useOriginalIfSmaller: " + useOriginalIfSmaller); LOW = adaptiveImageCompressionQuality; flag = useOriginalIfSmaller; } let obj2 = outer2_0(outer2_2[13]); let isIOSResult = obj2.isIOS(); if (isIOSResult) { isIOSResult = originalUri.startsWith("ph://"); } let flag2 = false; if (tmp4) { let obj3 = outer2_0(outer2_2[25]); obj = { location: "upload_utils.process_image_upload" }; const mobileLosslessImageUploadV2Experiment = obj3.useMobileLosslessImageUploadV2Experiment(obj); let obj5 = outer2_0(outer2_2[26]); const tmp21 = !obj5.isDiscordFrontendDevelopment(); let enabled = !tmp21; if (tmp21) { enabled = mobileLosslessImageUploadV2Experiment.enabled; } flag2 = enabled; } enableQualityMetrics = false; enableOriginDetection = false; if (tmp4) { const AttachmentQualityMetricsExperiment = outer2_0(outer2_2[27]).AttachmentQualityMetricsExperiment; obj = { location: "upload_utils.process_image_upload" }; const config = AttachmentQualityMetricsExperiment.getConfig(obj); ({ enableQualityMetrics, enableOriginDetection } = config); } targetWidth = undefined; targetHeight = undefined; let result = LOW; let flag3 = flag; let flag4 = false; if (obj8.isIOS()) { result = LOW; flag3 = flag; flag4 = false; if (tmp4) { let flag5 = true; if (!obj9.isDiscordFrontendDevelopment()) { obj1 = { location: "upload_utils.process_image_upload" }; flag5 = outer2_0(outer2_2[28]).getIosJpegliConfig(obj1).useJpegliEncoder; const obj10 = outer2_0(outer2_2[28]); } result = LOW; flag3 = flag; flag4 = flag5; if (!dataSavingMode) { result = LOW; flag3 = flag; flag4 = flag5; if (null != size.width) { result = LOW; flag3 = flag; flag4 = flag5; if (null != size.height) { obj2 = { location: "upload_utils.process_image_upload" }; result = LOW; flag3 = flag; flag4 = flag5; if (obj12.getMobileImageEncodingLadderConfig(obj2).useImageEncodingLadder) { const ImageEncodingLadder = outer2_0(outer2_2[24]).ImageEncodingLadder; obj3 = {}; ({ width: obj14.width, height: obj14.height } = size); const encodingConfig = ImageEncodingLadder.selectEncodingConfig(obj3); result = encodingConfig.compressionQuality / 100; ({ targetWidth, targetHeight } = encodingConfig); flag3 = true; flag4 = flag5; } obj12 = outer2_0(outer2_2[29]); } } } obj9 = outer2_0(outer2_2[26]); } } const obj4 = { uri: originalUri, filename, isLowQuality: dataSavingMode, compressionQuality: result, mobileLosslessImageEnabled: flag2, useEnhancedConversion: isIOSResult, useJpegliEncoder: flag4, allowOptimization, targetWidth, targetHeight }; const tmp36 = yield (function tryConvertImage(arg0) { return outer3_42(...arguments); })(obj4); if (null != tmp36) { const path = tmp36.path; if (null == path) { const _Error = Error; const error = new Error("Failed to get image file path"); throw error; } else { obj5 = { path, i, mimeType, filename, originalUri, spoiler, description, compressionQuality: result, sourceImageDimensions: size, isImage: tmp4, imageEncoderType: tmp44 }; let outputWidth; if (null != tmp36) { outputWidth = tmp36.outputWidth; } if (null == outputWidth) { outputWidth = size.width; } obj5.uploadedImageWidth = outputWidth; let outputHeight; if (null != tmp36) { outputHeight = tmp36.outputHeight; } if (null == outputHeight) { outputHeight = size.height; } obj5.uploadedImageHeight = outputHeight; obj5.attachmentQualityMetricsEnabled = enableQualityMetrics; obj5.attachmentOriginDetectionEnabled = enableOriginDetection; return outer2_38(obj5); } } else { if (allowOptimization === undefined) { allowOptimization = true; } if (outer2_34(originalUri)) { const obj6 = { compressionQuality: result, isLowQuality: dataSavingMode, skipVideoTranscode: true, useOriginalIfSmaller: flag3, allowOptimization }; allowOptimization = "resolveToMediaFilePath"; let resolved = outer2_27("resolveToMediaFilePath", originalUri, obj6); } else { resolved = Promise.resolve(originalUri); } const tmp41 = yield resolved; return tmp41; } obj8 = outer2_0(outer2_2[13]); })(); iter.next(); return iter; } async function _tryConvertImage(arg0, arg1) { let iter = (function*(arg0) { let allowOptimization; let compressionQuality; let filename; let isLowQuality; let mobileLosslessImageEnabled; let targetHeight; let targetWidth; let uri; let useEnhancedConversion; let useJpegliEncoder; ({ uri, filename, isLowQuality, compressionQuality, mobileLosslessImageEnabled, allowOptimization, useEnhancedConversion, useJpegliEncoder, targetWidth, targetHeight } = arg0); yield undefined; let obj = outer2_0(outer2_2[13]); let isIOSResult = obj.isIOS(); if (isIOSResult) { isIOSResult = null != uri.match(outer2_21); } if (isIOSResult) { obj = { compressionQuality }; const tmp59 = yield outer2_27("convertBase64ToJPEG", uri.replace(outer2_21, ""), obj); let tmp60 = null; if (tmp59) { obj = { path: tmp59, encoderUsed: outer2_0(outer2_2[30]).ImageEncoder.NATIVE }; tmp60 = obj; } return tmp60; } else { let obj1 = outer2_0(outer2_2[13]); let isIOSResult1 = obj1.isIOS(); if (isIOSResult1) { isIOSResult1 = null != uri.match(outer2_22); } if (isIOSResult1) { const tmp54 = yield outer2_27("convertBase64ToGIF", uri.replace(outer2_22, "")); let tmp55 = null; if (tmp54) { obj1 = { path: tmp54 }; tmp55 = obj1; } return tmp55; } else { if (mobileLosslessImageEnabled) { if (yield (function shouldConvertToPNG(uri, filename) { return outer3_33(...arguments); })(uri, filename)) { const obj2 = {}; const MediaManager = outer2_6.MediaManager; obj2.path = yield MediaManager.getLosslessImageData(uri); obj2.encoderUsed = outer2_0(outer2_2[30]).ImageEncoder.PASSTHROUGH; return obj2; } } while (true) { let tmp17 = outer2_0; let tmp18 = outer2_2; let num2 = 19; let obj3 = outer2_0(outer2_2[19]); let tmp19 = uri; let result = obj3.shouldForceConvertToJPG(uri, filename, tmp2); if (result) { break; } else { let tmp21 = outer2_0; let tmp22 = outer2_2; let obj4 = outer2_0(outer2_2[19]); let tmp23 = uri; let tmp24 = obj4; let tmp25 = filename; let tmp26 = isLowQuality; let tmp27 = mobileLosslessImageEnabled; let tmp28 = allowOptimization; if (obj4.shouldConvertToJPG(uri, filename, isLowQuality, mobileLosslessImageEnabled, allowOptimization)) { break; } else { let tmp29 = uri; let tmp30 = outer2_0; let tmp31 = outer2_2; let obj5 = outer2_0(outer2_2[13]); let tmp32 = !obj5.isIOS(); if (tmp32) { if (!tmp32) { let tmp40 = outer2_27; let tmp41 = uri; let str = "convertToGIFFilePath"; let tmp42 = yield outer2_27("convertToGIFFilePath", uri); let tmp43 = null; if (tmp42) { obj3 = { path: tmp42 }; tmp43 = obj3; } return tmp43; } else { let tmp39 = null; return null; } } else { let tmp33 = outer2_0; let tmp34 = outer2_2; let obj7 = outer2_0(outer2_2[19]); let tmp35 = null; if (obj7.isPhotoKitAsset(uri, filename)) { let match; if (null != filename) { match = filename.match(/\.gif$/i); } let tmp36 = null != match; } else { tmp36 = null != uri.match(/^assets-library:\/\/.+&ext=gif$/i); } let tmp38 = tmp36; } } } let tmp44 = outer2_27; let tmp45 = uri; obj4 = { compressionQuality, forceConvertToJPG: result, useEnhancedConversion, useJpegliEncoder, targetWidth, targetHeight }; let str2 = "convertToJPEG"; let tmp46 = yield outer2_27("convertToJPEG", uri, obj4); let tmp47 = null; let path; if (null != tmp46) { path = tmp46.path; } let tmp49 = tmp46; if (null != path) { tmp49 = path; } if (null != tmp46) { let encoderUsed = tmp46.encoderUsed; } if (null != tmp46) { let outputWidth = tmp46.outputWidth; } if (null != tmp46) { let outputHeight = tmp46.outputHeight; } let tmp50 = null; if (tmp49) { obj5 = { path: tmp49, encoderUsed, outputWidth, outputHeight }; tmp50 = obj5; } return tmp50; } } } })(); iter.next(); return iter; } async function _fetchVideoMetadata(arg0, arg1, arg2) { if (outer2_35(arg0, arg1)) { const tmp4 = yield outer2_27("getVideoMetadata", tmp); const rotationDegrees = tmp4.rotationDegrees; let num = 0; if (null != rotationDegrees) { num = rotationDegrees; } tmp4.rotationDegrees = num; return tmp4; } } function getCaptionLabel(type, isVideo, item) { if (isVideo) { let str3 = "VIDEO"; if (null != item.playableDuration) { str3 = require(4705) /* getTimeFormat */.getTimeFormat(item.playableDuration); const obj = require(4705) /* getTimeFormat */; } let str2 = str3; } else { str2 = null; if ("image/gif" === type) { str2 = "GIF"; } } return str2; } function getImageDimensionsIfMissing(url, width, height, arg3) { return _getImageDimensionsIfMissing(...arguments); } async function _getImageDimensionsIfMissing(arg0, arg1, arg2, arg3, arg4) { let obj = { width: arg1, height: arg2 }; if (null != arg1) { if (null != arg2) { return obj; } } obj = { uri: arg0, overrideFilename: arg3 }; const file = outer2_0(outer2_2[11]).getFile(obj); if (!file.isImage) { if (!tmp2.isVideo) { return obj; } } let size = yield (function getImageDimensionByUri(uri) { let closure_0 = uri; return new Promise((arg0, arg1) => { let closure_0 = arg0; return outer4_7.getSize(closure_0, (width, height) => callback({ width, height }), arg1); }); })(arg0); const obj2 = outer2_0(outer2_2[11]); const isIOSResult = outer2_0(outer2_2[13]).isIOS(); let isVideo = isIOSResult; if (isIOSResult) { isVideo = file.isVideo; } let tmp6 = isVideo; if (isVideo) { tmp6 = 0 === size.width; } let tmp8 = tmp6; if (tmp6) { tmp8 = 0 === size.height; } if (tmp8) { const DCDFileManager = outer2_6.DCDFileManager; size = yield DCDFileManager.getVideoDimensions(arg0); } return size; } function isHEVCEncodingSupported() { return _isHEVCEncodingSupported(...arguments); } async function _isHEVCEncodingSupported() { const MediaManager = outer2_6.MediaManager; return yield MediaManager.isHEVCEncodingSupported(); } function checkVideoEncodingSupport(arg0) { return _checkVideoEncodingSupport(...arguments); } async function _checkVideoEncodingSupport(arg0, arg1) { const MediaManager = outer2_6.MediaManager; return yield MediaManager.isVideoEncodingSupported({ width: arg0.targetWidth, height: arg0.targetHeight, frameRate: arg0.frameRate, isHEVC: arg0.useHEVC }); } function calculateImageQualityMetrics(arg0, arg1) { return _calculateImageQualityMetrics(...arguments); } async function _calculateImageQualityMetrics(arg0, arg1, arg2, arg3, arg4, arg5) { let str = arg1; const obj = {}; if (arg4) { const MediaManager = outer2_0(outer2_2[2]).NativeModules.MediaManager; obj.origin = yield MediaManager.getMediaOrigin(arg0).source; } while (true) { let tmp5 = arg3; if (!arg3) { break; } else { let tmp6 = outer2_0; let tmp7 = outer2_2; let num2 = 2; let MediaManager2 = outer2_0(outer2_2[2]).NativeModules.MediaManager; let tmp9 = str; let str2 = "://"; let tmp8 = str; if (str.includes("://")) { let tmp19 = MediaManager2; let tmp20 = yield MediaManager2.calculateImageQualityMetrics(arg0, tmp8); let tmp21 = obj; ({ psnr: obj.psnr, ssim: obj.ssim, psnrCalculationTimeMs: obj.psnrMeasurementLatencyMs, ssimCalculationTimeMs: obj.ssimMeasurementLatencyMs } = tmp20); let tmp22 = outer2_20; let tmp23 = globalThis; let _HermesInternal3 = HermesInternal; let str7 = "Quality metrics calculated: PSNR="; let str8 = "dB, SSIM="; let logResult = outer2_20.log("Quality metrics calculated: PSNR=" + tmp20.psnr + "dB, SSIM=" + tmp20.ssim); break; } else { let tmp10 = str; let str3 = "/"; if (!str.includes("/")) { let tmp11 = str; let str4 = "\\"; if (!str.includes("\\")) { let tmp12 = arg0; let str5 = "ph://"; let tmp13 = str; let tmp14 = globalThis; let _HermesInternal = HermesInternal; if (arg0.startsWith("ph://")) { let combined = concat(str); } else { let str6 = "file://"; combined = concat(str); } } let tmp18 = combined; } let tmp17 = globalThis; let _HermesInternal2 = HermesInternal; let tmp16 = str; str = "file://"; combined = "file://" + tmp16; } } } } let closure_3 = ["filename"]; ({ NativeModules: closure_6, Image: closure_7 } = get_ActivityIndicator); ({ VideoCompressionQuality: closure_8, VideoQualitySettings: closure_9 } = _isNativeReflectConstruct); ({ Base64PNGPrefix: closure_13, Base64GIFPrefix } = ME); ({ NetworkConnectionTypes: closure_15, CompressionQuality: closure_16, Base64WEBPPrefix: closure_17, Base64AVIFPrefix: closure_18 } = ME); importDefaultResult = new importDefaultResult("UploadUtils.tsx"); const regExp = new RegExp("^" + ME.Base64JPEGPrefix, "i"); const regExp1 = new RegExp("^" + Base64GIFPrefix, "i"); const Canceled = "Canceled"; let result = require("get ActivityIndicator").fileFinishedImporting("utils/native/UploadUtils.tsx"); export default { getFileInfo, isVideo, getType, openImagePickerUnhandled, openImagePicker, getCaptionLabel, getImageDimensionsIfMissing, isHEVCEncodingSupported, getAppDir }; export const base64JPEGRegex = regExp; export const base64GIFRegex = regExp1; export { openImagePicker }; export { mediaManager }; export const getImageCompressionQuality = function getImageCompressionQuality() { if (closure_10.dataSavingMode) { if (store.getType() === constants3.CELLULAR) { let HIGH = constants4.LOW; } return HIGH; } HIGH = constants4.HIGH; }; export { getVideoQuality }; export { resolveModeToVideoQualityForUserWithFeature }; export { resolveModeToVideoQualityForFreeUser }; export const cancelGetFileInfo = function cancelGetFileInfo(item) { item = item.item; return new Promise((arg0, arg1) => { if (obj.isAndroid()) { if (item.platform === item(outer1_2[17]).UploadPlatform.REACT_NATIVE) { outer1_27("cancelResolveToMediaFilePath", item.uri).then(arg0, arg1); const promise = outer1_27("cancelResolveToMediaFilePath", item.uri); } } arg0(); }); }; export const getFileSize = function getFileSize(uri) { let replaced = uri; if (obj.isIOS()) { replaced = uri.replace(/file:\/\//, ""); } obj = require(477) /* set */; if (obj2.isAndroid()) { if (null == importDefault(1247)) { let rejectResult = Promise.reject("RTNFileManager doesn't exist?"); } else { rejectResult = importDefault(1247).getSize(replaced); const obj3 = importDefault(1247); } } else { const DCDFileManager = closure_6.DCDFileManager; return DCDFileManager.getSize(replaced); } }; export { getAppDir }; export { getFileInfo }; export const shouldConvertToJPG = require("isPhotoKitAsset").shouldConvertToJPG; export const shouldForceConvertToJPG = require("isPhotoKitAsset").shouldForceConvertToJPG; export { shouldResolveToMediaFilePath }; export { isVideo }; export { isImage }; export { getType }; export { getCaptionLabel }; export { getImageDimensionsIfMissing }; export { isHEVCEncodingSupported }; export { checkVideoEncodingSupport }; export { calculateImageQualityMetrics }; export const getFileFromUploadItem = function getFileFromUploadItem(result1) { let obj = require(4667) /* items */; obj = { uri: result1.uri, overrideFilename: result1.filename, overrideType: result1.mimeType }; return obj.getFile(obj); };