From 0c36f490719f613dc23b6632a4098bd17fb0ab7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Sat, 31 Jan 2026 17:48:55 +0100 Subject: Data structure for formatted text --- src/Erebos/Conversation.hs | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'src/Erebos/Conversation.hs') diff --git a/src/Erebos/Conversation.hs b/src/Erebos/Conversation.hs index 2c6f967..a48daf7 100644 --- a/src/Erebos/Conversation.hs +++ b/src/Erebos/Conversation.hs @@ -1,3 +1,5 @@ +{-# LANGUAGE OverloadedStrings #-} + module Erebos.Conversation ( Message, messageFrom, @@ -5,6 +7,7 @@ module Erebos.Conversation ( messageText, messageUnread, formatMessage, + formatMessageFT, Conversation, isSameConversation, @@ -38,6 +41,8 @@ import Erebos.DirectMessage import Erebos.Identity import Erebos.State import Erebos.Storable +import Erebos.TextFormat +import Erebos.TextFormat.Types data Message = forall conv msg. ConversationType conv msg => Message msg Bool @@ -58,13 +63,15 @@ messageUnread :: Message -> Bool messageUnread (Message _ unread) = unread formatMessage :: TimeZone -> Message -> String -formatMessage tzone msg = concat - [ if messageUnread msg then "\ESC[93m" else "" - , formatTime defaultTimeLocale "[%H:%M] " $ utcToLocalTime tzone $ zonedTimeToUTC $ messageTime msg - , maybe "" T.unpack $ idName $ messageFrom msg - , maybe "" ((": "<>) . T.unpack) $ messageText msg - , if messageUnread msg then "\ESC[0m" else "" - ] +formatMessage tzone = T.unpack . renderPlainText . formatMessageFT tzone + +formatMessageFT :: TimeZone -> Message -> FormattedText +formatMessageFT tzone msg = + (if messageUnread msg then FormattedText (CustomTextColor (Just BrightYellow) Nothing) else id) $ mconcat + [ PlainText $ T.pack $ formatTime defaultTimeLocale "[%H:%M] " $ utcToLocalTime tzone $ zonedTimeToUTC $ messageTime msg + , maybe "" PlainText $ idName $ messageFrom msg + , maybe "" ((": " <>) . PlainText) $ messageText msg + ] data Conversation -- cgit v1.2.3