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