summaryrefslogtreecommitdiff
path: root/src/Erebos/Chatroom.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Erebos/Chatroom.hs')
-rw-r--r--src/Erebos/Chatroom.hs22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/Erebos/Chatroom.hs b/src/Erebos/Chatroom.hs
index 74456ff..5a86b23 100644
--- a/src/Erebos/Chatroom.hs
+++ b/src/Erebos/Chatroom.hs
@@ -17,6 +17,7 @@ module Erebos.Chatroom (
joinChatroomAs, joinChatroomAsByStateData,
leaveChatroom, leaveChatroomByStateData,
getMessagesSinceState,
+ isSameChatroom,
ChatroomSetChange(..),
watchChatrooms,
@@ -49,6 +50,7 @@ import Data.Set qualified as S
import Data.Text (Text)
import Data.Time
+import Erebos.Conversation.Class
import Erebos.Identity
import Erebos.PubKey
import Erebos.Service
@@ -60,6 +62,15 @@ import Erebos.Storage.Merge
import Erebos.Util
+instance ConversationType ChatroomState ChatMessage where
+ convMessageFrom = cmsgFrom
+ convMessageTime = cmsgTime
+ convMessageText = cmsgText
+
+ convMessageListSince mbSince cstate =
+ map (, False) $ threadToListSince (maybe [] roomStateMessageData mbSince) (roomStateMessageData cstate)
+
+
data ChatroomData = ChatroomData
{ rdPrev :: [Stored (Signed ChatroomData)]
, rdName :: Maybe Text
@@ -294,8 +305,7 @@ createChatroom rdName rdDescription = do
}
updateLocalState $ updateSharedState $ \rooms -> do
- st <- getStorage
- (, cstate) <$> storeSetAdd st cstate rooms
+ (, cstate) <$> storeSetAdd cstate rooms
findAndUpdateChatroomState
:: (MonadStorage m, MonadHead LocalState m)
@@ -309,8 +319,7 @@ findAndUpdateChatroomState f = do
upd <- act
if roomStateData orig /= roomStateData upd
then do
- st <- getStorage
- roomSet' <- storeSetAdd st upd roomSet
+ roomSet' <- storeSetAdd upd roomSet
return (roomSet', Just upd)
else do
return (roomSet, Just upd)
@@ -422,6 +431,11 @@ leaveChatroomByStateData lookupData = sendRawChatroomMessageByStateData lookupDa
getMessagesSinceState :: ChatroomState -> ChatroomState -> [ChatMessage]
getMessagesSinceState cur old = threadToListSince (roomStateMessageData old) (roomStateMessageData cur)
+isSameChatroom :: ChatroomState -> ChatroomState -> Bool
+isSameChatroom rstate rstate' =
+ let roots = filterAncestors . concatMap storedRoots . roomStateData
+ in intersectsSorted (roots rstate) (roots rstate')
+
data ChatroomSetChange = AddedChatroom ChatroomState
| RemovedChatroom ChatroomState