From aafc45eb5eed3839a5210a7d48928d975df6a296 Mon Sep 17 00:00:00 2001 From: Joris Guyonvarch Date: Sat, 11 Apr 2015 20:38:08 +0200 Subject: Handle a configuration file to save the url --- src/Config.hs | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 src/Config.hs (limited to 'src/Config.hs') diff --git a/src/Config.hs b/src/Config.hs new file mode 100644 index 0000000..c09f69e --- /dev/null +++ b/src/Config.hs @@ -0,0 +1,72 @@ +{-# LANGUAGE OverloadedStrings #-} + +module Config + ( configUsage + , Config(..) + , getConfig + ) where + +import Data.Maybe (catMaybes) +import Data.Map (Map) +import qualified Data.Map as M +import Data.Text (Text) +import qualified Data.Text as T +import qualified Data.Text.IO as T + +import Control.Monad (guard) + +import System.Directory (doesFileExist) + +import Model.URL + +configUsage :: Text +configUsage = + T.intercalate + "\n" + [ T.concat + [ "Please provide an url for leboncoin in the file named: " + , T.pack configPath + ] + , "url = http://…" + ] + +configPath :: FilePath +configPath = "conf" + +data Config = Config + { url :: URL + } deriving (Eq, Read, Show) + +getConfig :: IO (Maybe Config) +getConfig = do + exists <- doesFileExist configPath + if exists + then + configFromFile <$> T.readFile configPath + else + return Nothing + +configFromFile :: Text -> Maybe Config +configFromFile = + configFromMap + . M.fromList + . catMaybes + . map lineConfig + . filter (not . T.null) + . map T.strip + . T.lines + +configFromMap :: Map Text Text -> Maybe Config +configFromMap map = do + url <- M.lookup "url" map + return $ Config { url = url } + +lineConfig :: Text -> Maybe (Text, Text) +lineConfig line = do + (key, value) <- twoElementsList (map T.strip . T.splitOn "=" $ line) + guard (T.length key > 0) + return (key, value) + +twoElementsList :: [a] -> Maybe (a, a) +twoElementsList [x, y] = Just (x, y) +twoElementsLisst _ = Nothing -- cgit v1.2.3