glirc-2.21: src/Client/View/ChannelInfo.hs
{-# Language OverloadedStrings #-}
{-# Language BangPatterns #-}
{-|
Module : Client.View.ChannelInfo
Description : Channel information renderer
Copyright : (c) Eric Mertens, 2016
License : ISC
Maintainer : emertens@gmail.com
This module implements a renderer for the window that shows
channel metadata.
-}
module Client.View.ChannelInfo
( channelInfoImages
) where
import Client.Image.Message
import Client.Image.MircFormatting
import Client.Image.PackedImage (unpackImage)
import Client.Image.Palette
import Client.State
import Client.State.Channel
import Client.State.Network
import Control.Lens
import Data.HashSet (HashSet)
import Data.Text (Text)
import Data.Time
import Graphics.Vty.Attributes
import Graphics.Vty.Image
import Irc.Identifier
-- | Render the lines used in a channel mask list
channelInfoImages ::
Text {- ^ network -} ->
Identifier {- ^ channel -} ->
ClientState -> [Image]
channelInfoImages network channelId st
| Just cs <- preview (clientConnection network) st
, Just channel <- preview (csChannels . ix channelId) cs
= channelInfoImages' pal (clientHighlights cs st) channel
| otherwise = [text' (view palError pal) "No channel information"]
where
pal = clientPalette st
channelInfoImages' :: Palette -> HashSet Identifier -> ChannelState -> [Image]
channelInfoImages' pal myNicks !channel
= topicLine
: provenanceLines
++ creationLines
++ urlLines
where
label = text' (view palLabel pal)
topicLine = label "Topic: " <|>
unpackImage (parseIrcText (view chanTopic channel))
utcTimeImage = string defAttr . formatTime defaultTimeLocale "%F %T"
provenanceLines =
case view chanTopicProvenance channel of
Nothing -> []
Just !prov ->
[ label "Topic set by: " <|>
unpackImage
(coloredUserInfo
pal DetailedRender myNicks (view topicAuthor prov))
, label "Topic set on: " <|> utcTimeImage (view topicTime prov)
]
creationLines =
case view chanCreation channel of
Nothing -> []
Just time -> [label "Created on: " <|> utcTimeImage time]
urlLines =
case view chanUrl channel of
Nothing -> []
Just url -> [ label "Channel URL: " <|> unpackImage (parseIrcText url) ]