X-Git-Url: http://gitweb.michael.orlitzky.com/?a=blobdiff_plain;f=src%2FCommandLine.hs;h=45d43abe41dc5082d6edcf3b71267b32c18f4c43;hb=HEAD;hp=06c072e8715af292cb8a5d83ffa5ed0cd29b2aa4;hpb=f519b55ffe72acd791bdc91b16918603afce1995;p=dead%2Fhalcyon.git diff --git a/src/CommandLine.hs b/src/CommandLine.hs index 06c072e..45d43ab 100644 --- a/src/CommandLine.hs +++ b/src/CommandLine.hs @@ -1,150 +1,227 @@ module CommandLine ( - apply_args, - show_help - ) + get_args, + show_help ) where -import System.Console.CmdArgs -import System.Console.CmdArgs.Explicit (process) -import System.Environment (getArgs, withArgs) -import System.Exit (ExitCode(..), exitWith) -import System.IO (hPutStrLn, stderr) +import System.Console.CmdArgs ( + (&=), + args, + cmdArgs, + def, + details, + groupname, + help, + helpArg, + program, + summary, + typ, + typFile, + versionArg ) +import System.Environment ( withArgs ) -- Get the version from Cabal. -import Paths_halcyon (version) -import Data.Version (showVersion) +import Paths_halcyon ( version ) +import Data.Version ( showVersion ) -import ExitCodes -import OptionalConfiguration +import OptionalConfiguration ( OptionalCfg(..) ) + +-- | The description of the program, displayed as part of the help. +-- description :: String description = "Monitor a list of Twitter accounts and display or email any new tweets." + +-- | The name of this program. +-- program_name :: String program_name = "halcyon" + +-- | A summary string output as part of the help. +-- my_summary :: String my_summary = program_name ++ "-" ++ (showVersion version) + +-- | Help string for the \"access_secret\" option. +-- +access_secret_help :: String +access_secret_help = "Your Twitter API access secret" + + +-- | Help string for the \"access_token\" option +-- +access_token_help :: String +access_token_help = "Your Twitter API access token" + + +-- | Help string for the \"consumer_key\" option. +-- consumer_key_help :: String consumer_key_help = "Your Twitter API consumer key" + +-- | Help string for the \"consumer_secret\" option. +-- consumer_secret_help :: String consumer_secret_help = "Your Twitter API consumer secret" -access_token_help :: String -access_token_help = "Your Twitter API access token" - -access_secret_help :: String -access_secret_help = "Your Twitter API access secret" -heartbeat_help :: String -heartbeat_help = "How many seconds to wait between polling" +-- | A description of the \"daemonize\" option. +-- +daemonize_help :: String +daemonize_help = "Run as a daemon, in the background." -to_address_help :: String -to_address_help = "Send tweets to ADDRESS" +-- | Help string for the \"from_address\" option. +-- from_address_help :: String from_address_help = "Send tweets from ADDRESS" -sendmail_path_help :: String -sendmail_path_help = "Use PATH to send mail" +-- | Help string for the \"heartbeat\" option. +-- +heartbeat_help :: String +heartbeat_help = "How many seconds to wait between polling" + + +-- | Help string for the \"ignore_replies\" option. +-- ignore_replies_help :: String ignore_replies_help = "Ignore replies to other tweets" + +-- | Help string for the \"ignore_retweets\" option. +-- ignore_retweets_help :: String ignore_retweets_help = "Ignore retweets from other users" + +-- | A description of the "pidfile" option. +pidfile_help :: String +pidfile_help = + "Location to create PID file (daemon only)." + + +-- | A description of the "run_as_group" option. +run_as_group_help :: String +run_as_group_help = + "System group to run as (daemon only)." + + +-- | A description of the "run_as_user" option. +run_as_user_help :: String +run_as_user_help = + "System user to run under (daemon only)." + + +-- | Help string for the \"to_address\" option. +-- +to_address_help :: String +to_address_help = "Send tweets to ADDRESS" + + + +-- | Help string for the \"sendmail_path\" option. +-- +sendmail_path_help :: String +sendmail_path_help = "Use PATH to send mail" + + +-- | Help string for the \"verbose\" option. +-- verbose_help :: String verbose_help = "Be verbose about stuff" -arg_spec :: Mode (CmdArgs OptionalCfg) + +arg_spec :: OptionalCfg arg_spec = - cmdArgsMode $ - OptionalCfg { - consumer_key = - def &= typ "KEY" - &= groupname "Twitter API" - &= help consumer_key_help, - - consumer_secret = - def &= typ "SECRET" - &= groupname "Twitter API" - &= help consumer_secret_help, - - access_token = - def &= typ "TOKEN" - &= groupname "Twitter API" - &= help access_token_help, - - access_secret = - def &= typ "SECRET" - &= groupname "Twitter API" - &= help access_secret_help, - - heartbeat = - def &= groupname "Miscellaneous" - &= help heartbeat_help, - - ignore_replies = - def &= groupname "Miscellaneous" - &= help ignore_replies_help, - - ignore_retweets = - def &= groupname "Miscellaneous" - &= help ignore_retweets_help, - - verbose = - def &= groupname "Miscellaneous" - &= help verbose_help, - - sendmail_path = - def &= typ "PATH" - &= groupname "Mail Options" - &= help sendmail_path_help, - - from_address = - def &= typ "ADDRESS" - &= groupname "Mail Options" - &= help from_address_help, - - to_address = - def &= typ "ADDRESS" - &= groupname "Mail Options" - &= help to_address_help, - - usernames = - def &= args - &= typ "USERNAMES" } - - &= program program_name - &= summary my_summary - &= details [description] - &= helpArg [groupname "Common flags"] - &= versionArg [groupname "Common flags"] + OptionalCfg { -show_help :: IO OptionalCfg -show_help = withArgs ["--help"] parse_args >>= cmdArgsApply + access_secret = + def &= typ "SECRET" + &= groupname "Twitter API" + &= help access_secret_help, + + access_token = + def &= typ "TOKEN" + &= groupname "Twitter API" + &= help access_token_help, + consumer_key = + def &= typ "KEY" + &= groupname "Twitter API" + &= help consumer_key_help, + consumer_secret = + def &= typ "SECRET" + &= groupname "Twitter API" + &= help consumer_secret_help, -parse_args :: IO (CmdArgs OptionalCfg) -parse_args = do - x <- getArgs - let y = process arg_spec x - case y of - Right result -> return result - Left err -> do - hPutStrLn stderr err - exitWith (ExitFailure exit_args_parse_failed) + + daemonize = + def &= groupname "Miscellaneous" + &= help daemonize_help, + + from_address = + def &= typ "ADDRESS" + &= groupname "Mail Options" + &= help from_address_help, + + heartbeat = + def &= groupname "Miscellaneous" + &= help heartbeat_help, + + ignore_replies = + def &= groupname "Miscellaneous" + &= help ignore_replies_help, + + ignore_retweets = + def &= groupname "Miscellaneous" + &= help ignore_retweets_help, + + pidfile = + def &= typFile + &= help pidfile_help, + + run_as_group = + def &= typ "GROUP" + &= help run_as_group_help, + + run_as_user = + def &= typ "USER" + &= help run_as_user_help, + + sendmail_path = + def &= typ "PATH" + &= groupname "Mail Options" + &= help sendmail_path_help, + + to_address = + def &= typ "ADDRESS" + &= groupname "Mail Options" + &= help to_address_help, + + usernames = + def &= args + &= typ "USERNAMES", + + verbose = + def &= groupname "Miscellaneous" + &= help verbose_help } + + &= program program_name + &= summary my_summary + &= details [description] + &= helpArg [groupname "Common flags"] + &= versionArg [groupname "Common flags"] + + +show_help :: IO OptionalCfg +show_help = withArgs ["--help"] get_args --- | Really get the command-line arguments. This calls 'parse_args' --- first to replace the default "wrong number of arguments" error, --- and then runs 'cmdArgsApply' on the result to do what the --- 'cmdArgs' function usually does. -apply_args :: IO OptionalCfg -apply_args = - parse_args >>= cmdArgsApply +get_args :: IO OptionalCfg +get_args = cmdArgs arg_spec