module Hi3Status.Blocks.Ethernet
( EthernetBlock (..)
) where
import Hi3Status.Block
import Hi3Status.Block.Util
import qualified Data.Text as T
import Control.Monad.IO.Class
import System.Process
data EthernetBlock = EthernetBlock {
connectedFormat :: String,
disconnectedFormat :: String,
connectedColor :: Maybe String,
disconnectedColor :: Maybe String,
device :: String
}
instance Block EthernetBlock where
runBlock b = periodic 5000000 $ do
os <- operstate (device b)
let (c,text) =
if os
then (connectedColor b, formatText [] (connectedFormat b))
else (disconnectedColor b, formatText [] (disconnectedFormat b))
pushBlockDescription $ emptyBlockDescription { full_text = text, color = T.pack <$> c}
operstate :: String -> BlockM Bool
operstate dev = do
os <- liftIO $ filter (/='\n') <$> readProcess "cat" ["/sys/class/net/"++dev++"/operstate"] ""
return (os == "up")