1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
--------------------------------------------------------------------------------
module Hakyll.Core.Provider.MetadataCache
( resourceMetadata
, resourceBody
, resourceInvalidateMetadataCache
) where
--------------------------------------------------------------------------------
import Control.Monad (unless)
import Hakyll.Core.Identifier
import Hakyll.Core.Metadata
import Hakyll.Core.Provider.Internal
import Hakyll.Core.Provider.Metadata
import qualified Hakyll.Core.Store as Store
--------------------------------------------------------------------------------
resourceMetadata :: Provider -> Identifier -> IO Metadata
resourceMetadata p r
| not (resourceExists p r) = return mempty
| otherwise = do
-- TODO keep time in md cache
load p r
Store.Found (BinaryMetadata md) <- Store.get (providerStore p)
[name, toFilePath r, "metadata"]
return md
--------------------------------------------------------------------------------
resourceBody :: Provider -> Identifier -> IO String
resourceBody p r = do
load p r
Store.Found bd <- Store.get (providerStore p)
[name, toFilePath r, "body"]
maybe (resourceString p r) return bd
--------------------------------------------------------------------------------
resourceInvalidateMetadataCache :: Provider -> Identifier -> IO ()
resourceInvalidateMetadataCache p r = do
Store.delete (providerStore p) [name, toFilePath r, "metadata"]
Store.delete (providerStore p) [name, toFilePath r, "body"]
--------------------------------------------------------------------------------
load :: Provider -> Identifier -> IO ()
load p r = do
mmof <- Store.isMember store mdk
unless mmof $ do
(md, body) <- loadMetadata p r
Store.set store mdk (BinaryMetadata md)
Store.set store bk body
where
store = providerStore p
mdk = [name, toFilePath r, "metadata"]
bk = [name, toFilePath r, "body"]
--------------------------------------------------------------------------------
name :: String
name = "Hakyll.Core.Resource.Provider.MetadataCache"
|