diff --git a/src/Tests/Common.ts b/src/Tests/Common.ts index cca3dcb..a8d47b6 100644 --- a/src/Tests/Common.ts +++ b/src/Tests/Common.ts @@ -36,8 +36,8 @@ export const WAConnectionTest = (name: string, func: (conn: WAConnection) => voi ) export const assertChatDBIntegrity = (conn: WAConnection) => { conn.chats.all ().forEach (chat => ( - assert.equal ( - chat.messages.sort ((m1, m2) => toNumber(m1.messageTimestamp)-toNumber(m2.messageTimestamp)), + assert.deepEqual ( + [...chat.messages].sort ((m1, m2) => toNumber(m1.messageTimestamp)-toNumber(m2.messageTimestamp)), chat.messages ) )) diff --git a/src/Tests/Tests.Messages.ts b/src/Tests/Tests.Messages.ts index a860443..860cf5f 100644 --- a/src/Tests/Tests.Messages.ts +++ b/src/Tests/Tests.Messages.ts @@ -28,14 +28,15 @@ WAConnectionTest('Messages', conn => { assert.ok (received.description) }) it('should quote a message', async () => { - const {messages} = await conn.loadMessages(testJid, 2) - const message = await sendAndRetreiveMessage(conn, 'hello fren 2', MessageType.extendedText, { - quoted: messages[0], - }) - assert.strictEqual(message.message.extendedTextMessage.contextInfo.stanzaId, messages[0].key.id) + const quoted = (await conn.loadMessages(testJid, 2)).messages[0] + const message = await sendAndRetreiveMessage(conn, 'hello fren 2', MessageType.extendedText, { quoted }) + assert.strictEqual( + message.message.extendedTextMessage.contextInfo.stanzaId, + quoted.key.id + ) assert.strictEqual( message.message.extendedTextMessage.contextInfo.participant, - messages[0].key.fromMe ? conn.user.jid : messages[0].key.id + quoted.key.fromMe ? conn.user.jid : quoted.key.id ) }) it('should send a gif', async () => { @@ -65,12 +66,12 @@ WAConnectionTest('Messages', conn => { //const message2 = await sendAndRetreiveMessage (conn, 'this is a quote', MessageType.extendedText) }) it('should send an image & quote', async () => { - const {messages} = await conn.loadMessages(testJid, 1) + const quoted = (await conn.loadMessages(testJid, 2)).messages[0] const content = await fs.readFile('./Media/meme.jpeg') - const message = await sendAndRetreiveMessage(conn, content, MessageType.image, { quoted: messages[0] }) + const message = await sendAndRetreiveMessage(conn, content, MessageType.image, { quoted }) await conn.downloadMediaMessage(message) // check for successful decoding - assert.strictEqual(message.message.imageMessage.contextInfo.stanzaId, messages[0].key.id) + assert.strictEqual(message.message.imageMessage.contextInfo.stanzaId, quoted.key.id) }) it('should send a message & delete it', async () => { const message = await sendAndRetreiveMessage(conn, 'hello fren', MessageType.text) diff --git a/src/WAConnection/4.Events.ts b/src/WAConnection/4.Events.ts index 91f5929..9c7b914 100644 --- a/src/WAConnection/4.Events.ts +++ b/src/WAConnection/4.Events.ts @@ -214,15 +214,17 @@ export class WAConnection extends Base { } else { const messages = chat.messages const messageTimestamp = toNumber (message.messageTimestamp) - const idx = messages.findIndex(m => toNumber(m.messageTimestamp) >= messageTimestamp) + let idx = messages.length-1 + for (idx; idx >= 0; idx--) { + if (toNumber(messages[idx].messageTimestamp) <= messageTimestamp) { + break + } + } // if the message is already there if (messages[idx]?.key.id === message.key.id) return //this.log (`adding message ID: ${messageTimestamp} to ${JSON.stringify(messages.map(m => toNumber(messageTimestamp)))}`, MessageLogLevel.info) - - if (idx < 0) messages.push(message) // add to end - else if (toNumber(messages[idx].messageTimestamp) === toNumber(message.messageTimestamp)) messages.splice (idx+1, 0, message) // insert - else messages.splice (idx, 0, message) // insert + messages.splice (idx+1, 0, message) // insert messages.splice(0, messages.length-this.maxCachedMessages) // only update if it's an actual message