summaryrefslogtreecommitdiff
path: root/src/Erebos/Conversation.hs
diff options
context:
space:
mode:
authorRoman Smrž <roman.smrz@seznam.cz>2025-11-20 21:08:44 +0100
committerRoman Smrž <roman.smrz@seznam.cz>2025-11-20 21:08:44 +0100
commit223e10691606a8d1885887fd6bb7570e1318e063 (patch)
treeac8b7a380802f44229b49bab5cf3011acd2c69bc /src/Erebos/Conversation.hs
parente1765a3e39cfb0a1c1b53e38a6b1d36592566ef1 (diff)
Highlight new messages in conversation history
Diffstat (limited to 'src/Erebos/Conversation.hs')
-rw-r--r--src/Erebos/Conversation.hs20
1 files changed, 11 insertions, 9 deletions
diff --git a/src/Erebos/Conversation.hs b/src/Erebos/Conversation.hs
index ff8396c..2c6f967 100644
--- a/src/Erebos/Conversation.hs
+++ b/src/Erebos/Conversation.hs
@@ -40,12 +40,10 @@ import Erebos.State
import Erebos.Storable
-data Message = DirectMessageMessage DirectMessage Bool
- | ChatroomMessage ChatMessage Bool
+data Message = forall conv msg. ConversationType conv msg => Message msg Bool
withMessage :: (forall conv msg. ConversationType conv msg => msg -> a) -> Message -> a
-withMessage f (DirectMessageMessage msg _) = f msg
-withMessage f (ChatroomMessage msg _) = f msg
+withMessage f (Message msg _) = f msg
messageFrom :: Message -> ComposedIdentity
messageFrom = withMessage convMessageFrom
@@ -57,14 +55,15 @@ messageText :: Message -> Maybe Text
messageText = withMessage convMessageText
messageUnread :: Message -> Bool
-messageUnread (DirectMessageMessage _ unread) = unread
-messageUnread (ChatroomMessage _ unread) = unread
+messageUnread (Message _ unread) = unread
formatMessage :: TimeZone -> Message -> String
formatMessage tzone msg = concat
- [ formatTime defaultTimeLocale "[%H:%M] " $ utcToLocalTime tzone $ zonedTimeToUTC $ messageTime msg
+ [ if messageUnread msg then "\ESC[93m" else ""
+ , formatTime defaultTimeLocale "[%H:%M] " $ utcToLocalTime tzone $ zonedTimeToUTC $ messageTime msg
, maybe "<unnamed>" T.unpack $ idName $ messageFrom msg
, maybe "" ((": "<>) . T.unpack) $ messageText msg
+ , if messageUnread msg then "\ESC[0m" else ""
]
@@ -72,6 +71,10 @@ data Conversation
= DirectMessageConversation DirectMessageThread
| ChatroomConversation ChatroomState
+withConversation :: (forall conv msg. ConversationType conv msg => conv -> a) -> Conversation -> a
+withConversation f (DirectMessageConversation conv) = f conv
+withConversation f (ChatroomConversation conv) = f conv
+
isSameConversation :: Conversation -> Conversation -> Bool
isSameConversation (DirectMessageConversation t) (DirectMessageConversation t')
= sameIdentity (msgPeer t) (msgPeer t')
@@ -113,8 +116,7 @@ conversationPeer (DirectMessageConversation thread) = Just $ msgPeer thread
conversationPeer (ChatroomConversation _) = Nothing
conversationHistory :: Conversation -> [ Message ]
-conversationHistory (DirectMessageConversation thread) = map (\msg -> DirectMessageMessage msg False) $ dmThreadToList thread
-conversationHistory (ChatroomConversation rstate) = map (\msg -> ChatroomMessage msg False) $ roomStateMessages rstate
+conversationHistory = withConversation $ map (uncurry Message) . convMessageListSince Nothing
sendMessage :: (MonadHead LocalState m, MonadError e m, FromErebosError e) => Conversation -> Text -> m ()