module Archiver.Options where
import System.Console.GetOpt
import System.Environment
import System.IO
import System.Exit
data Settings = TS {
twitterUsername :: String,
twitterPassword :: Maybe String,
fileName :: String,
sinceId :: Maybe Integer } deriving Show
defaultSettings = TS {
twitterUsername = "vyom",
twitterPassword = Nothing,
fileName = "vyom.json",
sinceId = Nothing }
options = [ Option "h" ["help"]
(NoArg
(\_ -> do prg <- getProgName
hPutStrLn stderr (usageInfo prg options)
exitWith ExitSuccess))
"Show help"
, Option "u" ["username"]
(ReqArg
(\arg opt -> return opt { twitterUsername = arg })
"vyom")
"Twitter Username"
, Option "f" ["filename"]
(ReqArg
(\arg opt -> return opt { fileName = arg })
"vyom.json")
"Filename"
, Option "p" ["password"]
(NoArg
(\opt -> do putStr "Enter Twitter Password : "
hFlush stdout
hSetEcho stdout False
password <- hGetLine stdin
hSetEcho stdout True
putStr "\n"
return opt { twitterPassword = Just password }))
"ask for password (private Twitter stream)"
]
parseOptions = do args <- getArgs
-- Parse options, getting a list of option actions
let (actions, nonOptions, errors) = getOpt RequireOrder options args
-- Here we thread startOptions through all supplied option actions
foldl (>>=) (return defaultSettings) actions