From dcb06be944c2b0480418cb9386b987c114fc1a62 Mon Sep 17 00:00:00 2001 From: Adhiraj Date: Fri, 21 Aug 2020 20:36:44 +0530 Subject: [PATCH] got rid of redundancies --- src/Tests/Tests.Messages.ts | 12 ++++++------ src/WAConnection/0.Base.ts | 3 ++- src/WAConnection/3.Connect.ts | 4 ++++ src/WAConnection/4.Events.ts | 4 ++-- src/WAConnection/6.MessagesSend.ts | 20 +++++++++++++++----- src/WAConnection/7.MessagesExtra.ts | 4 ++-- src/WAConnection/Constants.ts | 8 +------- 7 files changed, 32 insertions(+), 23 deletions(-) diff --git a/src/Tests/Tests.Messages.ts b/src/Tests/Tests.Messages.ts index cc15420..7641f72 100644 --- a/src/Tests/Tests.Messages.ts +++ b/src/Tests/Tests.Messages.ts @@ -1,4 +1,4 @@ -import { MessageType, Mimetype, delay, promiseTimeout, WAMessage, WA_MESSAGE_STATUS_TYPE } from '../WAConnection/WAConnection' +import { MessageType, Mimetype, delay, promiseTimeout, WAMessage, WA_MESSAGE_STATUS_TYPE, MessageStatusUpdate } from '../WAConnection/WAConnection' import {promises as fs} from 'fs' import * as assert from 'assert' import { WAConnectionTest, testJid, sendAndRetreiveMessage } from './Common' @@ -70,14 +70,14 @@ WAConnectionTest('Message Events', (conn) => { it('should deliver a message', async () => { const waitForUpdate = promiseTimeout(15000, resolve => { - conn.on('message-update', message => { - if (message.key.id === response.key.id) { - resolve(message) + conn.on('message-update', update => { + if (update.ids.includes(response.key.id)) { + resolve(update) } }) - }) as Promise + }) as Promise const response = await conn.sendMessage(testJid, 'My Name Jeff', MessageType.text) const m = await waitForUpdate - assert.ok (m.status >= WA_MESSAGE_STATUS_TYPE.DELIVERY_ACK) + assert.ok (m.type >= WA_MESSAGE_STATUS_TYPE.DELIVERY_ACK) }) }) diff --git a/src/WAConnection/0.Base.ts b/src/WAConnection/0.Base.ts index a33adc0..9cfca7f 100644 --- a/src/WAConnection/0.Base.ts +++ b/src/WAConnection/0.Base.ts @@ -254,7 +254,7 @@ export class WAConnection extends EventEmitter { this.msgCount += 1 // increment message count, it makes the 'epoch' field when sending binary messages return this.conn.send(m) } - protected async waitForConnection (waitForOpen: boolean) { + protected async waitForConnection (waitForOpen: boolean=true) { if (!waitForOpen || this.state === 'open') return const timeout = this.pendingRequestTimeoutMs @@ -298,6 +298,7 @@ export class WAConnection extends EventEmitter { Object.keys(this.callbacks).forEach(key => { if (!key.includes('function:')) { + this.log (`cancelling message wait: ${key}`, MessageLogLevel.info) this.callbacks[key].errCallback(new Error('closed')) delete this.callbacks[key] } diff --git a/src/WAConnection/3.Connect.ts b/src/WAConnection/3.Connect.ts index 9b9af95..13ec76a 100644 --- a/src/WAConnection/3.Connect.ts +++ b/src/WAConnection/3.Connect.ts @@ -129,6 +129,10 @@ export class WAConnection extends Base { chat.t = +chat.t chat.count = +chat.count chat.messages = [] + + const oldChat = this.chats.get(chat.jid) + oldChat && this.chats.delete (oldChat) + this.chats.insert (chat) // chats data (log json to see what it looks like) }) diff --git a/src/WAConnection/4.Events.ts b/src/WAConnection/4.Events.ts index c3f01f8..fa10465 100644 --- a/src/WAConnection/4.Events.ts +++ b/src/WAConnection/4.Events.ts @@ -129,7 +129,7 @@ export class WAConnection extends Base { if (!chat) return this.emit ('message-update', update) - this.chatUpdatedMessage (update.ids, update.type, chat) + this.chatUpdatedMessage (update.ids, update.type as number, chat) } this.registerCallback('Msg', func) this.registerCallback('MsgInfo', func) @@ -194,7 +194,7 @@ export class WAConnection extends Base { to: message.key.remoteJid, ids: [message.key.id], timestamp: new Date(), - type: -1 + type: 'delete' } this.emit ('message-update', update) } diff --git a/src/WAConnection/6.MessagesSend.ts b/src/WAConnection/6.MessagesSend.ts index 7e972f2..20acc79 100644 --- a/src/WAConnection/6.MessagesSend.ts +++ b/src/WAConnection/6.MessagesSend.ts @@ -39,6 +39,16 @@ export class WAConnection extends Base { type: MessageType, options: MessageOptions = {}, ) { + const content = await this.prepareMessageContent ( + message, + type, + options + ) + const preparedMessage = this.prepareMessageFromContent(id, content, options) + return preparedMessage + } + /** Prepares the message content */ + async prepareMessageContent (message: string | WATextMessage | WALocationMessage | WAContactMessage | Buffer, type: MessageType, options: MessageOptions) { let m: WAMessageContent = {} switch (type) { case MessageType.text: @@ -59,13 +69,13 @@ export class WAConnection extends Base { m.contactMessage = message as WAContactMessage break default: - m = await this.prepareMediaMessage(message as Buffer, type, options) + m = await this.prepareMessageMedia(message as Buffer, type, options) break } - return this.generateWAMessage(id, m, options) + return m } /** Prepare a media message for sending */ - async prepareMediaMessage(buffer: Buffer, mediaType: MessageType, options: MessageOptions = {}) { + async prepareMessageMedia(buffer: Buffer, mediaType: MessageType, options: MessageOptions = {}) { if (mediaType === MessageType.document && !options.mimetype) { throw new Error('mimetype required to send a document') } @@ -126,8 +136,8 @@ export class WAConnection extends Base { } return message as WAMessageContent } - /** generates a WAMessage from the given content & options */ - generateWAMessage(id: string, message: WAMessageContent, options: MessageOptions) { + /** prepares a WAMessage for sending from the given content & options */ + prepareMessageFromContent(id: string, message: WAMessageContent, options: MessageOptions) { if (!options.timestamp) options.timestamp = new Date() // set timestamp to now // prevent an annoying bug (WA doesn't accept sending messages with '@c.us') diff --git a/src/WAConnection/7.MessagesExtra.ts b/src/WAConnection/7.MessagesExtra.ts index b07283d..a63e827 100644 --- a/src/WAConnection/7.MessagesExtra.ts +++ b/src/WAConnection/7.MessagesExtra.ts @@ -227,7 +227,7 @@ export class WAConnection extends Base { type: WAMessageProto.ProtocolMessage.PROTOCOL_MESSAGE_TYPE.REVOKE } } - const waMessage = this.generateWAMessage (id, json, {}) + const waMessage = this.prepareMessageFromContent (id, json, {}) await this.relayWAMessage (waMessage) return waMessage } @@ -254,7 +254,7 @@ export class WAConnection extends Base { if (score > 0) content[key].contextInfo = { forwardingScore: score, isForwarded: true } else content[key].contextInfo = {} - const waMessage = this.generateWAMessage (id, content, {}) + const waMessage = this.prepareMessageFromContent (id, content, {}) await this.relayWAMessage (waMessage) return waMessage } diff --git a/src/WAConnection/Constants.ts b/src/WAConnection/Constants.ts index 4a4b6f1..b40fd2c 100644 --- a/src/WAConnection/Constants.ts +++ b/src/WAConnection/Constants.ts @@ -189,12 +189,6 @@ export enum Presence { recording = 'recording', // "recording..." paused = 'paused', // I have no clue } -/** Status of a message sent or received */ -export enum MessageStatus { - sent = 'sent', - received = 'received', - read = 'read', -} /** Set of message types that are supported by the library */ export enum MessageType { text = 'conversation', @@ -274,7 +268,7 @@ export interface MessageStatusUpdate { /** Message IDs read/delivered */ ids: string[] /** Status of the Message IDs */ - type: WA_MESSAGE_STATUS_TYPE + type: WA_MESSAGE_STATUS_TYPE | 'delete' } export enum GroupSettingChange { messageSend = 'announcement',