module Main where import qualified Network.Asus.WL500gP as W import System.Environment (getArgs) import Text.Printf (printf) import Common import Data.Either (either) import Data.List (delete) data Status = StatusConnected | StatusDisconnected | StatusError String deriving Eq fromConnStatus :: W.ConnectionStatus -> Status fromConnStatus W.Connected = StatusConnected fromConnStatus W.Disconnected = StatusDisconnected main :: IO () main = do args <- getArgs -- '-c' - for colorized output let (outString, ol) = if "-c" `elem` args then (printStatus True, delete "-c" args) else (printStatus False, args) -- config file name should be the last argument configFile = if null ol then Nothing else Just $ head (reverse args) cfile <- toCredsFile configFile let configError = outString (StatusError $ printf "Failed to open file %s " cfile) let getStatus conn = either (outString . StatusError) (outString . fromConnStatus . W.connectionStatus) =<< W.withConnection conn W.readStatus maybe configError getStatus =<< parseCredsFile configFile printStatus c StatusConnected = format c "#00ff00" "Connected" printStatus c StatusDisconnected = format c "#ff0000" "Disconnected" printStatus c (StatusError e) = format c "#dddddd" (if c then "N/A" else e) format True col s = printf "%s" col s format _ _ s = printf s