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 "<fc=%s>%s</fc>" col s
format _ _ s = printf s