Added caching again. But now the more sexy, stable and fast version.
This commit is contained in:
parent
8602f23f7b
commit
892cae9da2
2 changed files with 27 additions and 5 deletions
|
@ -3,10 +3,22 @@ module Text.Hakyll.Internal.Cache
|
|||
, getFromCache
|
||||
) where
|
||||
|
||||
import Control.Monad.Reader (liftIO)
|
||||
import Text.Hakyll.Hakyll (Hakyll)
|
||||
import Text.Hakyll.File
|
||||
|
||||
storeInCache :: (Show a) => a -> FilePath -> Hakyll ()
|
||||
storeInCache = undefined
|
||||
storeInCache value path = do
|
||||
cachePath <- toCache path
|
||||
makeDirectories cachePath
|
||||
liftIO $ writeFile cachePath (show value)
|
||||
|
||||
getFromCache :: (Read a) => FilePath -> Hakyll (Maybe a)
|
||||
getFromCache = undefined
|
||||
getFromCache path = do
|
||||
cachePath <- toCache path
|
||||
valid <- isMoreRecent cachePath [path]
|
||||
if valid then liftIO (getFromCache' cachePath) >>= return . Just
|
||||
else return Nothing
|
||||
where
|
||||
getFromCache' cachePath = do c <- readFile cachePath
|
||||
return (read c)
|
||||
|
|
|
@ -18,6 +18,7 @@ import System.IO
|
|||
|
||||
import Text.Pandoc
|
||||
|
||||
import Text.Hakyll.Internal.Cache
|
||||
import Text.Hakyll.Hakyll (Hakyll)
|
||||
import Text.Hakyll.File
|
||||
import Text.Hakyll.Util (trim)
|
||||
|
@ -28,6 +29,7 @@ import Text.Hakyll.Regex (substituteRegex, matchesRegex)
|
|||
-- | A Page is basically key-value mapping. Certain keys have special
|
||||
-- meanings, like for example url, body and title.
|
||||
data Page = Page Context
|
||||
deriving (Show, Read)
|
||||
|
||||
-- | Create a Page from a key-value mapping.
|
||||
fromContext :: Context -> Page
|
||||
|
@ -110,8 +112,8 @@ readSection renderFunction isFirst ls
|
|||
|
||||
-- | Read a page from a file. Metadata is supported, and if the filename
|
||||
-- has a @.markdown@ extension, it will be rendered using pandoc.
|
||||
readPage :: FilePath -> Hakyll Page
|
||||
readPage path = do
|
||||
readPageFromFile :: FilePath -> Hakyll Page
|
||||
readPageFromFile path = do
|
||||
let renderFunction = getRenderFunction $ takeExtension path
|
||||
sectionFunctions = map (readSection renderFunction)
|
||||
(True : repeat False)
|
||||
|
@ -128,11 +130,19 @@ readPage path = do
|
|||
] ++ context
|
||||
|
||||
seq (($|) id rdeepseq context) $ liftIO $ hClose handle
|
||||
|
||||
return page
|
||||
where
|
||||
url = toURL path
|
||||
|
||||
-- | Read a page. Might fetch it from the cache if available.
|
||||
readPage :: FilePath -> Hakyll Page
|
||||
readPage path = do
|
||||
cacheResult <- getFromCache path
|
||||
case cacheResult of (Just page) -> return page
|
||||
Nothing -> do page <- readPageFromFile path
|
||||
storeInCache page path
|
||||
return page
|
||||
|
||||
-- Make pages renderable.
|
||||
instance Renderable Page where
|
||||
getDependencies = (:[]) . getPagePath
|
||||
|
|
Loading…
Reference in a new issue