(threadInfo: ThreadInfo, upload: PendingMultimediaUpload)
| 899 | } |
| 900 | |
| 901 | async uploadFile(threadInfo: ThreadInfo, upload: PendingMultimediaUpload) { |
| 902 | const { selectTime, localID, encryptionKey } = upload; |
| 903 | const threadID = threadInfo.id; |
| 904 | const uploadMultimediaMetadataToKeyserver = |
| 905 | threadSpecs[threadInfo.type].protocol() |
| 906 | .uploadMultimediaMetadataToKeyserver; |
| 907 | const isEncrypted = |
| 908 | !!encryptionKey && |
| 909 | (upload.mediaType === 'encrypted_photo' || |
| 910 | upload.mediaType === 'encrypted_video'); |
| 911 | |
| 912 | const steps = [...upload.steps]; |
| 913 | let userTime; |
| 914 | |
| 915 | const { identityContext } = this.props; |
| 916 | invariant(identityContext, 'Identity context should be set'); |
| 917 | |
| 918 | const sendReport = (missionResult: MediaMissionResult) => { |
| 919 | const newThreadID = this.getRealizedOrPendingThreadID(threadID); |
| 920 | const latestUpload = this.state.pendingUploads[newThreadID][localID]; |
| 921 | invariant( |
| 922 | latestUpload, |
| 923 | `pendingUpload ${localID} for ${newThreadID} missing in sendReport`, |
| 924 | ); |
| 925 | const { serverID, messageID } = latestUpload; |
| 926 | const totalTime = Date.now() - selectTime; |
| 927 | userTime = userTime ? userTime : totalTime; |
| 928 | const mission = { steps, result: missionResult, totalTime, userTime }; |
| 929 | this.queueMediaMissionReports([ |
| 930 | { |
| 931 | mediaMission: mission, |
| 932 | uploadLocalID: localID, |
| 933 | uploadServerID: serverID, |
| 934 | messageLocalID: messageID, |
| 935 | }, |
| 936 | ]); |
| 937 | }; |
| 938 | |
| 939 | let uploadResult, uploadExceptionMessage; |
| 940 | const uploadStart = Date.now(); |
| 941 | try { |
| 942 | const callbacks = { |
| 943 | onProgress: (percent: number) => |
| 944 | this.setProgress(threadID, localID, percent), |
| 945 | abortHandler: (abort: () => void) => |
| 946 | this.handleAbortCallback(threadID, localID, abort), |
| 947 | }; |
| 948 | |
| 949 | const supportsEncryptedMultimedia = |
| 950 | threadSpecs[threadInfo.type].protocol().supportsEncryptedMultimedia; |
| 951 | |
| 952 | if (supportsEncryptedMultimedia) { |
| 953 | const { mediaType, blobHash, dimensions, thumbHash } = upload; |
| 954 | invariant( |
| 955 | mediaType === 'encrypted_photo' || mediaType === 'encrypted_video', |
| 956 | 'uploaded media should be encrypted', |
| 957 | ); |
| 958 | invariant( |
no test coverage detected