(
threadInfo: ThreadInfo,
file: File,
selectTime: number,
)
| 783 | } |
| 784 | |
| 785 | async appendFile( |
| 786 | threadInfo: ThreadInfo, |
| 787 | file: File, |
| 788 | selectTime: number, |
| 789 | ): Promise<{ |
| 790 | steps: $ReadOnlyArray<MediaMissionStep>, |
| 791 | result: |
| 792 | | MediaMissionFailure |
| 793 | | { success: true, pendingUpload: PendingMultimediaUpload }, |
| 794 | }> { |
| 795 | const steps: MediaMissionStep[] = [ |
| 796 | { |
| 797 | step: 'web_selection', |
| 798 | filename: file.name, |
| 799 | size: file.size, |
| 800 | mime: file.type, |
| 801 | selectTime, |
| 802 | }, |
| 803 | ]; |
| 804 | |
| 805 | let response; |
| 806 | const validationStart = Date.now(); |
| 807 | try { |
| 808 | response = await validateFile(file); |
| 809 | } catch (e) { |
| 810 | return { |
| 811 | steps, |
| 812 | result: { |
| 813 | success: false, |
| 814 | reason: 'processing_exception', |
| 815 | time: Date.now() - validationStart, |
| 816 | exceptionMessage: getMessageForException(e), |
| 817 | }, |
| 818 | }; |
| 819 | } |
| 820 | const { steps: validationSteps, result } = response; |
| 821 | steps.push(...validationSteps); |
| 822 | if (!result.success) { |
| 823 | return { steps, result }; |
| 824 | } |
| 825 | const { uri, file: fixedFile, mediaType, dimensions } = result; |
| 826 | |
| 827 | const supportsEncryptedMultimedia = |
| 828 | threadSpecs[threadInfo.type].protocol().supportsEncryptedMultimedia; |
| 829 | |
| 830 | let encryptionResult; |
| 831 | if (supportsEncryptedMultimedia) { |
| 832 | let encryptionResponse; |
| 833 | const encryptionStart = Date.now(); |
| 834 | try { |
| 835 | encryptionResponse = await encryptFile(fixedFile); |
| 836 | } catch (e) { |
| 837 | return { |
| 838 | steps, |
| 839 | result: { |
| 840 | success: false, |
| 841 | reason: 'encryption_exception', |
| 842 | time: Date.now() - encryptionStart, |
no test coverage detected