got rid of redundancies

This commit is contained in:
Adhiraj
2020-08-21 20:36:44 +05:30
parent 47021c34bf
commit dcb06be944
7 changed files with 32 additions and 23 deletions

View File

@@ -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<WAMessage>
}) as Promise<MessageStatusUpdate>
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)
})
})

View File

@@ -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]
}

View File

@@ -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)
})

View File

@@ -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)
}

View File

@@ -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')

View File

@@ -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
}

View File

@@ -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',