// Copyright 2021 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only import { omit } from 'lodash'; import type { InMemoryAttachmentDraftType, AttachmentDraftType, } from '../types/Attachment'; import { isImageAttachment } from '../types/Attachment'; import { getImageDimensions } from '../types/VisualAttachment'; import * as Errors from '../types/errors'; import * as logger from '../logging/log'; export async function writeDraftAttachment( attachment: InMemoryAttachmentDraftType ): Promise { if (attachment.pending) { throw new Error('writeDraftAttachment: Cannot write pending attachment'); } const path = await window.Signal.Migrations.writeNewDraftData( attachment.data ); const screenshotPath = attachment.screenshotData ? await window.Signal.Migrations.writeNewDraftData( attachment.screenshotData ) : undefined; let dimensions: { width?: number; height?: number } = {}; if (isImageAttachment(attachment)) { const url = window.Signal.Migrations.getAbsoluteDraftPath(path); try { dimensions = await getImageDimensions({ objectUrl: url, logger, }); } catch (error) { logger.error( 'writeDraftAttachment: failed to capture image dimensions', Errors.toLogFormat(error) ); } } return { ...omit(attachment, ['data', 'screenshotData']), path, screenshotPath, pending: false, ...dimensions, }; }