handle replies
This commit is contained in:
parent
69d9c563ec
commit
53a740bcc3
|
@ -1,19 +1,19 @@
|
|||
// todo: replies; normalize messages (e.g. replies) prior returning
|
||||
// todo?: already received (by messageId or event)
|
||||
// todo: ignore not found
|
||||
// todo: handle updates together with fetching history (chat messages)
|
||||
// todo: handle diff waku messages on diff topics
|
||||
// todo: tests
|
||||
|
||||
// todo?: use clock for sorting
|
||||
|
||||
// todo: handle diff waku messages on diff topics
|
||||
|
||||
// todo: handle disconnections; no messages after sleep; libp2p;
|
||||
// todo: identities/members?
|
||||
// todo: validate sig
|
||||
// todo: observer contact updates
|
||||
// todo: observer channels
|
||||
// todo?: observe channels
|
||||
// todo?: rename channels to chats
|
||||
// todo: change relative import paths
|
||||
// todo?: multiple communityCallback
|
||||
// todo?: call onChannel* separately
|
||||
// todo?: ignore messages of not yet approved users
|
||||
// todo?: ignore messages with invalid signature
|
||||
|
||||
import { Waku } from 'js-waku'
|
||||
|
||||
|
@ -45,6 +45,7 @@ class Client {
|
|||
default: false,
|
||||
peers: [
|
||||
'/dns4/node-01.gc-us-central1-a.wakuv2.test.statusim.net/tcp/443/wss/p2p/16Uiu2HAmJb2e28qLXxT5kZxVUUoJt72EMzNGXB47Rxx5hw3q4YjS',
|
||||
// '/dns4/node-01.do-ams3.wakuv2.test.statusim.net/tcp/8000/wss/p2p/16Uiu2HAmPLe7Mzm8TsYUubgCAW1aJoeFScxrLj8ppHFivPo97bUZ',
|
||||
],
|
||||
},
|
||||
})
|
||||
|
|
|
@ -21,6 +21,7 @@ export type MessageType = ChatMessage & {
|
|||
pinned: boolean
|
||||
reactions: Reactions
|
||||
channelId: string
|
||||
responseToMessage?: Omit<MessageType, 'responseToMessage'>
|
||||
}
|
||||
|
||||
export class Community {
|
||||
|
|
|
@ -69,17 +69,13 @@ export function handleChannelChatMessage(
|
|||
|
||||
const messageId = payloadToId(
|
||||
decodedProtocol.publicMessage,
|
||||
// fixme!: replace for recoverPublicKeyFromMetadata
|
||||
wakuMessage.signaturePublicKey
|
||||
)
|
||||
const channelId = getChannelId(decodedPayload.chatId)
|
||||
|
||||
const _messages = messages[channelId] || []
|
||||
|
||||
// already received
|
||||
if (_messages.find(message => message.messageId === messageId)) {
|
||||
break
|
||||
}
|
||||
|
||||
const message = mapChatMessage(decodedPayload, { messageId, channelId })
|
||||
|
||||
// findIndexLeft
|
||||
|
@ -87,9 +83,16 @@ export function handleChannelChatMessage(
|
|||
// new Date(Number(timestamp)) > new Date(Number(message.timestamp))
|
||||
// })
|
||||
// findIndexRight
|
||||
let index = _messages.length
|
||||
while (index >= 0) {
|
||||
const _message = _messages[index - 1]
|
||||
let messageIndex = _messages.length
|
||||
while (messageIndex > 0) {
|
||||
const _message = _messages[messageIndex - 1]
|
||||
|
||||
// // already received
|
||||
// if (_message.messageId === messageId) {
|
||||
// messageIndex = -1
|
||||
|
||||
// break
|
||||
// }
|
||||
|
||||
if (
|
||||
new Date(Number(_message.timestamp)) <=
|
||||
|
@ -98,10 +101,29 @@ export function handleChannelChatMessage(
|
|||
break
|
||||
}
|
||||
|
||||
index--
|
||||
messageIndex--
|
||||
}
|
||||
|
||||
_messages.splice(index, 0, message)
|
||||
// // already received
|
||||
// if (messageIndex < 0) {
|
||||
// break
|
||||
// }
|
||||
|
||||
// replied
|
||||
let responsedToMessageIndex = _messages.length
|
||||
while (--responsedToMessageIndex >= 0) {
|
||||
const _message = _messages[responsedToMessageIndex]
|
||||
|
||||
if (_message.messageId === message.responseTo) {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if (responsedToMessageIndex >= 0) {
|
||||
message.responseToMessage = _messages[responsedToMessageIndex]
|
||||
}
|
||||
|
||||
_messages.splice(messageIndex, 0, message)
|
||||
|
||||
result = _messages
|
||||
|
||||
|
|
Loading…
Reference in New Issue