55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
// 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<AttachmentDraftType> {
|
|
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,
|
|
};
|
|
}
|