From acc551a3f11eb80e56d0ba6867e40569a81ad426 Mon Sep 17 00:00:00 2001 From: Adhiraj Singh Date: Sun, 22 Aug 2021 14:30:48 +0530 Subject: [PATCH] add media cache option --- src/Types/Message.ts | 2 ++ src/Utils/messages.ts | 11 ++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Types/Message.ts b/src/Types/Message.ts index d45bada..7deb27e 100644 --- a/src/Types/Message.ts +++ b/src/Types/Message.ts @@ -135,6 +135,8 @@ export type WAMediaUploadFunction = (readStream: ReadStream, opts: { fileEncSha2 export type MediaGenerationOptions = { logger?: Logger upload: WAMediaUploadFunction + /** cache media so it does not have to be uploaded again */ + mediaCache?: (url: string) => Promise | WAGenericMediaMessage } export type MessageContentGenerationOptions = MediaGenerationOptions & { getUrlInfo?: (text: string) => Promise diff --git a/src/Utils/messages.ts b/src/Utils/messages.ts index c084b1e..02cb2d7 100644 --- a/src/Utils/messages.ts +++ b/src/Utils/messages.ts @@ -63,6 +63,15 @@ export const prepareWAMessageMedia = async( [mediaType]: undefined, media: message[mediaType] } + // check for cache hit + if(typeof uploadData.media === 'object' && 'url' in uploadData.media) { + const result = !!options.mediaCache && await options.mediaCache!(uploadData.media.url?.toString()) + if(result) { + return WAMessageProto.Message.fromObject({ + [`${mediaType}Message`]: result + }) + } + } if(mediaType === 'document' && !uploadData.fileName) { uploadData.fileName = 'file' } @@ -71,7 +80,7 @@ export const prepareWAMessageMedia = async( } const requiresDurationComputation = mediaType === 'audio' && typeof uploadData.seconds === 'undefined' const requiresThumbnailComputation = (mediaType === 'image' || mediaType === 'video') && - !('jpegThumbnail' in uploadData) + (typeof uploadData['jpegThumbnail'] === 'undefined') const requiresOriginalForSomeProcessing = requiresDurationComputation || requiresThumbnailComputation const { mediaKey,