Load attachment data before sending message
This commit is contained in:
parent
1c8123ff1a
commit
9a540d6d18
2 changed files with 36 additions and 1 deletions
|
@ -657,10 +657,13 @@
|
||||||
profileKey = storage.get('profileKey');
|
profileKey = storage.get('profileKey');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const loadData = Attachment.loadData(migrationContext.readAttachmentData);
|
||||||
|
const attachmentsWithData =
|
||||||
|
await Promise.all(messageWithSchema.attachments.map(loadData));
|
||||||
message.send(sendFunction(
|
message.send(sendFunction(
|
||||||
this.get('id'),
|
this.get('id'),
|
||||||
body,
|
body,
|
||||||
messageWithSchema.attachments,
|
attachmentsWithData,
|
||||||
now,
|
now,
|
||||||
this.get('expireTimer'),
|
this.get('expireTimer'),
|
||||||
profileKey
|
profileKey
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
const isFunction = require('lodash/isFunction');
|
||||||
const isString = require('lodash/isString');
|
const isString = require('lodash/isString');
|
||||||
|
|
||||||
const MIME = require('./mime');
|
const MIME = require('./mime');
|
||||||
|
@ -110,3 +111,34 @@ exports.removeSchemaVersion = (attachment) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.migrateDataToFileSystem = migrateDataToFileSystem;
|
exports.migrateDataToFileSystem = migrateDataToFileSystem;
|
||||||
|
|
||||||
|
// hasData :: Attachment -> Boolean
|
||||||
|
exports.hasData = attachment =>
|
||||||
|
attachment.data instanceof ArrayBuffer || ArrayBuffer.isView(attachment.data);
|
||||||
|
|
||||||
|
// loadData :: (RelativePath -> IO (Promise ArrayBuffer))
|
||||||
|
// Attachment ->
|
||||||
|
// IO (Promise Attachment)
|
||||||
|
exports.loadData = (readAttachmentData) => {
|
||||||
|
if (!isFunction(readAttachmentData)) {
|
||||||
|
throw new TypeError('`readAttachmentData` must be a function');
|
||||||
|
}
|
||||||
|
|
||||||
|
return async (attachment) => {
|
||||||
|
if (!exports.isValid(attachment)) {
|
||||||
|
throw new TypeError('`attachment` is not valid');
|
||||||
|
}
|
||||||
|
|
||||||
|
const isAlreadyLoaded = exports.hasData(attachment);
|
||||||
|
if (isAlreadyLoaded) {
|
||||||
|
return attachment;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isString(attachment.path)) {
|
||||||
|
throw new TypeError('`attachment.path` is required');
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = await readAttachmentData(attachment.path);
|
||||||
|
return Object.assign({}, attachment, { data });
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in a new issue