diff options
| author | Roman Smrž <roman.smrz@seznam.cz> | 2026-06-23 21:43:56 +0200 |
|---|---|---|
| committer | Roman Smrž <roman.smrz@seznam.cz> | 2026-06-24 22:10:58 +0200 |
| commit | e5d8ca9c124c4f8805bba9212845f0e21de5d9fc (patch) | |
| tree | ddd83d83591d5cd4f23c593095f101f48a6581ae | |
| parent | 32d93542af615cd5d7853916623b5c39c54abd1e (diff) | |
Format chatroom messages with Conversation module
| -rw-r--r-- | main/Main.hs | 8 | ||||
| -rw-r--r-- | src/Erebos/Chatroom.hs | 5 | ||||
| -rw-r--r-- | src/Erebos/Conversation.hs | 12 | ||||
| -rw-r--r-- | src/Erebos/Conversation/Class.hs | 8 |
4 files changed, 22 insertions, 11 deletions
diff --git a/main/Main.hs b/main/Main.hs index 5496315..4d1c5d6 100644 --- a/main/Main.hs +++ b/main/Main.hs @@ -24,7 +24,6 @@ import Data.Text (Text) import Data.Text qualified as T import Data.Text.Encoding qualified as T import Data.Text.IO qualified as T -import Data.Time.Format import Data.Time.LocalTime import Data.Typeable @@ -985,12 +984,7 @@ watchChatroomsForCli tui eprint h chatroomSetVar contextVar contextOptsVar autoS when (not tui || isSelected) $ do tzone <- getCurrentTimeZone forM_ (reverse $ getMessagesSinceState rstate oldroom) $ \msg -> do - eprint $ plainText $ T.concat - [ T.pack $ formatTime defaultTimeLocale "[%H:%M] " $ utcToLocalTime tzone $ zonedTimeToUTC $ cmsgTime msg - , fromMaybe "<unnamed>" $ idName $ cmsgFrom msg - , if cmsgLeave msg then " left" else "" - , maybe (if cmsgLeave msg then "" else " joined") ((": " <>)) $ cmsgText msg - ] + eprint $ formatMessageLine tzone $ makeMessage False msg modifyMVar_ subscribedNumVar $ return . (if roomStateSubscribe rstate then (+ 1) else id) . (if roomStateSubscribe oldroom then subtract 1 else id) diff --git a/src/Erebos/Chatroom.hs b/src/Erebos/Chatroom.hs index fce8b1d..c535845 100644 --- a/src/Erebos/Chatroom.hs +++ b/src/Erebos/Chatroom.hs @@ -67,6 +67,11 @@ instance ConversationType ChatroomState ChatMessage where convMessageTime = cmsgTime convMessageText = cmsgText + convMessageExtra msg + | cmsgLeave msg = [ UserLeft ] + | Nothing <- cmsgText msg = [ UserJoined ] + | otherwise = [] + convReference = refDigest . storedRef . head . filterAncestors . concatMap storedRoots . roomStateData convMessageListSince mbSince cstate = ( 0, ) $ diff --git a/src/Erebos/Conversation.hs b/src/Erebos/Conversation.hs index 0e6690e..78774bd 100644 --- a/src/Erebos/Conversation.hs +++ b/src/Erebos/Conversation.hs @@ -74,11 +74,15 @@ formatMessage :: TimeZone -> Message -> String formatMessage tzone = T.unpack . renderPlainText . formatMessageFT tzone formatMessageFT :: TimeZone -> Message -> FormattedText -formatMessageFT tzone msg = mconcat - [ PlainText $ T.pack $ formatTime defaultTimeLocale "[%H:%M] " $ utcToLocalTime tzone $ zonedTimeToUTC $ messageTime msg - , maybe "<unnamed>" PlainText $ idName $ messageFrom msg - , maybe "" ((": " <>) . PlainText) $ messageText msg +formatMessageFT tzone msg = mconcat $ concat + [ [ PlainText $ T.pack $ formatTime defaultTimeLocale "[%H:%M] " $ utcToLocalTime tzone $ zonedTimeToUTC $ messageTime msg ] + , [ maybe "<unnamed>" PlainText $ idName $ messageFrom msg ] + , map formatExtra $ withMessage convMessageExtra msg + , [ maybe "" ((": " <>) . PlainText) $ messageText msg ] ] + where + formatExtra UserJoined = " " <> withStyle (setForegroundColor BrightMagenta noStyle) (plainText "joined") + formatExtra UserLeft = " " <> withStyle (setForegroundColor Magenta noStyle) (plainText "left") data Conversation diff --git a/src/Erebos/Conversation/Class.hs b/src/Erebos/Conversation/Class.hs index d7bac5d..7c3652d 100644 --- a/src/Erebos/Conversation/Class.hs +++ b/src/Erebos/Conversation/Class.hs @@ -1,5 +1,6 @@ module Erebos.Conversation.Class ( ConversationType(..), + MessageExtra(..), RefDigest, ) where @@ -15,10 +16,17 @@ import Erebos.Object import Erebos.State +data MessageExtra + = UserJoined + | UserLeft + + class (Typeable conv, Typeable msg) => ConversationType conv msg | conv -> msg, msg -> conv where convMessageFrom :: msg -> ComposedIdentity convMessageTime :: msg -> ZonedTime convMessageText :: msg -> Maybe Text + convMessageExtra :: msg -> [ MessageExtra ] + convMessageExtra _ = [] convReference :: conv -> RefDigest convMessageListSince |