summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Erebos/Chatroom.hs2
-rw-r--r--src/Erebos/Conversation.hs4
-rw-r--r--src/Erebos/Conversation/Class.hs6
-rw-r--r--src/Erebos/DirectMessage.hs2
4 files changed, 14 insertions, 0 deletions
diff --git a/src/Erebos/Chatroom.hs b/src/Erebos/Chatroom.hs
index aa5e3ee..fce8b1d 100644
--- a/src/Erebos/Chatroom.hs
+++ b/src/Erebos/Chatroom.hs
@@ -72,6 +72,8 @@ instance ConversationType ChatroomState ChatMessage where
convMessageListSince mbSince cstate = ( 0, ) $
map (, False) $ threadToListSince (maybe [] roomStateMessageData mbSince) (roomStateMessageData cstate)
+ convMarkAllSeen _ = return ()
+
data ChatroomData = ChatroomData
{ rdPrev :: [Stored (Signed ChatroomData)]
diff --git a/src/Erebos/Conversation.hs b/src/Erebos/Conversation.hs
index 1d72f41..472195c 100644
--- a/src/Erebos/Conversation.hs
+++ b/src/Erebos/Conversation.hs
@@ -26,6 +26,7 @@ module Erebos.Conversation (
sendMessage,
deleteConversation,
+ markAllSeen,
) where
import Control.Monad.Except
@@ -141,3 +142,6 @@ sendMessage (ChatroomConversation rstate) text = sendChatroomMessage rstate text
deleteConversation :: (MonadHead LocalState m, MonadError e m, FromErebosError e) => Conversation -> m ()
deleteConversation (DirectMessageConversation _) = throwOtherError "deleting direct message conversation is not supported"
deleteConversation (ChatroomConversation rstate) = deleteChatroomByStateData (head $ roomStateData rstate)
+
+markAllSeen :: (MonadHead LocalState m, MonadError e m, FromErebosError e) => Conversation -> m ()
+markAllSeen = withConversation convMarkAllSeen
diff --git a/src/Erebos/Conversation/Class.hs b/src/Erebos/Conversation/Class.hs
index 96a0e6a..d7bac5d 100644
--- a/src/Erebos/Conversation/Class.hs
+++ b/src/Erebos/Conversation/Class.hs
@@ -3,12 +3,16 @@ module Erebos.Conversation.Class (
RefDigest,
) where
+import Control.Monad.Except
+
import Data.Text (Text)
import Data.Time.LocalTime
import Data.Typeable
+import Erebos.Error
import Erebos.Identity
import Erebos.Object
+import Erebos.State
class (Typeable conv, Typeable msg) => ConversationType conv msg | conv -> msg, msg -> conv where
@@ -21,3 +25,5 @@ class (Typeable conv, Typeable msg) => ConversationType conv msg | conv -> msg,
:: Maybe conv -- ^ Original state to diff from
-> conv -- ^ Current state
-> ( Int, [ ( msg, Bool ) ] ) -- ^ Number of removed, list of added messages
+
+ convMarkAllSeen :: (MonadHead LocalState m, MonadError e m, FromErebosError e) => conv -> m ()
diff --git a/src/Erebos/DirectMessage.hs b/src/Erebos/DirectMessage.hs
index 62a25a2..2108587 100644
--- a/src/Erebos/DirectMessage.hs
+++ b/src/Erebos/DirectMessage.hs
@@ -58,6 +58,8 @@ instance ConversationType DirectMessageThread DirectMessage where
convMessageListSince Nothing thread = ( 0, ) $ dmThreadToListUnread thread
convMessageListSince (Just since) thread = dmThreadToListChange since thread
+ convMarkAllSeen DirectMessageThread {..} = dmMarkAsSeen msgPeer
+
data DirectMessage = DirectMessage
{ msgFrom :: ComposedIdentity