{-# LANGUAGE ScopedTypeVariables #-}
module System.Taffybar.Widgets.PollingLabel ( pollingLabelNew,
pollingLabelNewWithTooltip) where
import Control.Concurrent ( forkIO, threadDelay )
import Control.Exception.Enclosed as E
import Control.Monad ( forever )
import Graphics.UI.Gtk
pollingLabelNew :: String
-> Double
-> IO String
-> IO Widget
pollingLabelNew initialString interval cmd = do
l <- labelNew (Nothing :: Maybe String)
labelSetMarkup l initialString
_ <- on l realize $ do
_ <- forkIO $ forever $ do
estr <- E.tryAny cmd
case estr of
Left _ -> return ()
Right str -> postGUIAsync $ labelSetMarkup l str
threadDelay $ floor (interval * 1000000)
return ()
return (toWidget l)
pollingLabelNewWithTooltip :: String
-> Double
-> IO (String, Maybe String)
-> IO Widget
pollingLabelNewWithTooltip initialString interval cmd = do
l <- labelNew (Nothing :: Maybe String)
labelSetMarkup l initialString
_ <- on l realize $ do
_ <- forkIO $ forever $ do
estr <- E.tryAny cmd
case estr of
Left _ -> return ()
Right (labelStr, tooltipStr) -> postGUIAsync $ do
labelSetMarkup l labelStr
widgetSetTooltipMarkup l tooltipStr
threadDelay $ floor (interval * 1000000)
return ()
return (toWidget l)