diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2026-02-22 19:05:53 +0100 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2026-02-23 22:45:45 +0100 |
| commit | de0c48e2c0ab3ff3372b7eb207cba5cf245e1ea9 (patch) | |
| tree | db3bb9dd634c15e776b7cebb12a5bd453e09b26a /src | |
| parent | a2bca4901229efb09ea510fe31fb2be94a6b4a9c (diff) | |
Conversation reference using RefDigest
Diffstat (limited to 'src')
| -rw-r--r-- | src/Erebos/Chatroom.hs | 2 | ||||
| -rw-r--r-- | src/Erebos/Conversation.hs | 8 | ||||
| -rw-r--r-- | src/Erebos/Conversation/Class.hs | 4 | ||||
| -rw-r--r-- | src/Erebos/DirectMessage.hs | 2 | ||||
| -rw-r--r-- | src/Erebos/Storable.hs | 2 |
5 files changed, 17 insertions, 1 deletions
diff --git a/src/Erebos/Chatroom.hs b/src/Erebos/Chatroom.hs index 5a86b23..11d5643 100644 --- a/src/Erebos/Chatroom.hs +++ b/src/Erebos/Chatroom.hs @@ -67,6 +67,8 @@ instance ConversationType ChatroomState ChatMessage where convMessageTime = cmsgTime convMessageText = cmsgText + convReference = refDigest . storedRef . head . filterAncestors . concatMap storedRoots . roomStateData + convMessageListSince mbSince cstate = map (, False) $ threadToListSince (maybe [] roomStateMessageData mbSince) (roomStateMessageData cstate) diff --git a/src/Erebos/Conversation.hs b/src/Erebos/Conversation.hs index a48daf7..20cbf94 100644 --- a/src/Erebos/Conversation.hs +++ b/src/Erebos/Conversation.hs @@ -17,7 +17,9 @@ module Erebos.Conversation ( isChatroomStateConversation, reloadConversation, lookupConversations, + lookupConversationByRef, + conversationReference, conversationName, conversationPeer, conversationHistory, @@ -113,6 +115,12 @@ reloadConversation cur@(ChatroomConversation rstate) = lookupConversations :: MonadHead LocalState m => m [ Conversation ] lookupConversations = map DirectMessageConversation . dmThreadList . lookupSharedValue . lsShared . fromStored <$> getLocalHead +lookupConversationByRef :: MonadHead LocalState m => RefDigest -> m (Maybe Conversation) +lookupConversationByRef dgst = find ((dgst ==) . conversationReference) <$> lookupConversations + + +conversationReference :: Conversation -> RefDigest +conversationReference = withConversation convReference conversationName :: Conversation -> Text conversationName (DirectMessageConversation thread) = fromMaybe (T.pack "<unnamed>") $ idName $ msgPeer thread diff --git a/src/Erebos/Conversation/Class.hs b/src/Erebos/Conversation/Class.hs index 6a28651..77458fa 100644 --- a/src/Erebos/Conversation/Class.hs +++ b/src/Erebos/Conversation/Class.hs @@ -1,5 +1,6 @@ module Erebos.Conversation.Class ( ConversationType(..), + RefDigest, ) where import Data.Text (Text) @@ -7,10 +8,13 @@ import Data.Time.LocalTime import Data.Typeable import Erebos.Identity +import Erebos.Object class (Typeable conv, Typeable msg) => ConversationType conv msg | conv -> msg, msg -> conv where convMessageFrom :: msg -> ComposedIdentity convMessageTime :: msg -> ZonedTime convMessageText :: msg -> Maybe Text + + convReference :: conv -> RefDigest convMessageListSince :: Maybe conv -> conv -> [ ( msg, Bool ) ] diff --git a/src/Erebos/DirectMessage.hs b/src/Erebos/DirectMessage.hs index dd10d35..e88bcce 100644 --- a/src/Erebos/DirectMessage.hs +++ b/src/Erebos/DirectMessage.hs @@ -50,6 +50,8 @@ instance ConversationType DirectMessageThread DirectMessage where convMessageTime = msgTime convMessageText = Just . msgText + convReference = refDigest . storedRef . head . idDataF . msgPeer + convMessageListSince mbSince thread = threadToListHelper (msgSeen thread) (maybe S.empty (S.fromAscList . msgHead) mbSince) (msgHead thread) diff --git a/src/Erebos/Storable.hs b/src/Erebos/Storable.hs index 5ccb180..055309a 100644 --- a/src/Erebos/Storable.hs +++ b/src/Erebos/Storable.hs @@ -31,7 +31,7 @@ module Erebos.Storable ( loadZRef, Stored, - fromStored, storedRef, + fromStored, storedRef, refDigest, wrappedStore, wrappedLoad, copyStored, unsafeMapStored, |