@@ -7,48 +7,28 @@ module Hakyll.Preview.Server
9--------------------------------------------------------------------------------
9--------------------------------------------------------------------------------
10−import Control.Monad.Trans (liftIO)
10+import Data.String
11−import qualified Data.ByteString.Char8 as B
11+import qualified Network.Wai.Handler.Warp as Warp
12−import qualified Snap.Core as Snap
12+import qualified Network.Wai.Application.Static as Static
13−import qualified Snap.Http.Server as Snap
13+import qualified Network.Wai as Wai
14−import qualified Snap.Util.FileServe as Snap
14+import Network.HTTP.Types.Status (Status)
17--------------------------------------------------------------------------------
16--------------------------------------------------------------------------------
18import Hakyll.Core.Logger (Logger)
17import Hakyll.Core.Logger (Logger)
19import qualified Hakyll.Core.Logger as Logger
18import qualified Hakyll.Core.Logger as Logger
22−--------------------------------------------------------------------------------
23−-- | Serve a given directory
24−static :: FilePath -- ^ Directory to serve
25− -> (FilePath -> IO ()) -- ^ Pre-serve hook
27−static directory preServe =
28− Snap.serveDirectoryWith directoryConfig directory
30− directoryConfig :: Snap.DirectoryConfig Snap.Snap
31− directoryConfig = Snap.fancyDirectoryConfig
32− { Snap.preServeHook = liftIO . preServe
36−--------------------------------------------------------------------------------
37−-- | Main method, runs a static server in the given directory
38staticServer :: Logger -- ^ Logger
20staticServer :: Logger -- ^ Logger
39 -> FilePath -- ^ Directory to serve
21 -> FilePath -- ^ Directory to serve
40− -> (FilePath -> IO ()) -- ^ Pre-serve hook
41 -> String -- ^ Host to bind on
22 -> String -- ^ Host to bind on
42 -> Int -- ^ Port to listen on
23 -> Int -- ^ Port to listen on
43 -> IO () -- ^ Blocks forever
24 -> IO () -- ^ Blocks forever
44−staticServer logger directory preServe host port = do
25+staticServer logger directory host port = do
45 Logger.header logger $ "Listening on http://" ++ host ++ ":" ++ show port
26 Logger.header logger $ "Listening on http://" ++ host ++ ":" ++ show port
46− Snap.httpServe config $ static directory preServe
27+ let settings = Warp.setLogger noLog
47− where
28+ $ Warp.setHost (fromString host)
48− -- Snap server config
49− config = Snap.setBind (B.pack host)
50− $ Snap.setPort port
29+ $ Warp.setPort port Warp.defaultSettings
51− $ Snap.setAccessLog Snap.ConfigNoLog
30+ waiApp = Static.staticApp (Static.defaultWebAppSettings directory)
52− $ Snap.setErrorLog Snap.ConfigNoLog
31+ Warp.runSettings settings waiApp
53− $ Snap.setVerbose False
32+
54− $ Snap.emptyConfig
33+noLog :: Wai.Request -> Status -> Maybe Integer -> IO ()
34+noLog _ _ _ = return ()