{-# LANGUAGE Arrows, TypeOperators, TypeFamilies #-}
module JuicyBar.Input.CPU (getCpu, cpuColor) where
import FRP.Grapefruit.Signal as Signal
import FRP.Grapefruit.Signal.Continuous as CSignal
import FRP.Grapefruit.Setup (Setup, fromIO)
import FRP.Grapefruit.Circuit as Circuit
import qualified Graphics.UI.Gtk as Gtk
import JuicyBar.GTKDock
import JuicyBar.FunctorStyle
import Control.Arrow as Arrow
import System.IO
import Control.Applicative
import Data.Record
import Data.Record.Signal

produceCpu :: IO Float
produceCpu = do
    h <- openFile "/proc/loadavg" ReadMode
    l <- hGetLine h
    hClose h
    return $ read $ head $ words l

getCpu :: Circuit era () (CSignal era Float)
getCpu = Signal.produce $ CSignal.producer produceCpu

cpuColor :: (Fractional a, Ord a) => a -> Gtk.Color
cpuColor c = if c < 0.3 then Gtk.Color 65535 65535 65535 else Gtk.Color 50000 0 0
