summaryrefslogtreecommitdiff
path: root/src/Erebos/Conversation.hs
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2025-07-28 11:43:59 +0200
committerRoman Smrž <roman.smrz@seznam.cz>2025-07-28 11:43:59 +0200
commitae235831a83eb80910ad58f9a324a688ce5e2e47 (patch)
tree039872f5fb7b1600670ae801c74066efabb98b90 /src/Erebos/Conversation.hs
parente43bdb1b58d68916524e7efa10df40f39edebe71 (diff)
Conversation: isSameConversation function
Diffstat (limited to 'src/Erebos/Conversation.hs')
-rw-r--r--src/Erebos/Conversation.hs16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/Erebos/Conversation.hs b/src/Erebos/Conversation.hs
index 187fddd..1e3bad4 100644
--- a/src/Erebos/Conversation.hs
+++ b/src/Erebos/Conversation.hs
@@ -7,6 +7,7 @@ module Erebos.Conversation (
formatMessage,
Conversation,
+ isSameConversation,
directMessageConversation,
chatroomConversation,
chatroomConversationByStateData,
@@ -35,6 +36,8 @@ import Erebos.DirectMessage
import Erebos.Identity
import Erebos.State
import Erebos.Storable
+import Erebos.Storage.Merge
+import Erebos.Util
data Message = DirectMessageMessage DirectMessage Bool
@@ -64,8 +67,17 @@ formatMessage tzone msg = concat
]
-data Conversation = DirectMessageConversation DirectMessageThread
- | ChatroomConversation ChatroomState
+data Conversation
+ = DirectMessageConversation DirectMessageThread
+ | ChatroomConversation ChatroomState
+
+isSameConversation :: Conversation -> Conversation -> Bool
+isSameConversation (DirectMessageConversation t) (DirectMessageConversation t')
+ = sameIdentity (msgPeer t) (msgPeer t')
+isSameConversation (ChatroomConversation c) (ChatroomConversation c')
+ = let roots = filterAncestors . concatMap storedRoots . roomStateData
+ in intersectsSorted (roots c) (roots c')
+isSameConversation _ _ = False
directMessageConversation :: MonadHead LocalState m => ComposedIdentity -> m Conversation
directMessageConversation peer = do