diff --git a/lib/actions/upload-actions.js b/lib/actions/upload-actions.js --- a/lib/actions/upload-actions.js +++ b/lib/actions/upload-actions.js @@ -131,11 +131,16 @@ +loop?: boolean, }; +export type BlobServiceUploadResult = { + ...UploadMultimediaResult, + blobHolder: ?string, +}; + export type BlobServiceUploadAction = (input: { +uploadInput: BlobServiceUploadInput, +keyserverOrThreadID: string, +callbacks?: MultimediaUploadCallbacks, -}) => Promise<{ ...UploadMultimediaResult, blobHolder: ?string }>; +}) => Promise; const blobServiceUpload = (callKeyserverEndpoint: CallKeyserverEndpoint): BlobServiceUploadAction => diff --git a/native/input/input-state-container.react.js b/native/input/input-state-container.react.js --- a/native/input/input-state-container.react.js +++ b/native/input/input-state-container.react.js @@ -26,6 +26,7 @@ type MultimediaUploadCallbacks, type MultimediaUploadExtras, type BlobServiceUploadAction, + type BlobServiceUploadResult, } from 'lib/actions/upload-actions.js'; import commStaffCommunity from 'lib/facts/comm-staff-community.js'; import { pathFromURI, replaceExtension } from 'lib/media/file-utils.js'; @@ -839,47 +840,47 @@ uploadThumbnailResult, mediaMissionResult; try { - const uploadPromises = []; if ( this.useBlobServiceUploads && (processedMedia.mediaType === 'encrypted_photo' || processedMedia.mediaType === 'encrypted_video') ) { - uploadPromises.push( - this.props.blobServiceUpload({ - uploadInput: { - blobInput: { - type: 'uri', - uri: uploadURI, - filename: filename, - mimeType: mime, - }, - blobHash: processedMedia.blobHash, - encryptionKey: processedMedia.encryptionKey, - dimensions: processedMedia.dimensions, - thumbHash: - processedMedia.mediaType === 'encrypted_photo' - ? processedMedia.thumbHash - : null, + const uploadPromise = this.props.blobServiceUpload({ + uploadInput: { + blobInput: { + type: 'uri', + uri: uploadURI, + filename: filename, + mimeType: mime, }, - keyserverOrThreadID: threadInfo.id, - callbacks: { - blobServiceUploadHandler, - onProgress: (percent: number) => { - this.setProgress( - localMessageID, - localMediaID, - 'uploading', - percent, - ); - }, + blobHash: processedMedia.blobHash, + encryptionKey: processedMedia.encryptionKey, + dimensions: processedMedia.dimensions, + thumbHash: + processedMedia.mediaType === 'encrypted_photo' + ? processedMedia.thumbHash + : null, + }, + keyserverOrThreadID: threadInfo.id, + callbacks: { + blobServiceUploadHandler, + onProgress: (percent: number) => { + this.setProgress( + localMessageID, + localMediaID, + 'uploading', + percent, + ); }, - }), - ); + }, + }); - if (processedMedia.mediaType === 'encrypted_video') { - uploadPromises.push( - this.props.blobServiceUpload({ + const uploadThumbnailPromise: Promise = + (async () => { + if (processedMedia.mediaType !== 'encrypted_video') { + return undefined; + } + return await this.props.blobServiceUpload({ uploadInput: { blobInput: { type: 'uri', @@ -897,49 +898,51 @@ callbacks: { blobServiceUploadHandler, }, - }), - ); - } - [uploadResult, uploadThumbnailResult] = await Promise.all( - uploadPromises, - ); + }); + })(); + + [uploadResult, uploadThumbnailResult] = await Promise.all([ + uploadPromise, + uploadThumbnailPromise, + ]); } else { - uploadPromises.push( - this.props.uploadMultimedia( - { uri: uploadURI, name: filename, type: mime }, - { - ...processedMedia.dimensions, - loop: - processedMedia.mediaType === 'video' || - processedMedia.mediaType === 'encrypted_video' - ? processedMedia.loop - : undefined, - encryptionKey: processedMedia.encryptionKey, - thumbHash: - processedMedia.mediaType === 'photo' || - processedMedia.mediaType === 'encrypted_photo' - ? processedMedia.thumbHash - : null, - }, - { - onProgress: (percent: number) => - this.setProgress( - localMessageID, - localMediaID, - 'uploading', - percent, - ), - uploadBlob: this.uploadBlob, - }, - ), + const uploadPromise = this.props.uploadMultimedia( + { uri: uploadURI, name: filename, type: mime }, + { + ...processedMedia.dimensions, + loop: + processedMedia.mediaType === 'video' || + processedMedia.mediaType === 'encrypted_video' + ? processedMedia.loop + : undefined, + encryptionKey: processedMedia.encryptionKey, + thumbHash: + processedMedia.mediaType === 'photo' || + processedMedia.mediaType === 'encrypted_photo' + ? processedMedia.thumbHash + : null, + }, + { + onProgress: (percent: number) => + this.setProgress( + localMessageID, + localMediaID, + 'uploading', + percent, + ), + uploadBlob: this.uploadBlob, + }, ); - if ( - processedMedia.mediaType === 'video' || - processedMedia.mediaType === 'encrypted_video' - ) { - uploadPromises.push( - this.props.uploadMultimedia( + const uploadThumbnailPromise: Promise = + (async () => { + if ( + processedMedia.mediaType !== 'video' && + processedMedia.mediaType !== 'encrypted_video' + ) { + return undefined; + } + return await this.props.uploadMultimedia( { uri: processedMedia.uploadThumbnailURI, name: replaceExtension(`thumb${filename}`, 'jpg'), @@ -954,12 +957,13 @@ { uploadBlob: this.uploadBlob, }, - ), - ); - } - [uploadResult, uploadThumbnailResult] = await Promise.all( - uploadPromises, - ); + ); + })(); + + [uploadResult, uploadThumbnailResult] = await Promise.all([ + uploadPromise, + uploadThumbnailPromise, + ]); } mediaMissionResult = { success: true }; } catch (e) {