diff options
Diffstat (limited to 'src/Erebos')
| -rw-r--r-- | src/Erebos/Chatroom.hs | 7 | ||||
| -rw-r--r-- | src/Erebos/Conversation.hs | 14 | ||||
| -rw-r--r-- | src/Erebos/Conversation/Class.hs | 15 | ||||
| -rw-r--r-- | src/Erebos/DirectMessage.hs | 8 |
4 files changed, 38 insertions, 6 deletions
diff --git a/src/Erebos/Chatroom.hs b/src/Erebos/Chatroom.hs index f9bf545..bdb101f 100644 --- a/src/Erebos/Chatroom.hs +++ b/src/Erebos/Chatroom.hs @@ -50,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 @@ -61,6 +62,12 @@ import Erebos.Storage.Merge import Erebos.Util +instance ConversationType ChatroomState ChatMessage where + convMessageFrom = cmsgFrom + convMessageTime = cmsgTime + convMessageText = cmsgText + + data ChatroomData = ChatroomData { rdPrev :: [Stored (Signed ChatroomData)] , rdName :: Maybe Text diff --git a/src/Erebos/Conversation.hs b/src/Erebos/Conversation.hs index 2d007c9..ff8396c 100644 --- a/src/Erebos/Conversation.hs +++ b/src/Erebos/Conversation.hs @@ -33,6 +33,7 @@ import Data.Time.Format import Data.Time.LocalTime import Erebos.Chatroom +import Erebos.Conversation.Class import Erebos.DirectMessage import Erebos.Identity import Erebos.State @@ -42,17 +43,18 @@ import Erebos.Storable data Message = DirectMessageMessage DirectMessage Bool | ChatroomMessage ChatMessage Bool +withMessage :: (forall conv msg. ConversationType conv msg => msg -> a) -> Message -> a +withMessage f (DirectMessageMessage msg _) = f msg +withMessage f (ChatroomMessage msg _) = f msg + messageFrom :: Message -> ComposedIdentity -messageFrom (DirectMessageMessage msg _) = msgFrom msg -messageFrom (ChatroomMessage msg _) = cmsgFrom msg +messageFrom = withMessage convMessageFrom messageTime :: Message -> ZonedTime -messageTime (DirectMessageMessage msg _) = msgTime msg -messageTime (ChatroomMessage msg _) = cmsgTime msg +messageTime = withMessage convMessageTime messageText :: Message -> Maybe Text -messageText (DirectMessageMessage msg _) = Just $ msgText msg -messageText (ChatroomMessage msg _) = cmsgText msg +messageText = withMessage convMessageText messageUnread :: Message -> Bool messageUnread (DirectMessageMessage _ unread) = unread diff --git a/src/Erebos/Conversation/Class.hs b/src/Erebos/Conversation/Class.hs new file mode 100644 index 0000000..909dac6 --- /dev/null +++ b/src/Erebos/Conversation/Class.hs @@ -0,0 +1,15 @@ +module Erebos.Conversation.Class ( + ConversationType(..), +) where + +import Data.Text (Text) +import Data.Time.LocalTime +import Data.Typeable + +import Erebos.Identity + + +class (Typeable conv, Typeable msg) => ConversationType conv msg | conv -> msg, msg -> conv where + convMessageFrom :: msg -> ComposedIdentity + convMessageTime :: msg -> ZonedTime + convMessageText :: msg -> Maybe Text diff --git a/src/Erebos/DirectMessage.hs b/src/Erebos/DirectMessage.hs index f518b57..2558abb 100644 --- a/src/Erebos/DirectMessage.hs +++ b/src/Erebos/DirectMessage.hs @@ -32,6 +32,7 @@ import Data.Text qualified as T import Data.Time.Format import Data.Time.LocalTime +import Erebos.Conversation.Class import Erebos.Discovery import Erebos.Identity import Erebos.Network @@ -42,6 +43,13 @@ import Erebos.Storable import Erebos.Storage.Head import Erebos.Storage.Merge + +instance ConversationType DirectMessageThread DirectMessage where + convMessageFrom = msgFrom + convMessageTime = msgTime + convMessageText = Just . msgText + + data DirectMessage = DirectMessage { msgFrom :: ComposedIdentity , msgPrev :: [ Stored DirectMessage ] |