irc-fun-client-0.5.0.0: src/Network/IRC/Fun/Client/Time.hs
{- This file is part of irc-fun-client.
-
- Written in 2015 by fr33domlover <fr33domlover@riseup.net>.
-
- ♡ Copying is an act of love. Please copy, reuse and share.
-
- The author(s) have dedicated all copyright and related and neighboring
- rights to this software to the public domain worldwide. This software is
- distributed without any warranty.
-
- You should have received a copy of the CC0 Public Domain Dedication along
- with this software. If not, see
- <http://creativecommons.org/publicdomain/zero/1.0/>.
-}
-- | Get the current UTC time and formatted time strings, using auto-update to
-- run the actual action periodically and by demand. In other words, these
-- functions can safely be used at high frequency.
--
-- Intended use: Create a single getter in the main thread and pass as needed
-- to other threads for their own use.
module Network.IRC.Fun.Client.Time
( currentTimeGetter
)
where
import Control.AutoUpdate
import Data.Text (Text, pack)
import Data.Time.Clock (UTCTime, getCurrentTime)
import Data.Time.Format (defaultTimeLocale, formatTime)
import Data.Time.Units (Second, toMicroseconds)
format :: UTCTime -> Text
format = pack . formatTime defaultTimeLocale "%F %T"
action :: IO (UTCTime, Text)
action = do
t <- getCurrentTime
return (t, format t)
settings :: UpdateSettings (UTCTime, Text)
settings = defaultUpdateSettings
{ updateFreq = fromInteger $ toMicroseconds (1 :: Second)
, updateAction = action
}
-- | Make a getter which returns the current time, and a formatted time string
-- for use in IRC logs.
currentTimeGetter :: IO (IO (UTCTime, Text))
currentTimeGetter = mkAutoUpdate settings