module Rakka.Environment ( Environment(..) , setupEnv , getSiteName , getSiteNameA , getBaseURI , getBaseURIA ) where import Control.Arrow.ArrowIO import qualified Data.ByteString.Char8 as C8 import Data.Maybe import Network import qualified Network.HTTP.Lucu.Config as LC import Network.URI import Rakka.Storage data Environment = Environment { envLocalStateDir :: FilePath , envLucuConf :: LC.Config , envStorage :: Storage } setupEnv :: FilePath -> PortNumber -> IO Environment setupEnv lsdir portNum = do let lucuConf = LC.defaultConfig { LC.cnfServerPort = PortNumber portNum } storage <- mkStorage -- FIXME return $ Environment { envLocalStateDir = lsdir , envLucuConf = lucuConf , envStorage = storage } getSiteName :: Environment -> IO String getSiteName env = return "Rakka" -- FIXME getSiteNameA :: ArrowIO a => Environment -> a b String getSiteNameA = arrIO0 . getSiteName getBaseURI :: Environment -> IO URI getBaseURI env = do let conf = envLucuConf env host = C8.unpack $ LC.cnfServerHost conf port = case LC.cnfServerPort conf of PortNumber num -> fromIntegral num defaultURI = "http://" ++ host ++ (if port == 80 then "" else ':' : show port) ++ "/" return $ fromJust $ parseURI defaultURI -- FIXME getBaseURIA :: ArrowIO a => Environment -> a b URI getBaseURIA = arrIO0 . getBaseURI