packages feed

WL500gPControl-0.3.1: 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)

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