packages feed

bamboo-launcher-2010.2.25: src/Launcher.hs

{-# LANGUAGE NamedFieldPuns #-}

module Main where

import Bamboo
import Bamboo.Theme.Blueprint
import Data.Default
import Hack
import Hack.Contrib.Middleware.BounceFavicon
import Hack.Contrib.Middleware.ContentLength
import Hack.Contrib.Middleware.ContentType
import Hack.Contrib.Middleware.ShowExceptions
import Hack.Contrib.Middleware.SimpleAccessLogger
import Hack.Contrib.Middleware.Static
import Hack.Contrib.Utils
import Hack.Handler.Hyena
import MPSUTF8
import Prelude hiding ((.))
import System
import System.Cmd
import System.IO
import qualified Data.ByteString.Char8 as B
import qualified Hack.Contrib.Middleware.Head as H


middleware_stack :: [Middleware]
middleware_stack = 
  [  dummy_middleware
  
  -- filter
  ,  bounce_favicon
  ,  simple_access_logger Nothing

  -- completeness
  ,  content_length
  ,  content_type default_content_type

  -- debuging
  ,  show_exceptions Nothing
  
  -- optimization
  ,  H.head
  
  -- static serve
  ,  static (Just "db/public") ["/theme", "/images", "/plugin", "/favicon.ico"]
  
  -- real app
  ,  bamboo_with_theme blueprint
  ]
  
  where
    default_content_type = "text/plain; charset=UTF-8"
  
-- test_app = \env -> return $ def .set_body (env.inputs.show)

app :: Application
app = use middleware_stack dummy_app

main :: IO ()
main = do
  args <- getArgs
  let port = if args.length == 1 then args.first.read else 3000
  paths <- ls "."
  if paths.has "db"
    then start port
    else do
      sep
      putStrLn $
        "I'm about to download a template from " ++ repo ++ " into ./db"
      putStrLn "Do you want to continue?   y or n"
      B.putStr $ B.pack $ u2b "❂ "
      hFlush stdout
      r <- getLine
      if r.is "y"
        then do
          system $ "git clone " ++ repo ++ " db"
          sep
          putStrLn "Template download complete!"
          putStrLn "You might want to remove db/.git manually."
          sep
          start port
        else
          putStrLn "Cya!"
  where
    start port = do 
      putStrLn $ "server started on port " ++ port.show ++ "..."
      runWithConfig def {port} app
    sep = putStrLn $ 70.times '-'
    repo = "git://github.com/nfjinjing/bamboo-template.git"