X-Git-Url: https://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Rakka%2FEnvironment.hs;h=367b67365b896d03a2053bcf4ec20ce6f7ce9ca4;hb=9f49e3384f1925d295355e5f60e94a8ca95039ea;hp=e52f4efabe4883fe7f05d6506e3cee2a10a9b23e;hpb=ace1b98b247b32e719a72a04fafe9fbffc1c49b0;p=Rakka.git diff --git a/Rakka/Environment.hs b/Rakka/Environment.hs index e52f4ef..367b673 100644 --- a/Rakka/Environment.hs +++ b/Rakka/Environment.hs @@ -5,22 +5,32 @@ module Rakka.Environment ) where -import Data.Map (Map) +import Control.Arrow +import Control.Arrow.ArrowList import qualified Data.Map as M import Network import qualified Network.HTTP.Lucu.Config as LC +import Rakka.Authorization +import Rakka.Page import Rakka.Storage import Rakka.SystemConfig +import Rakka.Wiki.Engine import Rakka.Wiki.Interpreter import qualified Rakka.Wiki.Interpreter.Base as Base import qualified Rakka.Wiki.Interpreter.Image as Image +import qualified Rakka.Wiki.Interpreter.PageList as PageList import qualified Rakka.Wiki.Interpreter.Trackback as Trackback import qualified Rakka.Wiki.Interpreter.Outline as Outline import Subversion.Repository import System.Directory import System.FilePath +import System.IO import System.Log.Logger +import Text.HyperEstraier +import Text.XML.HXT.Arrow.XmlIOStateArrow + +logger :: String logger = "Rakka.Environment" @@ -28,22 +38,19 @@ data Environment = Environment { envLocalStateDir :: !FilePath , envLucuConf :: !LC.Config , envRepository :: !Repository - , envStorage :: !Storage , envSysConf :: !SystemConfig + , envStorage :: !Storage , envInterpTable :: !InterpTable + , envAuthDB :: !AuthDB } -type InterpTable = Map String Interpreter - - setupEnv :: FilePath -> PortNumber -> IO Environment setupEnv lsdir portNum = do let lucuConf = LC.defaultConfig { LC.cnfServerPort = PortNumber portNum } - reposPath = lsdir `combine` "repos" - storage = mkStorage + reposPath = lsdir "repos" interpTable = mkInterpTable reposExist <- doesDirectoryExist reposPath @@ -54,22 +61,37 @@ setupEnv lsdir portNum do noticeM logger ("Creating a subversion repository on " ++ reposPath) createRepository reposPath [] [] sysConf <- mkSystemConfig lucuConf repos - + storage <- mkStorage lsdir repos (makeDraft' interpTable) + authDB <- mkAuthDB lsdir return $ Environment { envLocalStateDir = lsdir , envLucuConf = lucuConf , envRepository = repos - , envStorage = storage , envSysConf = sysConf + , envStorage = storage , envInterpTable = interpTable + , envAuthDB = authDB } + where + makeDraft' :: InterpTable -> Page -> IO Document + makeDraft' interpTable page + = do [doc] <- runX ( setErrorMsgHandler False fail + >>> + constA page + >>> + xmlizePage + >>> + makeDraft interpTable + ) + return doc mkInterpTable :: InterpTable mkInterpTable = listToTable $ foldl (++) [] [ Base.interpreters , Image.interpreters + , PageList.interpreters , Trackback.interpreters , Outline.interpreters ]