@ethora/chat-component-rn 26.8.5 → 26.8.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/README.md +95 -0
- package/lib/commonjs/assets/emojiData.js +40 -0
- package/lib/commonjs/assets/emojiData.js.map +1 -0
- package/lib/commonjs/assets/icons.js +5 -3
- package/lib/commonjs/assets/icons.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatHeader.js +35 -15
- package/lib/commonjs/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatRoom.js +33 -24
- package/lib/commonjs/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ChatWrapper.js +22 -16
- package/lib/commonjs/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/EncryptedSendNotice.js +47 -0
- package/lib/commonjs/components/MainComponents/EncryptedSendNotice.js.map +1 -0
- package/lib/commonjs/components/MainComponents/EncryptionCard.js +286 -0
- package/lib/commonjs/components/MainComponents/EncryptionCard.js.map +1 -0
- package/lib/commonjs/components/MainComponents/MediaMessage.js +7 -0
- package/lib/commonjs/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MessageContainer.js +4 -12
- package/lib/commonjs/components/MainComponents/MessageContainer.js.map +1 -1
- package/lib/commonjs/components/MainComponents/MessageList.js +110 -35
- package/lib/commonjs/components/MainComponents/MessageList.js.map +1 -1
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js +5 -0
- package/lib/commonjs/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/commonjs/components/MainComponents/RoomList.js +32 -29
- package/lib/commonjs/components/MainComponents/RoomList.js.map +1 -1
- package/lib/commonjs/components/MainComponents/RoomStack.js +133 -65
- package/lib/commonjs/components/MainComponents/RoomStack.js.map +1 -1
- package/lib/commonjs/components/MainComponents/SealedAttachment.js +231 -0
- package/lib/commonjs/components/MainComponents/SealedAttachment.js.map +1 -0
- package/lib/commonjs/components/MainComponents/SystemMessage.js +6 -2
- package/lib/commonjs/components/MainComponents/SystemMessage.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/Avatar.js +5 -1
- package/lib/commonjs/components/MessageBubble/Avatar.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/BottomReplyContainer.js +18 -21
- package/lib/commonjs/components/MessageBubble/BottomReplyContainer.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/EmojiPickerSheet.js +447 -0
- package/lib/commonjs/components/MessageBubble/EmojiPickerSheet.js.map +1 -0
- package/lib/commonjs/components/MessageBubble/Message.js +264 -136
- package/lib/commonjs/components/MessageBubble/Message.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js +215 -13
- package/lib/commonjs/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageReaction.js +113 -94
- package/lib/commonjs/components/MessageBubble/MessageReaction.js.map +1 -1
- package/lib/commonjs/components/MessageBubble/MessageReply.js +66 -24
- package/lib/commonjs/components/MessageBubble/MessageReply.js.map +1 -1
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js +7 -4
- package/lib/commonjs/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js +159 -16
- package/lib/commonjs/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js +4 -0
- package/lib/commonjs/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
- package/lib/commonjs/components/Modals/Modal/SwipeBackLayer.js +76 -44
- package/lib/commonjs/components/Modals/Modal/SwipeBackLayer.js.map +1 -1
- package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js +29 -6
- package/lib/commonjs/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
- package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js +5 -1
- package/lib/commonjs/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/ChatRoomItem.js +37 -13
- package/lib/commonjs/components/RoomComponents/ChatRoomItem.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/LastMessageItem.js +6 -0
- package/lib/commonjs/components/RoomComponents/LastMessageItem.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js +2 -2
- package/lib/commonjs/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessageEmoji.js +8 -9
- package/lib/commonjs/components/RoomComponents/styled/LastMessageEmoji.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js +4 -6
- package/lib/commonjs/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js +2 -2
- package/lib/commonjs/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
- package/lib/commonjs/components/RoomComponents/styled/LastMessageSealed.js +41 -0
- package/lib/commonjs/components/RoomComponents/styled/LastMessageSealed.js.map +1 -0
- package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js +2 -2
- package/lib/commonjs/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
- package/lib/commonjs/components/Thread/ThreadWrapper.js +273 -152
- package/lib/commonjs/components/Thread/ThreadWrapper.js.map +1 -1
- package/lib/commonjs/components/UsersList/UsersList.js +2 -1
- package/lib/commonjs/components/UsersList/UsersList.js.map +1 -1
- package/lib/commonjs/components/styled/DateLabel.js +6 -3
- package/lib/commonjs/components/styled/DateLabel.js.map +1 -1
- package/lib/commonjs/components/styled/SendInput.js +4 -2
- package/lib/commonjs/components/styled/SendInput.js.map +1 -1
- package/lib/commonjs/context/MessageNotificationContext.js +188 -9
- package/lib/commonjs/context/MessageNotificationContext.js.map +1 -1
- package/lib/commonjs/context/xmppProvider.js +22 -7
- package/lib/commonjs/context/xmppProvider.js.map +1 -1
- package/lib/commonjs/e2ee/crypto.js +207 -0
- package/lib/commonjs/e2ee/crypto.js.map +1 -0
- package/lib/commonjs/e2ee/deviceStore.js +84 -0
- package/lib/commonjs/e2ee/deviceStore.js.map +1 -0
- package/lib/commonjs/e2ee/fileCipher.js +95 -0
- package/lib/commonjs/e2ee/fileCipher.js.map +1 -0
- package/lib/commonjs/e2ee/fileEnvelope.js +79 -0
- package/lib/commonjs/e2ee/fileEnvelope.js.map +1 -0
- package/lib/commonjs/e2ee/index.js +210 -0
- package/lib/commonjs/e2ee/index.js.map +1 -0
- package/lib/commonjs/e2ee/limits.js +9 -0
- package/lib/commonjs/e2ee/limits.js.map +1 -0
- package/lib/commonjs/e2ee/ns.js +8 -0
- package/lib/commonjs/e2ee/ns.js.map +1 -0
- package/lib/commonjs/e2ee/omemo.js +622 -0
- package/lib/commonjs/e2ee/omemo.js.map +1 -0
- package/lib/commonjs/e2ee/protobuf.js +149 -0
- package/lib/commonjs/e2ee/protobuf.js.map +1 -0
- package/lib/commonjs/e2ee/ratchet.js +238 -0
- package/lib/commonjs/e2ee/ratchet.js.map +1 -0
- package/lib/commonjs/e2ee/sealedBody.js +23 -0
- package/lib/commonjs/e2ee/sealedBody.js.map +1 -0
- package/lib/commonjs/e2ee/sealedFiles.js +174 -0
- package/lib/commonjs/e2ee/sealedFiles.js.map +1 -0
- package/lib/commonjs/e2ee/send.js +54 -0
- package/lib/commonjs/e2ee/send.js.map +1 -0
- package/lib/commonjs/e2ee/stanza.js +114 -0
- package/lib/commonjs/e2ee/stanza.js.map +1 -0
- package/lib/commonjs/e2ee/store.js +43 -0
- package/lib/commonjs/e2ee/store.js.map +1 -0
- package/lib/commonjs/helpers/accountName.js +23 -0
- package/lib/commonjs/helpers/accountName.js.map +1 -0
- package/lib/commonjs/helpers/createMessageFromXml.js +19 -4
- package/lib/commonjs/helpers/createMessageFromXml.js.map +1 -1
- package/lib/commonjs/helpers/createRoomFromApi.js +36 -2
- package/lib/commonjs/helpers/createRoomFromApi.js.map +1 -1
- package/lib/commonjs/helpers/createUserNameFromSetUser.js +2 -1
- package/lib/commonjs/helpers/createUserNameFromSetUser.js.map +1 -1
- package/lib/commonjs/helpers/displayName.js +16 -0
- package/lib/commonjs/helpers/displayName.js.map +1 -0
- package/lib/commonjs/helpers/emoji.js +51 -0
- package/lib/commonjs/helpers/emoji.js.map +1 -0
- package/lib/commonjs/helpers/haptics.js +29 -0
- package/lib/commonjs/helpers/haptics.js.map +1 -0
- package/lib/commonjs/helpers/historyPreloadScheduler.js +32 -66
- package/lib/commonjs/helpers/historyPreloadScheduler.js.map +1 -1
- package/lib/commonjs/helpers/insertMessageWithDelimiter.js +21 -12
- package/lib/commonjs/helpers/insertMessageWithDelimiter.js.map +1 -1
- package/lib/commonjs/helpers/mamReactions.js +57 -0
- package/lib/commonjs/helpers/mamReactions.js.map +1 -0
- package/lib/commonjs/helpers/parseMessageReference.js +42 -0
- package/lib/commonjs/helpers/parseMessageReference.js.map +1 -0
- package/lib/commonjs/helpers/persistCrypto.js +5 -0
- package/lib/commonjs/helpers/persistCrypto.js.map +1 -1
- package/lib/commonjs/helpers/reactionsConfig.js +17 -0
- package/lib/commonjs/helpers/reactionsConfig.js.map +1 -0
- package/lib/commonjs/helpers/secureKeyValue.js +20 -0
- package/lib/commonjs/helpers/secureKeyValue.js.map +1 -1
- package/lib/commonjs/helpers/updateMessagesTillLast.js +17 -2
- package/lib/commonjs/helpers/updateMessagesTillLast.js.map +1 -1
- package/lib/commonjs/helpers/videoCache.js +136 -0
- package/lib/commonjs/helpers/videoCache.js.map +1 -0
- package/lib/commonjs/hooks/useHeapSender.js +3 -1
- package/lib/commonjs/hooks/useHeapSender.js.map +1 -1
- package/lib/commonjs/hooks/useLogout.js +8 -0
- package/lib/commonjs/hooks/useLogout.js.map +1 -1
- package/lib/commonjs/hooks/useMessageHeapState.js +3 -2
- package/lib/commonjs/hooks/useMessageHeapState.js.map +1 -1
- package/lib/commonjs/hooks/useRoomInitialization.js +16 -7
- package/lib/commonjs/hooks/useRoomInitialization.js.map +1 -1
- package/lib/commonjs/hooks/useSendMessage.js +85 -15
- package/lib/commonjs/hooks/useSendMessage.js.map +1 -1
- package/lib/commonjs/hooks/useUnreadMessagesCounter.js +1 -1
- package/lib/commonjs/hooks/useUnreadMessagesCounter.js.map +1 -1
- package/lib/commonjs/i18n/strings.js +180 -0
- package/lib/commonjs/i18n/strings.js.map +1 -1
- package/lib/commonjs/main.js +13 -0
- package/lib/commonjs/main.js.map +1 -1
- package/lib/commonjs/networking/api-requests/auth.api.js +4 -1
- package/lib/commonjs/networking/api-requests/auth.api.js.map +1 -1
- package/lib/commonjs/networking/api-requests/rooms.api.js +111 -17
- package/lib/commonjs/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/commonjs/networking/stanzaHandlers.js +106 -50
- package/lib/commonjs/networking/stanzaHandlers.js.map +1 -1
- package/lib/commonjs/networking/xmpp/getHistory.xmpp.js +29 -74
- package/lib/commonjs/networking/xmpp/getHistory.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js +44 -0
- package/lib/commonjs/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/mamRouter.js +186 -0
- package/lib/commonjs/networking/xmpp/mamRouter.js.map +1 -0
- package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js +41 -4
- package/lib/commonjs/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/sendMediaMessage.xmpp.js +16 -3
- package/lib/commonjs/networking/xmpp/sendMediaMessage.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js +13 -6
- package/lib/commonjs/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js +14 -6
- package/lib/commonjs/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js.map +1 -1
- package/lib/commonjs/networking/xmppClient.js +104 -23
- package/lib/commonjs/networking/xmppClient.js.map +1 -1
- package/lib/commonjs/roomStore/Middleware/newMessageMidlleware.js +29 -34
- package/lib/commonjs/roomStore/Middleware/newMessageMidlleware.js.map +1 -1
- package/lib/commonjs/roomStore/Middleware/perfMiddleware.js +51 -0
- package/lib/commonjs/roomStore/Middleware/perfMiddleware.js.map +1 -0
- package/lib/commonjs/roomStore/Middleware/reactionsMiddleware.js +66 -43
- package/lib/commonjs/roomStore/Middleware/reactionsMiddleware.js.map +1 -1
- package/lib/commonjs/roomStore/Middleware/unreadMidlleware.js +88 -68
- package/lib/commonjs/roomStore/Middleware/unreadMidlleware.js.map +1 -1
- package/lib/commonjs/roomStore/index.js +18 -14
- package/lib/commonjs/roomStore/index.js.map +1 -1
- package/lib/commonjs/roomStore/persistBackend.js +93 -0
- package/lib/commonjs/roomStore/persistBackend.js.map +1 -0
- package/lib/commonjs/roomStore/persistence.js +253 -51
- package/lib/commonjs/roomStore/persistence.js.map +1 -1
- package/lib/commonjs/roomStore/roomsSlice.js +282 -136
- package/lib/commonjs/roomStore/roomsSlice.js.map +1 -1
- package/lib/commonjs/theme/theme.js +3 -0
- package/lib/commonjs/theme/theme.js.map +1 -1
- package/lib/commonjs/utils/devLogger.js +14 -0
- package/lib/commonjs/utils/devLogger.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/module/assets/emojiData.js +36 -0
- package/lib/module/assets/emojiData.js.map +1 -0
- package/lib/module/assets/icons.js +4 -2
- package/lib/module/assets/icons.js.map +1 -1
- package/lib/module/components/MainComponents/ChatHeader.js +37 -17
- package/lib/module/components/MainComponents/ChatHeader.js.map +1 -1
- package/lib/module/components/MainComponents/ChatRoom.js +34 -25
- package/lib/module/components/MainComponents/ChatRoom.js.map +1 -1
- package/lib/module/components/MainComponents/ChatWrapper.js +23 -17
- package/lib/module/components/MainComponents/ChatWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/EncryptedSendNotice.js +42 -0
- package/lib/module/components/MainComponents/EncryptedSendNotice.js.map +1 -0
- package/lib/module/components/MainComponents/EncryptionCard.js +281 -0
- package/lib/module/components/MainComponents/EncryptionCard.js.map +1 -0
- package/lib/module/components/MainComponents/MediaMessage.js +7 -0
- package/lib/module/components/MainComponents/MediaMessage.js.map +1 -1
- package/lib/module/components/MainComponents/MessageContainer.js +7 -14
- package/lib/module/components/MainComponents/MessageContainer.js.map +1 -1
- package/lib/module/components/MainComponents/MessageList.js +110 -35
- package/lib/module/components/MainComponents/MessageList.js.map +1 -1
- package/lib/module/components/MainComponents/ReduxWrapper.js +5 -0
- package/lib/module/components/MainComponents/ReduxWrapper.js.map +1 -1
- package/lib/module/components/MainComponents/RoomList.js +32 -29
- package/lib/module/components/MainComponents/RoomList.js.map +1 -1
- package/lib/module/components/MainComponents/RoomStack.js +131 -63
- package/lib/module/components/MainComponents/RoomStack.js.map +1 -1
- package/lib/module/components/MainComponents/SealedAttachment.js +224 -0
- package/lib/module/components/MainComponents/SealedAttachment.js.map +1 -0
- package/lib/module/components/MainComponents/SystemMessage.js +6 -2
- package/lib/module/components/MainComponents/SystemMessage.js.map +1 -1
- package/lib/module/components/MessageBubble/Avatar.js +5 -1
- package/lib/module/components/MessageBubble/Avatar.js.map +1 -1
- package/lib/module/components/MessageBubble/BottomReplyContainer.js +19 -22
- package/lib/module/components/MessageBubble/BottomReplyContainer.js.map +1 -1
- package/lib/module/components/MessageBubble/EmojiPickerSheet.js +438 -0
- package/lib/module/components/MessageBubble/EmojiPickerSheet.js.map +1 -0
- package/lib/module/components/MessageBubble/Message.js +269 -140
- package/lib/module/components/MessageBubble/Message.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageInteractions.js +217 -15
- package/lib/module/components/MessageBubble/MessageInteractions.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageReaction.js +115 -94
- package/lib/module/components/MessageBubble/MessageReaction.js.map +1 -1
- package/lib/module/components/MessageBubble/MessageReply.js +65 -24
- package/lib/module/components/MessageBubble/MessageReply.js.map +1 -1
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js +7 -4
- package/lib/module/components/Modals/ChatProfileModal/ChatProfileModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js +161 -18
- package/lib/module/components/Modals/FilePreviewModal/FilePreviewModal.js.map +1 -1
- package/lib/module/components/Modals/FilePreviewModal/PdfView.js +4 -0
- package/lib/module/components/Modals/FilePreviewModal/PdfView.js.map +1 -1
- package/lib/module/components/Modals/Modal/SwipeBackLayer.js +76 -44
- package/lib/module/components/Modals/Modal/SwipeBackLayer.js.map +1 -1
- package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js +32 -8
- package/lib/module/components/Modals/UserProfileModal/UserProfileModal.js.map +1 -1
- package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js +4 -0
- package/lib/module/components/Modals/UserSettingsModal/UserSettingsModal.js.map +1 -1
- package/lib/module/components/RoomComponents/ChatRoomItem.js +37 -13
- package/lib/module/components/RoomComponents/ChatRoomItem.js.map +1 -1
- package/lib/module/components/RoomComponents/LastMessageItem.js +6 -0
- package/lib/module/components/RoomComponents/LastMessageItem.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastAudioMessage.js +2 -2
- package/lib/module/components/RoomComponents/styled/LastAudioMessage.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessageEmoji.js +8 -9
- package/lib/module/components/RoomComponents/styled/LastMessageEmoji.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessageFile.js +4 -6
- package/lib/module/components/RoomComponents/styled/LastMessageFile.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js +2 -2
- package/lib/module/components/RoomComponents/styled/LastMessagePhoto.js.map +1 -1
- package/lib/module/components/RoomComponents/styled/LastMessageSealed.js +36 -0
- package/lib/module/components/RoomComponents/styled/LastMessageSealed.js.map +1 -0
- package/lib/module/components/RoomComponents/styled/LastMessageVideo.js +2 -2
- package/lib/module/components/RoomComponents/styled/LastMessageVideo.js.map +1 -1
- package/lib/module/components/Thread/ThreadWrapper.js +273 -153
- package/lib/module/components/Thread/ThreadWrapper.js.map +1 -1
- package/lib/module/components/UsersList/UsersList.js +2 -1
- package/lib/module/components/UsersList/UsersList.js.map +1 -1
- package/lib/module/components/styled/DateLabel.js +6 -3
- package/lib/module/components/styled/DateLabel.js.map +1 -1
- package/lib/module/components/styled/SendInput.js +4 -2
- package/lib/module/components/styled/SendInput.js.map +1 -1
- package/lib/module/context/MessageNotificationContext.js +190 -11
- package/lib/module/context/MessageNotificationContext.js.map +1 -1
- package/lib/module/context/xmppProvider.js +22 -7
- package/lib/module/context/xmppProvider.js.map +1 -1
- package/lib/module/e2ee/crypto.js +170 -0
- package/lib/module/e2ee/crypto.js.map +1 -0
- package/lib/module/e2ee/deviceStore.js +77 -0
- package/lib/module/e2ee/deviceStore.js.map +1 -0
- package/lib/module/e2ee/fileCipher.js +90 -0
- package/lib/module/e2ee/fileCipher.js.map +1 -0
- package/lib/module/e2ee/fileEnvelope.js +66 -0
- package/lib/module/e2ee/fileEnvelope.js.map +1 -0
- package/lib/module/e2ee/index.js +185 -0
- package/lib/module/e2ee/index.js.map +1 -0
- package/lib/module/e2ee/limits.js +5 -0
- package/lib/module/e2ee/limits.js.map +1 -0
- package/lib/module/e2ee/ns.js +4 -0
- package/lib/module/e2ee/ns.js.map +1 -0
- package/lib/module/e2ee/omemo.js +610 -0
- package/lib/module/e2ee/omemo.js.map +1 -0
- package/lib/module/e2ee/protobuf.js +140 -0
- package/lib/module/e2ee/protobuf.js.map +1 -0
- package/lib/module/e2ee/ratchet.js +228 -0
- package/lib/module/e2ee/ratchet.js.map +1 -0
- package/lib/module/e2ee/sealedBody.js +19 -0
- package/lib/module/e2ee/sealedBody.js.map +1 -0
- package/lib/module/e2ee/sealedFiles.js +154 -0
- package/lib/module/e2ee/sealedFiles.js.map +1 -0
- package/lib/module/e2ee/send.js +48 -0
- package/lib/module/e2ee/send.js.map +1 -0
- package/lib/module/e2ee/stanza.js +107 -0
- package/lib/module/e2ee/stanza.js.map +1 -0
- package/lib/module/e2ee/store.js +35 -0
- package/lib/module/e2ee/store.js.map +1 -0
- package/lib/module/helpers/accountName.js +18 -0
- package/lib/module/helpers/accountName.js.map +1 -0
- package/lib/module/helpers/createMessageFromXml.js +19 -4
- package/lib/module/helpers/createMessageFromXml.js.map +1 -1
- package/lib/module/helpers/createRoomFromApi.js +36 -2
- package/lib/module/helpers/createRoomFromApi.js.map +1 -1
- package/lib/module/helpers/createUserNameFromSetUser.js +3 -1
- package/lib/module/helpers/createUserNameFromSetUser.js.map +1 -1
- package/lib/module/helpers/displayName.js +11 -0
- package/lib/module/helpers/displayName.js.map +1 -0
- package/lib/module/helpers/emoji.js +44 -0
- package/lib/module/helpers/emoji.js.map +1 -0
- package/lib/module/helpers/haptics.js +24 -0
- package/lib/module/helpers/haptics.js.map +1 -0
- package/lib/module/helpers/historyPreloadScheduler.js +32 -66
- package/lib/module/helpers/historyPreloadScheduler.js.map +1 -1
- package/lib/module/helpers/insertMessageWithDelimiter.js +21 -12
- package/lib/module/helpers/insertMessageWithDelimiter.js.map +1 -1
- package/lib/module/helpers/mamReactions.js +51 -0
- package/lib/module/helpers/mamReactions.js.map +1 -0
- package/lib/module/helpers/parseMessageReference.js +37 -0
- package/lib/module/helpers/parseMessageReference.js.map +1 -0
- package/lib/module/helpers/persistCrypto.js +4 -0
- package/lib/module/helpers/persistCrypto.js.map +1 -1
- package/lib/module/helpers/reactionsConfig.js +10 -0
- package/lib/module/helpers/reactionsConfig.js.map +1 -0
- package/lib/module/helpers/secureKeyValue.js +19 -0
- package/lib/module/helpers/secureKeyValue.js.map +1 -1
- package/lib/module/helpers/updateMessagesTillLast.js +17 -2
- package/lib/module/helpers/updateMessagesTillLast.js.map +1 -1
- package/lib/module/helpers/videoCache.js +125 -0
- package/lib/module/helpers/videoCache.js.map +1 -0
- package/lib/module/hooks/useHeapSender.js +3 -1
- package/lib/module/hooks/useHeapSender.js.map +1 -1
- package/lib/module/hooks/useLogout.js +8 -0
- package/lib/module/hooks/useLogout.js.map +1 -1
- package/lib/module/hooks/useMessageHeapState.js +3 -2
- package/lib/module/hooks/useMessageHeapState.js.map +1 -1
- package/lib/module/hooks/useRoomInitialization.js +17 -8
- package/lib/module/hooks/useRoomInitialization.js.map +1 -1
- package/lib/module/hooks/useSendMessage.js +85 -15
- package/lib/module/hooks/useSendMessage.js.map +1 -1
- package/lib/module/hooks/useUnreadMessagesCounter.js +1 -1
- package/lib/module/hooks/useUnreadMessagesCounter.js.map +1 -1
- package/lib/module/i18n/strings.js +180 -0
- package/lib/module/i18n/strings.js.map +1 -1
- package/lib/module/main.js +1 -0
- package/lib/module/main.js.map +1 -1
- package/lib/module/networking/api-requests/auth.api.js +4 -1
- package/lib/module/networking/api-requests/auth.api.js.map +1 -1
- package/lib/module/networking/api-requests/rooms.api.js +109 -18
- package/lib/module/networking/api-requests/rooms.api.js.map +1 -1
- package/lib/module/networking/stanzaHandlers.js +107 -51
- package/lib/module/networking/stanzaHandlers.js.map +1 -1
- package/lib/module/networking/xmpp/getHistory.xmpp.js +29 -74
- package/lib/module/networking/xmpp/getHistory.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/handleStanzas.xmpp.js +42 -0
- package/lib/module/networking/xmpp/handleStanzas.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/mamRouter.js +175 -0
- package/lib/module/networking/xmpp/mamRouter.js.map +1 -0
- package/lib/module/networking/xmpp/presenceInRoom.xmpp.js +38 -2
- package/lib/module/networking/xmpp/presenceInRoom.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/sendMediaMessage.xmpp.js +16 -3
- package/lib/module/networking/xmpp/sendMediaMessage.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/sendTextMessage.xmpp.js +13 -6
- package/lib/module/networking/xmpp/sendTextMessage.xmpp.js.map +1 -1
- package/lib/module/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js +14 -6
- package/lib/module/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.js.map +1 -1
- package/lib/module/networking/xmppClient.js +105 -24
- package/lib/module/networking/xmppClient.js.map +1 -1
- package/lib/module/roomStore/Middleware/newMessageMidlleware.js +29 -34
- package/lib/module/roomStore/Middleware/newMessageMidlleware.js.map +1 -1
- package/lib/module/roomStore/Middleware/perfMiddleware.js +45 -0
- package/lib/module/roomStore/Middleware/perfMiddleware.js.map +1 -0
- package/lib/module/roomStore/Middleware/reactionsMiddleware.js +66 -43
- package/lib/module/roomStore/Middleware/reactionsMiddleware.js.map +1 -1
- package/lib/module/roomStore/Middleware/unreadMidlleware.js +89 -69
- package/lib/module/roomStore/Middleware/unreadMidlleware.js.map +1 -1
- package/lib/module/roomStore/index.js +19 -15
- package/lib/module/roomStore/index.js.map +1 -1
- package/lib/module/roomStore/persistBackend.js +86 -0
- package/lib/module/roomStore/persistBackend.js.map +1 -0
- package/lib/module/roomStore/persistence.js +253 -49
- package/lib/module/roomStore/persistence.js.map +1 -1
- package/lib/module/roomStore/roomsSlice.js +275 -134
- package/lib/module/roomStore/roomsSlice.js.map +1 -1
- package/lib/module/theme/theme.js +3 -0
- package/lib/module/theme/theme.js.map +1 -1
- package/lib/module/utils/devLogger.js +13 -0
- package/lib/module/utils/devLogger.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/typescript/assets/emojiData.d.ts +8 -0
- package/lib/typescript/assets/emojiData.d.ts.map +1 -0
- package/lib/typescript/assets/icons.d.ts +8 -0
- package/lib/typescript/assets/icons.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatHeader.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatRoom.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ChatWrapper.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/EncryptedSendNotice.d.ts +4 -0
- package/lib/typescript/components/MainComponents/EncryptedSendNotice.d.ts.map +1 -0
- package/lib/typescript/components/MainComponents/EncryptionCard.d.ts +10 -0
- package/lib/typescript/components/MainComponents/EncryptionCard.d.ts.map +1 -0
- package/lib/typescript/components/MainComponents/MediaMessage.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/MessageContainer.d.ts +2 -2
- package/lib/typescript/components/MainComponents/MessageContainer.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/MessageList.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/ReduxWrapper.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/RoomList.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/RoomStack.d.ts +7 -2
- package/lib/typescript/components/MainComponents/RoomStack.d.ts.map +1 -1
- package/lib/typescript/components/MainComponents/SealedAttachment.d.ts +13 -0
- package/lib/typescript/components/MainComponents/SealedAttachment.d.ts.map +1 -0
- package/lib/typescript/components/MainComponents/SystemMessage.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/Avatar.d.ts +2 -0
- package/lib/typescript/components/MessageBubble/Avatar.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/BottomReplyContainer.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/EmojiPickerSheet.d.ts +11 -0
- package/lib/typescript/components/MessageBubble/EmojiPickerSheet.d.ts.map +1 -0
- package/lib/typescript/components/MessageBubble/Message.d.ts +2 -2
- package/lib/typescript/components/MessageBubble/Message.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts +2 -0
- package/lib/typescript/components/MessageBubble/MessageInteractions.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/MessageReaction.d.ts +1 -0
- package/lib/typescript/components/MessageBubble/MessageReaction.d.ts.map +1 -1
- package/lib/typescript/components/MessageBubble/MessageReply.d.ts +7 -7
- package/lib/typescript/components/MessageBubble/MessageReply.d.ts.map +1 -1
- package/lib/typescript/components/Modals/ChatProfileModal/ChatProfileModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/FilePreviewModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/FilePreviewModal/PdfView.d.ts.map +1 -1
- package/lib/typescript/components/Modals/Modal/SwipeBackLayer.d.ts +2 -1
- package/lib/typescript/components/Modals/Modal/SwipeBackLayer.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserProfileModal/UserProfileModal.d.ts.map +1 -1
- package/lib/typescript/components/Modals/UserSettingsModal/UserSettingsModal.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts +2 -2
- package/lib/typescript/components/RoomComponents/ChatRoomItem.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/LastMessageItem.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastAudioMessage.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastMessageEmoji.d.ts +3 -6
- package/lib/typescript/components/RoomComponents/styled/LastMessageEmoji.d.ts.map +1 -1
- package/lib/typescript/components/RoomComponents/styled/LastMessageSealed.d.ts +7 -0
- package/lib/typescript/components/RoomComponents/styled/LastMessageSealed.d.ts.map +1 -0
- package/lib/typescript/components/Thread/ThreadWrapper.d.ts +7 -1
- package/lib/typescript/components/Thread/ThreadWrapper.d.ts.map +1 -1
- package/lib/typescript/components/UsersList/UsersList.d.ts.map +1 -1
- package/lib/typescript/components/styled/DateLabel.d.ts +1 -0
- package/lib/typescript/components/styled/DateLabel.d.ts.map +1 -1
- package/lib/typescript/components/styled/SendInput.d.ts +1 -0
- package/lib/typescript/components/styled/SendInput.d.ts.map +1 -1
- package/lib/typescript/context/MessageNotificationContext.d.ts.map +1 -1
- package/lib/typescript/context/xmppProvider.d.ts.map +1 -1
- package/lib/typescript/e2ee/crypto.d.ts +28 -0
- package/lib/typescript/e2ee/crypto.d.ts.map +1 -0
- package/lib/typescript/e2ee/deviceStore.d.ts +4 -0
- package/lib/typescript/e2ee/deviceStore.d.ts.map +1 -0
- package/lib/typescript/e2ee/fileCipher.d.ts +7 -0
- package/lib/typescript/e2ee/fileCipher.d.ts.map +1 -0
- package/lib/typescript/e2ee/fileEnvelope.d.ts +27 -0
- package/lib/typescript/e2ee/fileEnvelope.d.ts.map +1 -0
- package/lib/typescript/e2ee/index.d.ts +23 -0
- package/lib/typescript/e2ee/index.d.ts.map +1 -0
- package/lib/typescript/e2ee/limits.d.ts +3 -0
- package/lib/typescript/e2ee/limits.d.ts.map +1 -0
- package/lib/typescript/e2ee/ns.d.ts +2 -0
- package/lib/typescript/e2ee/ns.d.ts.map +1 -0
- package/lib/typescript/e2ee/omemo.d.ts +64 -0
- package/lib/typescript/e2ee/omemo.d.ts.map +1 -0
- package/lib/typescript/e2ee/protobuf.d.ts +25 -0
- package/lib/typescript/e2ee/protobuf.d.ts.map +1 -0
- package/lib/typescript/e2ee/ratchet.d.ts +39 -0
- package/lib/typescript/e2ee/ratchet.d.ts.map +1 -0
- package/lib/typescript/e2ee/sealedBody.d.ts +2 -0
- package/lib/typescript/e2ee/sealedBody.d.ts.map +1 -0
- package/lib/typescript/e2ee/sealedFiles.d.ts +31 -0
- package/lib/typescript/e2ee/sealedFiles.d.ts.map +1 -0
- package/lib/typescript/e2ee/send.d.ts +6 -0
- package/lib/typescript/e2ee/send.d.ts.map +1 -0
- package/lib/typescript/e2ee/stanza.d.ts +8 -0
- package/lib/typescript/e2ee/stanza.d.ts.map +1 -0
- package/lib/typescript/e2ee/store.d.ts +16 -0
- package/lib/typescript/e2ee/store.d.ts.map +1 -0
- package/lib/typescript/helpers/accountName.d.ts +7 -0
- package/lib/typescript/helpers/accountName.d.ts.map +1 -0
- package/lib/typescript/helpers/createMessageFromXml.d.ts.map +1 -1
- package/lib/typescript/helpers/createRoomFromApi.d.ts.map +1 -1
- package/lib/typescript/helpers/createUserNameFromSetUser.d.ts.map +1 -1
- package/lib/typescript/helpers/displayName.d.ts +2 -0
- package/lib/typescript/helpers/displayName.d.ts.map +1 -0
- package/lib/typescript/helpers/emoji.d.ts +6 -0
- package/lib/typescript/helpers/emoji.d.ts.map +1 -0
- package/lib/typescript/helpers/haptics.d.ts +3 -0
- package/lib/typescript/helpers/haptics.d.ts.map +1 -0
- package/lib/typescript/helpers/historyPreloadScheduler.d.ts +1 -0
- package/lib/typescript/helpers/historyPreloadScheduler.d.ts.map +1 -1
- package/lib/typescript/helpers/insertMessageWithDelimiter.d.ts.map +1 -1
- package/lib/typescript/helpers/mamReactions.d.ts +13 -0
- package/lib/typescript/helpers/mamReactions.d.ts.map +1 -0
- package/lib/typescript/helpers/parseMessageReference.d.ts +16 -0
- package/lib/typescript/helpers/parseMessageReference.d.ts.map +1 -0
- package/lib/typescript/helpers/persistCrypto.d.ts +1 -0
- package/lib/typescript/helpers/persistCrypto.d.ts.map +1 -1
- package/lib/typescript/helpers/reactionsConfig.d.ts +5 -0
- package/lib/typescript/helpers/reactionsConfig.d.ts.map +1 -0
- package/lib/typescript/helpers/secureKeyValue.d.ts +4 -0
- package/lib/typescript/helpers/secureKeyValue.d.ts.map +1 -1
- package/lib/typescript/helpers/updateMessagesTillLast.d.ts.map +1 -1
- package/lib/typescript/helpers/videoCache.d.ts +19 -0
- package/lib/typescript/helpers/videoCache.d.ts.map +1 -0
- package/lib/typescript/hooks/useHeapSender.d.ts.map +1 -1
- package/lib/typescript/hooks/useLogout.d.ts.map +1 -1
- package/lib/typescript/hooks/useMessageHeapState.d.ts.map +1 -1
- package/lib/typescript/hooks/useRoomInitialization.d.ts +2 -2
- package/lib/typescript/hooks/useRoomInitialization.d.ts.map +1 -1
- package/lib/typescript/hooks/useSendMessage.d.ts.map +1 -1
- package/lib/typescript/i18n/strings.d.ts.map +1 -1
- package/lib/typescript/main.d.ts +2 -0
- package/lib/typescript/main.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/auth.api.d.ts +4 -1
- package/lib/typescript/networking/api-requests/auth.api.d.ts.map +1 -1
- package/lib/typescript/networking/api-requests/rooms.api.d.ts +22 -1
- package/lib/typescript/networking/api-requests/rooms.api.d.ts.map +1 -1
- package/lib/typescript/networking/stanzaHandlers.d.ts +4 -2
- package/lib/typescript/networking/stanzaHandlers.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/getHistory.xmpp.d.ts +3 -1
- package/lib/typescript/networking/xmpp/getHistory.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/handleStanzas.xmpp.d.ts +1 -0
- package/lib/typescript/networking/xmpp/handleStanzas.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/mamRouter.d.ts +23 -0
- package/lib/typescript/networking/xmpp/mamRouter.d.ts.map +1 -0
- package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts +1 -0
- package/lib/typescript/networking/xmpp/presenceInRoom.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/sendMediaMessage.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/sendTextMessage.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.d.ts.map +1 -1
- package/lib/typescript/networking/xmppClient.d.ts +22 -1
- package/lib/typescript/networking/xmppClient.d.ts.map +1 -1
- package/lib/typescript/roomStore/Middleware/newMessageMidlleware.d.ts.map +1 -1
- package/lib/typescript/roomStore/Middleware/perfMiddleware.d.ts +4 -0
- package/lib/typescript/roomStore/Middleware/perfMiddleware.d.ts.map +1 -0
- package/lib/typescript/roomStore/Middleware/reactionsMiddleware.d.ts +9 -0
- package/lib/typescript/roomStore/Middleware/reactionsMiddleware.d.ts.map +1 -1
- package/lib/typescript/roomStore/Middleware/unreadMidlleware.d.ts.map +1 -1
- package/lib/typescript/roomStore/index.d.ts.map +1 -1
- package/lib/typescript/roomStore/persistBackend.d.ts +11 -0
- package/lib/typescript/roomStore/persistBackend.d.ts.map +1 -0
- package/lib/typescript/roomStore/persistence.d.ts +5 -6
- package/lib/typescript/roomStore/persistence.d.ts.map +1 -1
- package/lib/typescript/roomStore/roomsSlice.d.ts +41 -1
- package/lib/typescript/roomStore/roomsSlice.d.ts.map +1 -1
- package/lib/typescript/theme/theme.d.ts +4 -1
- package/lib/typescript/theme/theme.d.ts.map +1 -1
- package/lib/typescript/types/models/message.model.d.ts +9 -0
- package/lib/typescript/types/models/message.model.d.ts.map +1 -1
- package/lib/typescript/types/models/room.model.d.ts +21 -0
- package/lib/typescript/types/models/room.model.d.ts.map +1 -1
- package/lib/typescript/types/models/xmpp.model.d.ts +6 -1
- package/lib/typescript/types/models/xmpp.model.d.ts.map +1 -1
- package/lib/typescript/types/types.d.ts +19 -3
- package/lib/typescript/types/types.d.ts.map +1 -1
- package/lib/typescript/utils/devLogger.d.ts +8 -0
- package/lib/typescript/utils/devLogger.d.ts.map +1 -1
- package/lib/typescript/version.d.ts +1 -1
- package/package.json +14 -1
- package/src/assets/emojiData.ts +2146 -0
- package/src/assets/icons.tsx +32 -5
- package/src/components/MainComponents/ChatHeader.tsx +46 -16
- package/src/components/MainComponents/ChatRoom.tsx +46 -30
- package/src/components/MainComponents/ChatWrapper.tsx +28 -10
- package/src/components/MainComponents/EncryptedSendNotice.tsx +35 -0
- package/src/components/MainComponents/EncryptionCard.tsx +287 -0
- package/src/components/MainComponents/MediaMessage.tsx +5 -0
- package/src/components/MainComponents/MessageContainer.tsx +7 -15
- package/src/components/MainComponents/MessageList.tsx +96 -43
- package/src/components/MainComponents/ReduxWrapper.tsx +5 -0
- package/src/components/MainComponents/RoomList.tsx +28 -29
- package/src/components/MainComponents/RoomStack.tsx +156 -83
- package/src/components/MainComponents/SealedAttachment.tsx +251 -0
- package/src/components/MainComponents/SystemMessage.tsx +6 -2
- package/src/components/MessageBubble/Avatar.tsx +7 -1
- package/src/components/MessageBubble/BottomReplyContainer.tsx +20 -21
- package/src/components/MessageBubble/EmojiPickerSheet.tsx +468 -0
- package/src/components/MessageBubble/Message.tsx +242 -93
- package/src/components/MessageBubble/MessageInteractions.tsx +215 -15
- package/src/components/MessageBubble/MessageReaction.tsx +120 -96
- package/src/components/MessageBubble/MessageReply.tsx +65 -32
- package/src/components/Modals/ChatProfileModal/ChatProfileModal.tsx +7 -4
- package/src/components/Modals/FilePreviewModal/FilePreviewModal.tsx +181 -35
- package/src/components/Modals/FilePreviewModal/PdfView.tsx +4 -0
- package/src/components/Modals/Modal/SwipeBackLayer.tsx +114 -63
- package/src/components/Modals/UserProfileModal/UserProfileModal.tsx +53 -8
- package/src/components/Modals/UserSettingsModal/UserSettingsModal.tsx +5 -0
- package/src/components/RoomComponents/ChatRoomItem.tsx +34 -15
- package/src/components/RoomComponents/LastMessageItem.tsx +5 -0
- package/src/components/RoomComponents/styled/LastAudioMessage.tsx +3 -1
- package/src/components/RoomComponents/styled/LastMessageEmoji.tsx +7 -8
- package/src/components/RoomComponents/styled/LastMessageFile.tsx +2 -2
- package/src/components/RoomComponents/styled/LastMessagePhoto.tsx +1 -1
- package/src/components/RoomComponents/styled/LastMessageSealed.tsx +31 -0
- package/src/components/RoomComponents/styled/LastMessageVideo.tsx +1 -1
- package/src/components/Thread/ThreadWrapper.tsx +287 -198
- package/src/components/UsersList/UsersList.tsx +2 -1
- package/src/components/styled/DateLabel.tsx +7 -3
- package/src/components/styled/SendInput.tsx +5 -2
- package/src/context/MessageNotificationContext.tsx +205 -7
- package/src/context/xmppProvider.tsx +29 -9
- package/src/e2ee/crypto.ts +194 -0
- package/src/e2ee/deviceStore.ts +80 -0
- package/src/e2ee/fileCipher.ts +86 -0
- package/src/e2ee/fileEnvelope.ts +115 -0
- package/src/e2ee/index.ts +192 -0
- package/src/e2ee/limits.ts +2 -0
- package/src/e2ee/ns.ts +1 -0
- package/src/e2ee/omemo.ts +802 -0
- package/src/e2ee/protobuf.ts +188 -0
- package/src/e2ee/ratchet.ts +271 -0
- package/src/e2ee/sealedBody.ts +17 -0
- package/src/e2ee/sealedFiles.ts +181 -0
- package/src/e2ee/send.ts +70 -0
- package/src/e2ee/stanza.ts +133 -0
- package/src/e2ee/store.ts +54 -0
- package/src/helpers/accountName.ts +15 -0
- package/src/helpers/createMessageFromXml.ts +31 -6
- package/src/helpers/createRoomFromApi.tsx +37 -1
- package/src/helpers/createUserNameFromSetUser.ts +2 -1
- package/src/helpers/displayName.ts +9 -0
- package/src/helpers/emoji.ts +39 -0
- package/src/helpers/haptics.ts +19 -0
- package/src/helpers/historyPreloadScheduler.ts +37 -69
- package/src/helpers/insertMessageWithDelimiter.ts +23 -16
- package/src/helpers/mamReactions.ts +59 -0
- package/src/helpers/parseMessageReference.ts +38 -0
- package/src/helpers/persistCrypto.ts +5 -0
- package/src/helpers/reactionsConfig.ts +13 -0
- package/src/helpers/secureKeyValue.ts +15 -0
- package/src/helpers/updateMessagesTillLast.tsx +14 -2
- package/src/helpers/videoCache.ts +138 -0
- package/src/hooks/useHeapSender.tsx +3 -2
- package/src/hooks/useLogout.tsx +9 -0
- package/src/hooks/useMessageHeapState.tsx +6 -2
- package/src/hooks/useRoomInitialization.tsx +32 -15
- package/src/hooks/useSendMessage.tsx +89 -16
- package/src/hooks/useUnreadMessagesCounter.ts +1 -1
- package/src/i18n/strings.ts +180 -0
- package/src/main.ts +2 -0
- package/src/networking/api-requests/auth.api.ts +9 -1
- package/src/networking/api-requests/rooms.api.ts +121 -18
- package/src/networking/stanzaHandlers.ts +116 -60
- package/src/networking/xmpp/getHistory.xmpp.ts +44 -106
- package/src/networking/xmpp/handleStanzas.xmpp.ts +51 -0
- package/src/networking/xmpp/mamRouter.ts +176 -0
- package/src/networking/xmpp/presenceInRoom.xmpp.ts +46 -3
- package/src/networking/xmpp/sendMediaMessage.xmpp.ts +19 -1
- package/src/networking/xmpp/sendTextMessage.xmpp.ts +17 -10
- package/src/networking/xmpp/sendTextMessageWithTranslateTag.xmpp.ts +23 -10
- package/src/networking/xmppClient.ts +111 -20
- package/src/roomStore/Middleware/newMessageMidlleware.tsx +35 -38
- package/src/roomStore/Middleware/perfMiddleware.ts +50 -0
- package/src/roomStore/Middleware/reactionsMiddleware.tsx +53 -52
- package/src/roomStore/Middleware/unreadMidlleware.tsx +92 -80
- package/src/roomStore/index.ts +28 -27
- package/src/roomStore/persistBackend.ts +93 -0
- package/src/roomStore/persistence.ts +295 -73
- package/src/roomStore/roomsSlice.ts +304 -155
- package/src/theme/theme.ts +10 -1
- package/src/types/models/message.model.ts +9 -0
- package/src/types/models/room.model.ts +22 -0
- package/src/types/models/xmpp.model.ts +4 -2
- package/src/types/types.ts +19 -3
- package/src/utils/devLogger.ts +16 -0
- package/src/version.ts +1 -1
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.mergeUsersSet = exports.editRoomMessage = exports.deleteRoomMessage = exports.deleteRoom = exports.deleteAllRooms = exports.default = exports.clearVisibleRoom = exports.clearReadBoundary = exports.clearPendingNotificationJid = exports.applyRoomsPreloadBatch = exports.applyPrivateStoreMarkers = exports.addRoomViaApi = exports.addRoomMessage = exports.addRoom = exports.RUNTIME_MESSAGE_LIMIT = void 0;
|
|
6
|
+
exports.mergeUsersSet = exports.editRoomMessage = exports.deleteRoomMessage = exports.deleteRoom = exports.deleteAllRooms = exports.default = exports.compareStanzaIds = exports.clearVisibleRoom = exports.clearReadBoundary = exports.clearPendingNotificationJid = exports.applyRoomsPreloadBatch = exports.applyReactionToMessage = exports.applyPrivateStoreMarkers = exports.addRooms = exports.addRoomViaApi = exports.addRoomMessages = exports.addRoomMessage = exports.addRoom = exports.UNREAD_CAP_PAGE = exports.RUNTIME_MESSAGE_LIMIT = exports.RUNTIME_MESSAGE_CEILING = void 0;
|
|
7
7
|
Object.defineProperty(exports, "msgSortableMs", {
|
|
8
8
|
enumerable: true,
|
|
9
9
|
get: function () {
|
|
10
10
|
return _msgSortableMs.msgSortableMs;
|
|
11
11
|
}
|
|
12
12
|
});
|
|
13
|
-
exports.updateRoom = exports.setVisibleRoom = exports.setUnreadSyncing = exports.setRoomRole = exports.setRoomNoMessages = exports.setRoomMessages = exports.setReadBoundary = exports.setReactions = exports.setPendingNotificationJid = exports.setLogoutState = exports.setLastViewedTimestamp = exports.setIsLoading = exports.setEditAction = exports.setCurrentRoom = exports.setComposing = exports.setCloseActiveMessage = exports.setActiveMessage = exports.roomsStore = void 0;
|
|
13
|
+
exports.updateRoom = exports.setVisibleRoom = exports.setUnreadSyncing = exports.setUnreadCounts = exports.setRoomRole = exports.setRoomNoMessages = exports.setRoomMessages = exports.setReadBoundary = exports.setReactions = exports.setPendingNotificationJid = exports.setLogoutState = exports.setLastViewedTimestamp = exports.setIsLoading = exports.setEditAction = exports.setCurrentRoom = exports.setComposing = exports.setCloseActiveMessage = exports.setActiveMessage = exports.roomsStore = void 0;
|
|
14
14
|
var _toolkit = require("@reduxjs/toolkit");
|
|
15
15
|
var _insertMessageWithDelimiter = require("../helpers/insertMessageWithDelimiter");
|
|
16
16
|
var _msgSortableMs = require("../helpers/msgSortableMs");
|
|
@@ -24,6 +24,9 @@ var _msgSortableMs = require("../helpers/msgSortableMs");
|
|
|
24
24
|
// page backward arbitrarily far without instantly losing what they
|
|
25
25
|
// just fetched. After cap eviction we drop from the head (oldest).
|
|
26
26
|
const RUNTIME_MESSAGE_LIMIT = exports.RUNTIME_MESSAGE_LIMIT = 100;
|
|
27
|
+
/** One preload page: "N+" badges only ever mean "at least this many". */
|
|
28
|
+
const UNREAD_CAP_PAGE = exports.UNREAD_CAP_PAGE = 10;
|
|
29
|
+
const RUNTIME_MESSAGE_CEILING = exports.RUNTIME_MESSAGE_CEILING = 2000;
|
|
27
30
|
|
|
28
31
|
// Body strings the server uses for call signaling broadcasts (call-token,
|
|
29
32
|
// call-state ringing/ended, etc). These should never reach the chat
|
|
@@ -107,11 +110,170 @@ const collapseCallLogDuplicates = messages => {
|
|
|
107
110
|
return callId ? byCallId.get(callId) || message : message;
|
|
108
111
|
});
|
|
109
112
|
};
|
|
110
|
-
const
|
|
113
|
+
const NO_GROWTH = {
|
|
114
|
+
grew: false,
|
|
115
|
+
atHead: false
|
|
116
|
+
};
|
|
117
|
+
const insertRoomMessage = (state, roomJID, message, start) => {
|
|
118
|
+
if (isCallSignalMessage(message)) {
|
|
119
|
+
return NO_GROWTH;
|
|
120
|
+
}
|
|
121
|
+
if (!state.rooms[roomJID]) {
|
|
122
|
+
return NO_GROWTH;
|
|
123
|
+
}
|
|
124
|
+
if (!state.rooms[roomJID].messages) {
|
|
125
|
+
state.rooms[roomJID].messages = [];
|
|
126
|
+
}
|
|
127
|
+
const roomMessages = state.rooms[roomJID].messages;
|
|
128
|
+
const incomingCallLog = message.callLog;
|
|
129
|
+
if (incomingCallLog?.callId) {
|
|
130
|
+
const existingCallIdx = roomMessages.findIndex(msg => msg.callLog?.callId === incomingCallLog.callId);
|
|
131
|
+
if (existingCallIdx !== -1) {
|
|
132
|
+
const existing = roomMessages[existingCallIdx];
|
|
133
|
+
const merged = mergeCallLogEntries(existing, message);
|
|
134
|
+
if (merged !== existing) {
|
|
135
|
+
roomMessages[existingCallIdx] = merged;
|
|
136
|
+
}
|
|
137
|
+
return NO_GROWTH;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
takePendingReactions(state, roomJID, message);
|
|
141
|
+
const lengthBefore = roomMessages.length;
|
|
142
|
+
const tailBefore = roomMessages[lengthBefore - 1];
|
|
143
|
+
if (roomMessages.length === 0 || start) {
|
|
144
|
+
roomMessages.unshift(message);
|
|
145
|
+
} else {
|
|
146
|
+
const lastViewedValue = state.rooms[roomJID].lastViewedTimestamp;
|
|
147
|
+
const lastViewedTimestamp = state.visibleRoomJID === roomJID ? null : lastViewedValue ? lastViewedValue : null;
|
|
148
|
+
(0, _insertMessageWithDelimiter.insertMessageWithDelimiter)(roomMessages, message, lastViewedTimestamp);
|
|
149
|
+
}
|
|
150
|
+
const grew = roomMessages.length > lengthBefore;
|
|
151
|
+
const atHead = grew && lengthBefore > 0 && roomMessages[roomMessages.length - 1] === tailBefore;
|
|
152
|
+
return {
|
|
153
|
+
grew,
|
|
154
|
+
atHead
|
|
155
|
+
};
|
|
156
|
+
};
|
|
157
|
+
const capAfterGrowth = (messages, lengthBefore, atHead) => {
|
|
158
|
+
if (atHead) {
|
|
159
|
+
enforceMessageCap(messages, RUNTIME_MESSAGE_CEILING);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
enforceMessageCap(messages, Math.min(RUNTIME_MESSAGE_CEILING, Math.max(RUNTIME_MESSAGE_LIMIT, lengthBefore)));
|
|
163
|
+
};
|
|
164
|
+
const bumpLastMessageTimestamp = (state, roomJID, message) => {
|
|
165
|
+
const room = state.rooms[roomJID];
|
|
166
|
+
if (!room || message?.id === 'delimiter-new') {
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
const ts = Number(message?.id);
|
|
170
|
+
if (!Number.isFinite(ts)) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
if ((room.lastMessageTimestamp ?? 0) <= ts) {
|
|
174
|
+
room.lastMessageTimestamp = ts;
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
const upsertRoom = (state, roomData) => {
|
|
178
|
+
const existing = state.rooms[roomData.jid];
|
|
179
|
+
let lastViewed;
|
|
180
|
+
const serverMarker = state.privateStoreMarkers?.[roomData.jid] || 0;
|
|
181
|
+
if (roomData.lastViewedTimestamp != null && roomData.lastViewedTimestamp !== 0) {
|
|
182
|
+
lastViewed = roomData.lastViewedTimestamp;
|
|
183
|
+
} else if (existing?.lastViewedTimestamp != null && existing.lastViewedTimestamp > 0) {
|
|
184
|
+
lastViewed = existing.lastViewedTimestamp;
|
|
185
|
+
} else if (serverMarker > 0) {
|
|
186
|
+
lastViewed = serverMarker;
|
|
187
|
+
} else {
|
|
188
|
+
const msgs = roomData.messages || [];
|
|
189
|
+
let newest = 0;
|
|
190
|
+
for (const m of msgs) {
|
|
191
|
+
const t = m?.messageTimestampMs || (m?.date ? new Date(m.date).getTime() : 0);
|
|
192
|
+
if (t > newest) {
|
|
193
|
+
newest = t;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
lastViewed = newest; // 0 if no messages → cold-start safe
|
|
197
|
+
}
|
|
198
|
+
const incomingMessages = Array.isArray(roomData.messages) ? roomData.messages : [];
|
|
199
|
+
const existingMessages = Array.isArray(existing?.messages) ? existing.messages : [];
|
|
200
|
+
state.rooms[roomData.jid] = {
|
|
201
|
+
...roomData,
|
|
202
|
+
icon: roomData.icon !== undefined ? roomData.icon : existing?.icon,
|
|
203
|
+
roomBg: roomData.roomBg !== undefined ? roomData.roomBg : existing?.roomBg,
|
|
204
|
+
messages: existingMessages.length > 0 ? existingMessages : incomingMessages,
|
|
205
|
+
lastViewedTimestamp: lastViewed,
|
|
206
|
+
unreadMessages: roomData.unreadMessages ?? existing?.unreadMessages ?? 0,
|
|
207
|
+
unreadBaselineTimestamp: existing?.unreadBaselineTimestamp ?? existing?.lastViewedTimestamp ?? roomData.unreadBaselineTimestamp ?? 0
|
|
208
|
+
};
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
/** Order two numeric stanza ids (microsecond timestamps, too long for a
|
|
212
|
+
* double) without BigInt: by length, then lexicographically. */
|
|
213
|
+
const compareStanzaIds = (a, b) => a.length !== b.length ? a.length - b.length : a < b ? -1 : a > b ? 1 : 0;
|
|
214
|
+
exports.compareStanzaIds = compareStanzaIds;
|
|
215
|
+
const applyReactionToMessage = (message, from, reactions, data, ts) => {
|
|
216
|
+
const fromId = String(from || '').split('/')[0].split('@')[0];
|
|
217
|
+
if (!fromId) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
const list = (reactions || []).filter(r => !!r);
|
|
221
|
+
const current = {
|
|
222
|
+
...(message.reaction || {})
|
|
223
|
+
};
|
|
224
|
+
const prev = current[fromId];
|
|
225
|
+
// An older reaction (from a history page loaded after a newer one) never
|
|
226
|
+
// overwrites what is already known.
|
|
227
|
+
if (ts && prev?.ts && compareStanzaIds(ts, prev.ts) < 0) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
if (list.length === 0) {
|
|
231
|
+
if (ts) {
|
|
232
|
+
// Keep a "removed" marker so an older reaction can't come back.
|
|
233
|
+
current[fromId] = {
|
|
234
|
+
emoji: [],
|
|
235
|
+
data: data || {},
|
|
236
|
+
ts
|
|
237
|
+
};
|
|
238
|
+
} else {
|
|
239
|
+
delete current[fromId];
|
|
240
|
+
}
|
|
241
|
+
} else {
|
|
242
|
+
current[fromId] = {
|
|
243
|
+
emoji: list,
|
|
244
|
+
data: data || {},
|
|
245
|
+
...(ts ? {
|
|
246
|
+
ts
|
|
247
|
+
} : {})
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
const anyShown = Object.values(current).some(r => r?.emoji?.length);
|
|
251
|
+
message.reaction = anyShown || Object.keys(current).length ? current : undefined;
|
|
252
|
+
};
|
|
253
|
+
exports.applyReactionToMessage = applyReactionToMessage;
|
|
254
|
+
/** Reactions whose message is not loaded yet — applied when it arrives. */
|
|
255
|
+
const takePendingReactions = (state, roomJID, message) => {
|
|
256
|
+
const byMessage = state.pendingReactions?.[roomJID];
|
|
257
|
+
if (!byMessage) {
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
const keys = [String(message.id), message.xmppId ? String(message.xmppId) : ''];
|
|
261
|
+
for (const key of keys) {
|
|
262
|
+
const list = key ? byMessage[key] : undefined;
|
|
263
|
+
if (!list) {
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
for (const r of list) {
|
|
267
|
+
applyReactionToMessage(message, r.from, r.reactions, r.data, r.ts);
|
|
268
|
+
}
|
|
269
|
+
delete byMessage[key];
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
const enforceMessageCap = (messages, limit = RUNTIME_MESSAGE_LIMIT) => {
|
|
111
273
|
// Trim oldest until we're at/under the limit. Mutates in place
|
|
112
274
|
// (immer-compatible inside reducers).
|
|
113
|
-
|
|
114
|
-
messages.
|
|
275
|
+
if (messages.length > limit) {
|
|
276
|
+
messages.splice(0, messages.length - limit);
|
|
115
277
|
}
|
|
116
278
|
};
|
|
117
279
|
|
|
@@ -190,10 +352,24 @@ function mergeHistoryIntoCache(existing, fetched) {
|
|
|
190
352
|
// body). Preserve `isEdited` from the cached copy so a message edited
|
|
191
353
|
// before reload keeps its marker instead of losing it on history sync.
|
|
192
354
|
const prev = byId.get(String(m.id));
|
|
193
|
-
|
|
355
|
+
let next = prev?.isEdited && !m.isEdited ? {
|
|
194
356
|
...m,
|
|
195
357
|
isEdited: true
|
|
196
|
-
} : m
|
|
358
|
+
} : m;
|
|
359
|
+
if (prev?.reaction && !next.reaction) {
|
|
360
|
+
next = {
|
|
361
|
+
...next,
|
|
362
|
+
reaction: prev.reaction
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
// A history merge must not close a thread the user has open.
|
|
366
|
+
if (prev?.activeMessage && !next.activeMessage) {
|
|
367
|
+
next = {
|
|
368
|
+
...next,
|
|
369
|
+
activeMessage: true
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
byId.set(String(m.id), next);
|
|
197
373
|
}
|
|
198
374
|
const merged = collapseCallLogDuplicates(Array.from(byId.values()).sort(byMs));
|
|
199
375
|
return [...capTail(merged), ...pending];
|
|
@@ -212,7 +388,8 @@ const initialState = {
|
|
|
212
388
|
},
|
|
213
389
|
pendingNotificationJid: null,
|
|
214
390
|
privateStoreMarkers: {},
|
|
215
|
-
readBoundaries: {}
|
|
391
|
+
readBoundaries: {},
|
|
392
|
+
pendingReactions: {}
|
|
216
393
|
};
|
|
217
394
|
const isValidRoomJid = jid => {
|
|
218
395
|
if (typeof jid !== 'string' || !jid) return false;
|
|
@@ -237,74 +414,33 @@ const addRoomViaApi = exports.addRoomViaApi = (0, _toolkit.createAsyncThunk)('ro
|
|
|
237
414
|
// emitted .d.ts (TS4023). See chatSettingsSlice.ts for the same pattern.
|
|
238
415
|
const reducers = {
|
|
239
416
|
addRoom(state, action) {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
const
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
// markers when the privateStore pull lands before
|
|
248
|
-
// /chats/my).
|
|
249
|
-
// 3. Otherwise, anchor to the *newest known message* in the
|
|
250
|
-
// payload — this marks everything currently in the room
|
|
251
|
-
// as "seen" but lets any NEWER incoming message count as
|
|
252
|
-
// unread. Previously this fell back to `Date.now()`, which
|
|
253
|
-
// stamped a future-leaning marker that hid genuinely-new
|
|
254
|
-
// messages received while the app was closed.
|
|
255
|
-
// 4. If there are no messages at all yet, stamp `0` (=
|
|
256
|
-
// "unknown — let the privateStore hydration set the real
|
|
257
|
-
// marker before any future message arrives").
|
|
258
|
-
let lastViewed;
|
|
259
|
-
// Treat an incoming `0` as "unset". stanzaHandlers' addRoom passes
|
|
260
|
-
// `lastViewedTimestamp: 0` as a placeholder; the old `!= null` check
|
|
261
|
-
// let that 0 win and OVERWROTE the persisted/hydrated marker from
|
|
262
|
-
// the previous session, so cold-start showed no unread badge for
|
|
263
|
-
// messages received while the app was closed (bug #19/#20). A real
|
|
264
|
-
// (non-zero) explicit value still wins; otherwise keep the existing
|
|
265
|
-
// value; otherwise fall back to the server-side read marker fetched
|
|
266
|
-
// from the private store (so a room the user has NEVER opened this
|
|
267
|
-
// session still gets a real baseline — without it the unread
|
|
268
|
-
// middleware's `lastViewedTimestamp > 0` gate skipped the room
|
|
269
|
-
// forever and the badge never lit up); otherwise anchor to the
|
|
270
|
-
// newest message in the payload.
|
|
271
|
-
const serverMarker = state.privateStoreMarkers?.[roomData.jid] || 0;
|
|
272
|
-
if (roomData.lastViewedTimestamp != null && roomData.lastViewedTimestamp !== 0) {
|
|
273
|
-
lastViewed = roomData.lastViewedTimestamp;
|
|
274
|
-
} else if (existing?.lastViewedTimestamp != null && existing.lastViewedTimestamp > 0) {
|
|
275
|
-
lastViewed = existing.lastViewedTimestamp;
|
|
276
|
-
} else if (serverMarker > 0) {
|
|
277
|
-
lastViewed = serverMarker;
|
|
278
|
-
} else {
|
|
279
|
-
const msgs = roomData.messages || [];
|
|
280
|
-
let newest = 0;
|
|
281
|
-
for (const m of msgs) {
|
|
282
|
-
const t = m?.messageTimestampMs || (m?.date ? new Date(m.date).getTime() : 0);
|
|
283
|
-
if (t > newest) {
|
|
284
|
-
newest = t;
|
|
285
|
-
}
|
|
417
|
+
upsertRoom(state, action.payload.roomData);
|
|
418
|
+
},
|
|
419
|
+
setUnreadCounts(state, action) {
|
|
420
|
+
for (const [jid, count] of Object.entries(action.payload || {})) {
|
|
421
|
+
const room = state.rooms[jid];
|
|
422
|
+
if (!room) {
|
|
423
|
+
continue;
|
|
286
424
|
}
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
unreadBaselineTimestamp: existing?.unreadBaselineTimestamp ?? existing?.lastViewedTimestamp ?? roomData.unreadBaselineTimestamp ?? 0
|
|
307
|
-
};
|
|
425
|
+
if (room.unreadMessages !== count) {
|
|
426
|
+
room.unreadMessages = count;
|
|
427
|
+
}
|
|
428
|
+
// "N+" only means "a whole page was unread"; an exact count below a
|
|
429
|
+
// page (or read to zero) settles it.
|
|
430
|
+
if (room.unreadCapped && count < UNREAD_CAP_PAGE) {
|
|
431
|
+
room.unreadCapped = false;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
},
|
|
435
|
+
/** Several rooms in one action — the cold-start rehydrate of the whole
|
|
436
|
+
* cache used to be one `addRoom` per room, each running every
|
|
437
|
+
* middleware over every room already added (O(rooms²)). */
|
|
438
|
+
addRooms(state, action) {
|
|
439
|
+
for (const roomData of action.payload.rooms || []) {
|
|
440
|
+
if (roomData?.jid) {
|
|
441
|
+
upsertRoom(state, roomData);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
308
444
|
},
|
|
309
445
|
deleteRoom(state, action) {
|
|
310
446
|
const {
|
|
@@ -367,6 +503,7 @@ const reducers = {
|
|
|
367
503
|
room.messages.map(message => {
|
|
368
504
|
if (message.id === messageId) {
|
|
369
505
|
message.isDeleted = true;
|
|
506
|
+
message.reaction = undefined;
|
|
370
507
|
}
|
|
371
508
|
});
|
|
372
509
|
},
|
|
@@ -406,67 +543,50 @@ const reducers = {
|
|
|
406
543
|
message,
|
|
407
544
|
start
|
|
408
545
|
} = action.payload;
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
// or the room-list "last message" preview.
|
|
414
|
-
if (isCallSignalMessage(message)) {
|
|
415
|
-
return;
|
|
546
|
+
const lengthBefore = state.rooms[roomJID]?.messages?.length || 0;
|
|
547
|
+
const outcome = insertRoomMessage(state, roomJID, message, start);
|
|
548
|
+
if (outcome.grew) {
|
|
549
|
+
capAfterGrowth(state.rooms[roomJID].messages, lengthBefore, outcome.atHead);
|
|
416
550
|
}
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
551
|
+
bumpLastMessageTimestamp(state, roomJID, message);
|
|
552
|
+
},
|
|
553
|
+
/**
|
|
554
|
+
* A whole page of messages (a MAM history page) in ONE action: the same
|
|
555
|
+
* per-message insert as `addRoomMessage`, but the cap, the middleware
|
|
556
|
+
* chain and every subscriber run once per page instead of once per
|
|
557
|
+
* message.
|
|
558
|
+
*/
|
|
559
|
+
addRoomMessages(state, action) {
|
|
560
|
+
const {
|
|
561
|
+
roomJID,
|
|
562
|
+
messages,
|
|
563
|
+
start
|
|
564
|
+
} = action.payload;
|
|
565
|
+
if (!state.rooms[roomJID] || !Array.isArray(messages)) {
|
|
425
566
|
return;
|
|
426
567
|
}
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
// - the SERVER copy is canonical for identity (id/date/xmppId): its
|
|
438
|
-
// archive id is what MAM and the catch-up anchor return later, so
|
|
439
|
-
// keeping a local "calllog-" id around breaks anchor matching and
|
|
440
|
-
// duplicates the entry on the next history merge;
|
|
441
|
-
// - the LARGEST duration wins for display, so a 2-minute call doesn't
|
|
442
|
-
// render as "2 sec".
|
|
443
|
-
const incomingCallLog = message.callLog;
|
|
444
|
-
if (incomingCallLog?.callId) {
|
|
445
|
-
const existingCallIdx = roomMessages.findIndex(msg => msg.callLog?.callId === incomingCallLog.callId);
|
|
446
|
-
if (existingCallIdx !== -1) {
|
|
447
|
-
const existing = roomMessages[existingCallIdx];
|
|
448
|
-
const merged = mergeCallLogEntries(existing, message);
|
|
449
|
-
if (merged !== existing) {
|
|
450
|
-
roomMessages[existingCallIdx] = merged;
|
|
568
|
+
const lengthBefore = state.rooms[roomJID].messages?.length || 0;
|
|
569
|
+
let grew = false;
|
|
570
|
+
let anyAtTail = false;
|
|
571
|
+
let newest;
|
|
572
|
+
for (const message of messages) {
|
|
573
|
+
const outcome = insertRoomMessage(state, roomJID, message, start);
|
|
574
|
+
if (outcome.grew) {
|
|
575
|
+
grew = true;
|
|
576
|
+
if (!outcome.atHead) {
|
|
577
|
+
anyAtTail = true;
|
|
451
578
|
}
|
|
452
|
-
|
|
579
|
+
}
|
|
580
|
+
if (!newest || Number(message?.id) > Number(newest.id)) {
|
|
581
|
+
newest = message;
|
|
453
582
|
}
|
|
454
583
|
}
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
} else {
|
|
459
|
-
const lastViewedValue = state.rooms[roomJID].lastViewedTimestamp;
|
|
460
|
-
const lastViewedTimestamp = state.visibleRoomJID === roomJID ? null : lastViewedValue ? lastViewedValue : null;
|
|
461
|
-
(0, _insertMessageWithDelimiter.insertMessageWithDelimiter)(roomMessages, message, lastViewedTimestamp);
|
|
584
|
+
if (grew) {
|
|
585
|
+
// A page that only prepended older history is never trimmed.
|
|
586
|
+
capAfterGrowth(state.rooms[roomJID].messages, lengthBefore, !anyAtTail);
|
|
462
587
|
}
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
// (i.e. this wasn't a dedupe/merge that left length unchanged).
|
|
466
|
-
// Otherwise repeated echoes of the same message would chip away
|
|
467
|
-
// at the oldest history for no reason.
|
|
468
|
-
if (roomMessages.length > lengthBefore) {
|
|
469
|
-
enforceMessageCap(roomMessages);
|
|
588
|
+
if (newest) {
|
|
589
|
+
bumpLastMessageTimestamp(state, roomJID, newest);
|
|
470
590
|
}
|
|
471
591
|
},
|
|
472
592
|
deleteAllRooms(state) {
|
|
@@ -685,21 +805,38 @@ const reducers = {
|
|
|
685
805
|
const {
|
|
686
806
|
roomJID,
|
|
687
807
|
messageId,
|
|
688
|
-
reactions
|
|
808
|
+
reactions,
|
|
809
|
+
from,
|
|
810
|
+
data,
|
|
811
|
+
latestReactionTimestamp
|
|
689
812
|
} = action.payload;
|
|
813
|
+
if (!from) {
|
|
814
|
+
return;
|
|
815
|
+
}
|
|
690
816
|
const room = state.rooms[roomJID];
|
|
691
|
-
|
|
817
|
+
const target = room?.messages?.find(msg => msg?.id === messageId || msg?.xmppId === messageId);
|
|
818
|
+
if (target) {
|
|
819
|
+
applyReactionToMessage(target, from, reactions, data, latestReactionTimestamp);
|
|
692
820
|
return;
|
|
693
821
|
}
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
822
|
+
// The message is not loaded (yet): keep the reaction for it.
|
|
823
|
+
if (!state.pendingReactions) {
|
|
824
|
+
state.pendingReactions = {};
|
|
825
|
+
}
|
|
826
|
+
const byMessage = state.pendingReactions[roomJID] ||= {};
|
|
827
|
+
const list = byMessage[messageId] ||= [];
|
|
828
|
+
if (list.length < 50) {
|
|
829
|
+
list.push({
|
|
830
|
+
from,
|
|
831
|
+
reactions,
|
|
832
|
+
data,
|
|
833
|
+
ts: latestReactionTimestamp
|
|
834
|
+
});
|
|
699
835
|
}
|
|
700
836
|
},
|
|
701
837
|
setLogoutState: state => {
|
|
702
838
|
state.rooms = {};
|
|
839
|
+
state.pendingReactions = {};
|
|
703
840
|
state.activeRoomJID = null;
|
|
704
841
|
state.visibleRoomJID = null;
|
|
705
842
|
state.isLoading = false;
|
|
@@ -783,6 +920,9 @@ const reducers = {
|
|
|
783
920
|
room.historyComplete = patch.historyComplete;
|
|
784
921
|
}
|
|
785
922
|
if (Array.isArray(patch.messages)) {
|
|
923
|
+
for (const m of patch.messages) {
|
|
924
|
+
takePendingReactions(state, patch.jid, m);
|
|
925
|
+
}
|
|
786
926
|
// Merge the fetched page into cache by message id rather than
|
|
787
927
|
// replacing — preserves older history + unread on re-entry. Only
|
|
788
928
|
// a true gap (no overlapping id) clears this chat's cache. See
|
|
@@ -914,6 +1054,9 @@ const {
|
|
|
914
1054
|
deleteRoom,
|
|
915
1055
|
updateRoom,
|
|
916
1056
|
applyRoomsPreloadBatch,
|
|
1057
|
+
addRoomMessages,
|
|
1058
|
+
addRooms,
|
|
1059
|
+
setUnreadCounts,
|
|
917
1060
|
setPendingNotificationJid,
|
|
918
1061
|
clearPendingNotificationJid,
|
|
919
1062
|
setReactions,
|
|
@@ -923,6 +1066,9 @@ exports.mergeUsersSet = mergeUsersSet;
|
|
|
923
1066
|
exports.setReactions = setReactions;
|
|
924
1067
|
exports.clearPendingNotificationJid = clearPendingNotificationJid;
|
|
925
1068
|
exports.setPendingNotificationJid = setPendingNotificationJid;
|
|
1069
|
+
exports.setUnreadCounts = setUnreadCounts;
|
|
1070
|
+
exports.addRooms = addRooms;
|
|
1071
|
+
exports.addRoomMessages = addRoomMessages;
|
|
926
1072
|
exports.applyRoomsPreloadBatch = applyRoomsPreloadBatch;
|
|
927
1073
|
exports.updateRoom = updateRoom;
|
|
928
1074
|
exports.deleteRoom = deleteRoom;
|