packages feed

GrowlNotify-0.3: growlnotify.hs

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)