diff --git a/src/util/Injected/Store.js b/src/util/Injected/Store.js index 13b1e89..7204a17 100644 --- a/src/util/Injected/Store.js +++ b/src/util/Injected/Store.js @@ -62,6 +62,8 @@ exports.ExposeStore = () => { window.Store.SendDelete = window.require('WAWebDeleteChatAction'); window.Store.SendMessage = window.require('WAWebSendMsgChatAction'); window.Store.EditMessage = window.require('WAWebSendMessageEditAction'); + window.Store.MediaDataUtils = window.require('WAWebMediaDataUtils'); + window.Store.BlobCache = window.require('WAWebMediaInMemoryBlobCache'); window.Store.SendSeen = window.require('WAWebUpdateUnreadChatAction'); window.Store.User = window.require('WAWebUserPrefsMeUser'); window.Store.ContactMethods = window.require('WAWebContactGetters'); diff --git a/src/util/Injected/Utils.js b/src/util/Injected/Utils.js index 4182808..296d951 100644 --- a/src/util/Injected/Utils.js +++ b/src/util/Injected/Utils.js @@ -430,6 +430,10 @@ exports.LoadUtils = () => { isNewsletter: sendToChannel, }); + if (!mediaData.filehash) { + throw new Error('media-fault: sendToChat filehash undefined'); + } + if (forceVoice && mediaData.type === 'ptt') { const waveform = mediaObject.contentInfo.waveform; mediaData.waveform = @@ -445,7 +449,15 @@ exports.LoadUtils = () => { mediaData.renderableUrl = mediaData.mediaBlob.url(); mediaObject.consolidate(mediaData.toJSON()); + mediaData.mediaBlob.autorelease(); + const shouldUseMediaCache = window.Store.MediaDataUtils.shouldUseMediaCache( + window.Store.MediaTypes.castToV4(mediaObject.type) + ); + if (shouldUseMediaCache && mediaData.mediaBlob instanceof window.Store.OpaqueData) { + const formData = mediaData.mediaBlob.formData(); + window.Store.BlobCache.InMemoryMediaBlobCache.put(mediaObject.filehash, formData); + } const dataToUpload = { mimetype: mediaData.mimetype,