{-# LANGUAGE RecordWildCards #-}
module BB8.Config where
import qualified Data.Ini.Config as Ini
import qualified Data.Text.IO as Text
import qualified System.Directory as Sys
import System.FilePath ((</>))
import qualified System.Exit as Sys
import qualified BB8.Common as BB8
import qualified BB8.Types as Types
defaultConfig :: Types.Config
defaultConfig = Types.Config
{ Types.configSleepAmount = 30
, Types.configDBPath = "safeware.db"
, Types.configWorkDirectory = "bb8-work"
}
fileSpec :: Ini.IniParser Types.Config
fileSpec = Ini.section "bb8" $ do
configSleepAmount <- Ini.fieldDefOf "sleep amount" Ini.number 30
configDBPath <- Ini.fieldDefOf "DB path" Ini.string "safeware.db"
configWorkDirectory <- Ini.fieldDefOf "work directory" Ini.string "bb8-work"
return Types.Config { .. }
-- this is always going to look in the current directory for the
-- config file, and if it doesn't find it, it will use a default. It
-- will exit the program with an informative error if there's a
-- problem parsing the config file, though.
getConfig :: IO Types.Config
getConfig = do
exists <- Sys.doesFileExist "config.ini"
if not exists
then do
BB8.debug "No config file found in cwd; using default values"
return defaultConfig
else do
cwd <- Sys.getCurrentDirectory
BB8.debug ("Reading config file from " ++ show (cwd </> "config.ini"))
t <- Text.readFile "config.ini"
case Ini.parseIniFile t fileSpec of
Left err -> Sys.die err
Right x -> return x