module Imm.Boot where
import Imm.Core
import Imm.Types
import qualified Config.Dyre as D
import Config.Dyre.Paths
import Data.Foldable
import System.Console.CmdArgs
import System.IO
cliOptions :: CliOptions
cliOptions = CliOptions {
mParameter = def &= help "option description" &= explicit &= name "p" &= name "parameter" &= typ "type of the argument",
mMasterBinary = def &= name "dyre-master-binary" &= explicit
}
getOptions :: IO CliOptions
getOptions = cmdArgs $ cliOptions
&= verbosityArgs [explicit, name "Verbose", name "v"] []
&= versionArg [ignore]
&= help "Fetch and send items from RSS/Atom feeds to a custom mail address."
&= helpArg [explicit, name "help", name "h"]
&= program "imm"
printDyrePaths :: IO ()
printDyrePaths = getPaths (dyreParameters []) >>= \(a, b, c, d, e) -> (putStrLn . unlines) [
"Current binary: " ++ a,
"Custom binary: " ++ b,
"Config file: " ++ c,
"Cache directory: " ++ d,
"Lib directory: " ++ e, []]
dyreParameters :: [FeedGroup] -> D.Params (Settings, CliOptions)
dyreParameters feedGroups = D.defaultParams {
D.projectName = "imm",
D.showError = showError,
D.realMain = realMain feedGroups,
D.ghcOpts = ["-threaded"],
D.statusOut = hPutStrLn stderr
}
showError :: (Settings, a) -> String -> (Settings, a)
showError (settings, x) message = (settings { mError = Just message }, x)
imm :: [FeedGroup] -> Settings -> IO ()
imm feedGroups settings = do
forM_ (mError settings) putStrLn
whenLoud printDyrePaths
options <- getOptions
D.wrapMain (dyreParameters feedGroups) (settings, options)