packages feed

hs-twitterarchiver-0.1: Archiver/Options.hs

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