import Network.GrowlNotify
import System (getArgs)
import System.Console.GetOpt
import Data.Maybe ( fromMaybe )
main = do
args <- getArgs
(opts, message) <- growlOpts args
let Options { optSticky = sticky
, optName = name
, optNotification = notification
, optTitle = title
, optServer = server
, optPassword = password } = opts
let b = registrationPacket name [notification]
let m = addMD5Sum password b
let b2 = notificationPacket sticky name notification title (unwords message)
let m2 = addMD5Sum password b2
sendMessage server m
sendMessage server m2
data Options = Options { optSticky :: Bool
, optNotification :: String
, optName :: String
, optTitle :: String
, optServer :: String
, optPassword :: String
}
startOptions :: Options
startOptions = Options { optSticky = False
, optNotification = "Cmdline Growl Notification"
, optName = "growlnotify"
, optTitle = "Network Notification"
, optServer = "127.0.0.1"
, optPassword = ""
}
options :: [OptDescr (Options -> IO Options)]
options =
[ Option ['k'] ["sticky"] (NoArg (\opt -> return opt {optSticky=True}) ) "sticky message"
, Option ['n'] ["programname"] (ReqArg (\arg opt -> return opt {optName=arg}) "NAME") "program registration NAME"
, Option ['s'] ["server"] (ReqArg (\arg opt -> return opt {optServer=arg}) "SERVER") "growl SERVER"
, Option ['p'] ["password"] (ReqArg (\arg opt -> return opt {optPassword=arg}) "PASSWORD") "growl PASSWORD"
, Option ['N'] ["notification"] (ReqArg (\arg opt -> return opt {optNotification=arg}) "NOTIFICATION") "NOTIFICATION"
, Option ['t'] ["title"] (ReqArg (\arg opt -> return opt {optTitle=arg}) "TITLE") "message TITLE"
]
growlOpts :: [String] -> IO (Options, [String])
growlOpts argv = do
-- Parse options, getting a list of option actions
let (actions, nonOptions, errors) = getOpt RequireOrder options argv
-- Here we thread startOptions through all supplied option actions
opts <- foldl (>>=) (return startOptions) actions
return (opts, nonOptions)