Files
cinny/src/app/utils/uploadItems.ts
T

23 lines
927 B
TypeScript
Raw Normal View History

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 }));
}