packages feed

WL500gPControl-0.3.4: src/Status/Main.hs

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