X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Rakka%2FSystemConfig.hs;h=ecf608df873232944880dbc0b518d6644cbebf46;hb=f1016753ef45a4c25745ccb6e81e5acbc085cc42;hp=67603862d60b00fcfe7692f56a3f48b743ec3036;hpb=fa3a9d0aecede2431e669ef33885a116f7d5f0be;p=Rakka.git diff --git a/Rakka/SystemConfig.hs b/Rakka/SystemConfig.hs index 6760386..ecf608d 100644 --- a/Rakka/SystemConfig.hs +++ b/Rakka/SystemConfig.hs @@ -12,17 +12,21 @@ module Rakka.SystemConfig , DefaultPage(..) , StyleSheet(..) , Languages(..) + , GlobalLock(..) + + , serializeStringPairs + , deserializeStringPairs ) where +import Codec.Binary.UTF8.String import Control.Arrow.ArrowIO import Control.Concurrent.STM import Control.Monad import Control.Monad.Trans import qualified Data.ByteString.Char8 as C8 +import qualified Data.ByteString.Lazy as L import Data.Dynamic -import Data.Encoding -import Data.Encoding.UTF8 import Data.Map (Map) import qualified Data.Map as M import Data.Maybe @@ -30,7 +34,7 @@ import GHC.Conc (unsafeIOToSTM) import Network import qualified Network.HTTP.Lucu.Config as LC import Network.HTTP.Lucu.Utils -import Network.URI +import Network.URI hiding (path) import Rakka.Page import Rakka.Utils import Subversion.FileSystem @@ -40,6 +44,8 @@ import Subversion.Repository import System.FilePath.Posix import System.Log.Logger + +logger :: String logger = "Rakka.SystemConfig" @@ -92,7 +98,7 @@ getSysConf' sc case exists of True -> do str <- getFileContentsLBS path - return $ Just $ chomp $ decodeLazy UTF8 str + return $ Just $ chomp $ decode $ L.unpack str False -> return Nothing @@ -129,7 +135,7 @@ deserializeStringPairs :: String -> Maybe [(String, String)] deserializeStringPairs = sequence . map deserializePair' . lines where deserializePair' :: String -> Maybe (String, String) - deserializePair' s = case break (/= ' ') s of + deserializePair' s = case break (== ' ') s of (a, ' ':b) -> Just (a, b) _ -> Nothing @@ -160,8 +166,8 @@ instance SysConfValue BaseURI where = let conf = scLucuConf sc host = C8.unpack $ LC.cnfServerHost conf port = case LC.cnfServerPort conf of - PortNumber num -> fromIntegral num - + PortNumber num -> fromIntegral num :: Int + _ -> undefined defaultURI = "http://" ++ host ++ -- FIXME: consider IPv6 address (if port == 80 @@ -204,3 +210,15 @@ instance SysConfValue Languages where , ("pt", "Português") , ("sv", "Svenska" ) ] + + +newtype GlobalLock = GlobalLock Bool deriving (Show, Typeable) +instance SysConfValue GlobalLock where + confPath _ = "globalLock" + serialize (GlobalLock isLocked) + | isLocked = "*" + | otherwise = "" + deserialize "*" = Just (GlobalLock True) + deserialize "" = Just (GlobalLock False) + deserialize _ = Nothing + defaultValue _ = GlobalLock False