import GHC.Conc (unsafeIOToSTM)
import Network
import qualified Network.HTTP.Lucu.Config as LC
+import Network.HTTP.Lucu.Utils
import Network.URI
+import Rakka.Page
import Rakka.Utils
import Subversion.FileSystem
import Subversion.FileSystem.Revision
| BaseURI URI
| DefaultPage String
| StyleSheet String
+ | Languages (Map LanguageTag LanguageName)
deriving (Eq, Show)
fromConfPath = combine "/config"
+marshalStringPairs :: [(String, String)] -> String
+marshalStringPairs = joinWith "\n" . map marshalPair'
+ where
+ marshalPair' :: (String, String) -> String
+ marshalPair' (a, b) = a ++ " " ++ b
+
+
+unmarshalStringPairs :: String -> [(String, String)]
+unmarshalStringPairs = catMaybes . map unmarshalPair' . lines
+ where
+ unmarshalPair' :: String -> Maybe (String, String)
+ unmarshalPair' s = case break (/= ' ') s of
+ (a, ' ':b) -> Just (a, b)
+ _ -> Nothing
+
+
{- paths -}
sysConfPath :: SysConfValue -> FilePath
sysConfPath (SiteName _) = "siteName"
sysConfPath (BaseURI _) = "baseURI"
sysConfPath (DefaultPage _) = "defaultPage"
sysConfPath (StyleSheet _) = "styleSheet"
+sysConfPath (Languages _) = "languages"
{- marshalling -}
marshalSysConf :: SysConfValue -> String
-marshalSysConf (SiteName name) = name
-marshalSysConf (BaseURI uri ) = uriToString id uri ""
-marshalSysConf (DefaultPage name) = name
-marshalSysConf (StyleSheet name) = name
+marshalSysConf (SiteName name ) = name
+marshalSysConf (BaseURI uri ) = uriToString id uri ""
+marshalSysConf (DefaultPage name ) = name
+marshalSysConf (StyleSheet name ) = name
+marshalSysConf (Languages langs) = marshalStringPairs (M.toList langs)
{- unmarshalling -}
unmarshalSysConf :: SysConfValue -> String -> SysConfValue
-unmarshalSysConf (SiteName _) name = SiteName name
-unmarshalSysConf (BaseURI _) uri = BaseURI $ fromJust $ parseURI uri
-unmarshalSysConf (DefaultPage _) name = DefaultPage name
-unmarshalSysConf (StyleSheet _) name = StyleSheet name
+unmarshalSysConf (SiteName _) name = SiteName name
+unmarshalSysConf (BaseURI _) uri = BaseURI $ fromJust $ parseURI uri
+unmarshalSysConf (DefaultPage _) name = DefaultPage name
+unmarshalSysConf (StyleSheet _) name = StyleSheet name
+unmarshalSysConf (Languages _) langs = Languages $ M.fromList $ unmarshalStringPairs langs
{- getting default value -}
sysConfDefault _ (StyleSheet _)
= return $ StyleSheet "StyleSheet/Default"
+
+sysConfDefault _ (Languages _)
+ = return
+ $ Languages
+ $ M.fromList [ ("en", "English" )
+ , ("es", "Español" )
+ , ("de", "Deutsch" )
+ , ("fi", "Suomi" )
+ , ("fr", "Français" )
+ , ("ga", "Gaeilge" )
+ , ("gd", "Gàidhlig" )
+ , ("ja", "日本語" )
+ , ("pt", "Português")
+ , ("sv", "Svenska" )
+ ]
+