on df2bc9f help sign in
hakyll/src/Hakyll/Core/Provider/MetadataCache.hs
65 lines 2.3 kB history raw
1--------------------------------------------------------------------------------
2module Hakyll.Core.Provider.MetadataCache
3 ( resourceMetadata
4 , resourceBody
5 , resourceInvalidateMetadataCache
6 ) where
9--------------------------------------------------------------------------------
10import Control.Monad (unless)
11import qualified Data.Map as M
13--------------------------------------------------------------------------------
14import Hakyll.Core.Identifier
15import Hakyll.Core.Metadata
16import Hakyll.Core.Provider.Internal
17import Hakyll.Core.Provider.Metadata
18import qualified Hakyll.Core.Store as Store
21--------------------------------------------------------------------------------
22resourceMetadata :: Provider -> Identifier -> IO Metadata
23resourceMetadata p r
24 | not (resourceExists p r) = return M.empty
25 | otherwise = do
26 -- TODO keep time in md cache
27 load p r
28 Store.Found md <- Store.get (providerStore p)
29 [name, toFilePath r, "metadata"]
30 return md
33--------------------------------------------------------------------------------
34resourceBody :: Provider -> Identifier -> IO String
35resourceBody p r = do
36 load p r
37 Store.Found bd <- Store.get (providerStore p)
38 [name, toFilePath r, "body"]
39 maybe (resourceString p r) return bd
42--------------------------------------------------------------------------------
43resourceInvalidateMetadataCache :: Provider -> Identifier -> IO ()
44resourceInvalidateMetadataCache p r = do
45 Store.delete (providerStore p) [name, toFilePath r, "metadata"]
46 Store.delete (providerStore p) [name, toFilePath r, "body"]
49--------------------------------------------------------------------------------
50load :: Provider -> Identifier -> IO ()
51load p r = do
52 mmof <- Store.isMember store mdk
53 unless mmof $ do
54 (md, body) <- loadMetadata p r
55 Store.set store mdk md
56 Store.set store bk body
57 where
58 store = providerStore p
59 mdk = [name, toFilePath r, "metadata"]
60 bk = [name, toFilePath r, "body"]
63--------------------------------------------------------------------------------
64name :: String
65name = "Hakyll.Core.Resource.Provider.MetadataCache"