diff options
| author | eugenijm <eugenijm@protonmail.com> | 2020-10-29 13:33:06 +0300 |
|---|---|---|
| committer | eugenijm <eugenijm@protonmail.com> | 2020-11-01 23:36:58 +0300 |
| commit | e798e9a4177f025dda2b40d109fa40c2ebfd814e (patch) | |
| tree | e9916a0cf615fbff6cc5296494476cea89ac7996 /src/modules/api.js | |
| parent | 148789767a28a988751af9635cd53fe6d85a4c75 (diff) | |
Optimistic message sending for chat
Diffstat (limited to 'src/modules/api.js')
| -rw-r--r-- | src/modules/api.js | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/modules/api.js b/src/modules/api.js index 0a354c3f..08485a30 100644 --- a/src/modules/api.js +++ b/src/modules/api.js @@ -75,12 +75,18 @@ const api = { } else if (message.event === 'delete') { dispatch('deleteStatusById', message.id) } else if (message.event === 'pleroma:chat_update') { - dispatch('addChatMessages', { - chatId: message.chatUpdate.id, - messages: [message.chatUpdate.lastMessage] - }) - dispatch('updateChat', { chat: message.chatUpdate }) - maybeShowChatNotification(store, message.chatUpdate) + // The setTimeout wrapper is a temporary band-aid to avoid duplicates for the user's own messages when doing optimistic sending. + // The cause of the duplicates is the WS event arriving earlier than the HTTP response. + // This setTimeout wrapper can be removed once the commit `8e41baff` is in the stable Pleroma release. + // (`8e41baff` adds the idempotency key to the chat message entity, which PleromaFE uses when it's available, and it makes this artificial delay unnecessary). + setTimeout(() => { + dispatch('addChatMessages', { + chatId: message.chatUpdate.id, + messages: [message.chatUpdate.lastMessage] + }) + dispatch('updateChat', { chat: message.chatUpdate }) + maybeShowChatNotification(store, message.chatUpdate) + }, 100) } } ) |
