From bd553f75d35a882b4d4144e94687b8d32baf52ba Mon Sep 17 00:00:00 2001 From: Rajeh Taher Date: Tue, 9 Aug 2022 18:29:59 +0300 Subject: [PATCH] feat: Adding file size by bytes to MessageMedia (#1273) * Update index.d.ts * Update Message.js * Update Message.js * Update MessageMedia.js * Update MessageMedia.js --- index.d.ts | 5 ++++- src/structures/Message.js | 5 +++-- src/structures/MessageMedia.js | 18 +++++++++++++----- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/index.d.ts b/index.d.ts index d4289d7..eabafb7 100644 --- a/index.d.ts +++ b/index.d.ts @@ -809,13 +809,16 @@ declare namespace WAWebJS { data: string /** Document file name. Value can be null */ filename?: string | null + /** Document file size in bytes. Value can be null. */ + filesize?: number | null /** * @param {string} mimetype MIME type of the attachment * @param {string} data Base64-encoded data of the file * @param {?string} filename Document file name. Value can be null + * @param {?number} filesize Document file size in bytes. Value can be null. */ - constructor(mimetype: string, data: string, filename?: string | null) + constructor(mimetype: string, data: string, filename?: string | null, filesize?: number | null) /** Creates a MessageMedia instance from a local file path */ static fromFilePath: (filePath: string) => MessageMedia diff --git a/src/structures/Message.js b/src/structures/Message.js index f66af99..899241b 100644 --- a/src/structures/Message.js +++ b/src/structures/Message.js @@ -413,7 +413,8 @@ class Message extends Base { return { data, mimetype: msg.mimetype, - filename: msg.filename + filename: msg.filename, + filesize: msg.size }; } catch (e) { if(e.status && e.status === 404) return undefined; @@ -422,7 +423,7 @@ class Message extends Base { }, this.id._serialized); if (!result) return undefined; - return new MessageMedia(result.mimetype, result.data, result.filename); + return new MessageMedia(result.mimetype, result.data, result.filename, result.filesize); } /** diff --git a/src/structures/MessageMedia.js b/src/structures/MessageMedia.js index 450f78b..9be15be 100644 --- a/src/structures/MessageMedia.js +++ b/src/structures/MessageMedia.js @@ -10,10 +10,11 @@ const { URL } = require('url'); * Media attached to a message * @param {string} mimetype MIME type of the attachment * @param {string} data Base64-encoded data of the file - * @param {?string} filename Document file name + * @param {?string} filename Document file name. Value can be null + * @param {?number} filesize Document file size in bytes. Value can be null */ class MessageMedia { - constructor(mimetype, data, filename) { + constructor(mimetype, data, filename, filesize) { /** * MIME type of the attachment * @type {string} @@ -27,10 +28,16 @@ class MessageMedia { this.data = data; /** - * Name of the file (for documents) + * Document file name. Value can be null * @type {?string} */ this.filename = filename; + + /** + * Document file size in bytes. Value can be null + * @type {?number} + */ + this.filesize = filesize; } /** @@ -68,6 +75,7 @@ class MessageMedia { const reqOptions = Object.assign({ headers: { accept: 'image/* video/* text/* audio/*' } }, options); const response = await fetch(url, reqOptions); const mime = response.headers.get('Content-Type'); + const size = response.headers.get('Content-Length'); const contentDisposition = response.headers.get('Content-Disposition'); const name = contentDisposition ? contentDisposition.match(/((?<=filename=")(.*)(?="))/) : null; @@ -83,7 +91,7 @@ class MessageMedia { data = btoa(data); } - return { data, mime, name }; + return { data, mime, name, size }; } const res = options.client @@ -96,7 +104,7 @@ class MessageMedia { if (!mimetype) mimetype = res.mime; - return new MessageMedia(mimetype, res.data, filename); + return new MessageMedia(mimetype, res.data, filename, res.size || null); } }