about summary refs log blame commit diff
path: root/blog/Main.hs
blob: a50ca67ed17d7a1b8bb2dfaf9219ed2c8d73f98e (plain) (tree)
1
2
3
4
5
6
7
8

                 
                                                                  
                                                       
                          
                                                           
                        
 


                                                                
 

            

                                

                    







                                                      


                                                   


                                                              

                                                                                  
                                      
                                                                  
 
 
module Main where

import           Control.Applicative          (pure, (<$>), (<*>))
import           Control.Exception            (bracket)
import           Data.Acid
import           Data.Acid.Local (createCheckpointAndClose)
import           Options

import           BlogDB                       (initialBlogState)
import           Locales                      (version)
import           Server

{- Server -}

data MainOptions = MainOptions {
  optState :: String,
  optPort  :: Int,
  optRes   :: String
}

instance Options MainOptions where
  defineOptions = pure MainOptions
    <*> simpleOption "statedir" "/var/tazblog/"
        "Directory in which the BlogState is located."
    <*> simpleOption "port" 8000
        "Port to run on. Default is 8000."
    <*> simpleOption "res" "/usr/share/tazblog/res"
        "Resources folder location."
        
main :: IO()
main = do
    putStrLn ("TazBlog " ++ version ++ " in Haskell starting")
    runCommand $ \opts args ->
      bracket (openLocalStateFrom (optState opts ++ "BlogState") initialBlogState)
              createCheckpointAndClose
              (\acid -> runBlog acid (optPort opts) (optRes opts))