module Main where import qualified Network.Asus.WL500gP as W import System.Environment (getArgs) import Text.Printf (printf) import Common import Data.Either (either) 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 -- config file name should be the last argument let configFile = if null args then defaultCredsFile else head (reverse args) -- '-c' - for colorized output let outString = printStatus ("-c" `elem` args) let configError = outString (StatusError $ printf "Failed to open file %s " configFile) 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