summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2026-02-22 19:05:53 +0100
committerRoman Smrž <roman.smrz@seznam.cz>2026-02-23 22:45:45 +0100
commitde0c48e2c0ab3ff3372b7eb207cba5cf245e1ea9 (patch)
treedb3bb9dd634c15e776b7cebb12a5bd453e09b26a /src
parenta2bca4901229efb09ea510fe31fb2be94a6b4a9c (diff)
Conversation reference using RefDigest
Diffstat (limited to 'src')
-rw-r--r--src/Erebos/Chatroom.hs2
-rw-r--r--src/Erebos/Conversation.hs8
-rw-r--r--src/Erebos/Conversation/Class.hs4
-rw-r--r--src/Erebos/DirectMessage.hs2
-rw-r--r--src/Erebos/Storable.hs2
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,