23 lines
927 B
TypeScript
23 lines
927 B
TypeScript
import { Room } from 'matrix-js-sdk';
|
|||
|
|
import { TUploadItem } from '../state/room/roomInputDrafts';
|
||
|
|
import { encryptFile } from './matrix';
|
||
|
|
import { safeFile } from './mimeTypes';
|
||
|
|
import { fulfilledPromiseSettledResult } from './common';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Files → composer upload items for `room`, encrypting first when the room
|
||
|
|
* is E2EE. Shared by the composer's pick/drop/paste paths and the PWA share
|
||
|
|
* target (#155).
|
||
|
|
*/
|
||
|
|
export async function filesToUploadItems(room: Room, files: File[]): Promise<TUploadItem[]> {
|
||
|
|
const safeFiles = files.map(safeFile);
|
||
|
|
const metadata = { markedAsSpoiler: false };
|
||
|
|
if (room.hasEncryptionStateEvent()) {
|
||
|
|
const encrypted = fulfilledPromiseSettledResult(
|
||
|
|
await Promise.allSettled(safeFiles.map((f) => encryptFile(f))),
|
||
|
|
);
|
||
|
|
return encrypted.map((ef) => ({ ...ef, metadata }));
|
||
|
|
}
|
||
|
|
return safeFiles.map((f) => ({ file: f, originalFile: f, encInfo: undefined, metadata }));
|
||
|
|
}
|