diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2026-06-02 21:10:39 +0200 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2026-06-02 21:10:39 +0200 |
| commit | cb71b9c56754abe739b889aeb9fd8bf80097c661 (patch) | |
| tree | d9d1dad0620c819aeb2dca7d1586d12d87c2ab30 /src/Erebos | |
| parent | b2319c8084d34edb85e0fee4ca7edcdee0c8aeed (diff) | |
Command to mark messages as seen
Changelog: Added `/seen` command to mark messages as seen.
Diffstat (limited to 'src/Erebos')
| -rw-r--r-- | src/Erebos/Chatroom.hs | 2 | ||||
| -rw-r--r-- | src/Erebos/Conversation.hs | 4 | ||||
| -rw-r--r-- | src/Erebos/Conversation/Class.hs | 6 | ||||
| -rw-r--r-- | src/Erebos/DirectMessage.hs | 2 |
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 |