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