on 877cb21 help sign in
hakyll/src/Hakyll/Core/Provider/MetadataCache.hs
62 lines 2.1 kB history raw
1--------------------------------------------------------------------------------
2module Hakyll.Core.Provider.MetadataCache
3 ( resourceMetadata
4 , resourceBody
5 , resourceInvalidateMetadataCache
6 ) where
9--------------------------------------------------------------------------------
10import Hakyll.Core.Identifier
11import Hakyll.Core.Metadata
12import Hakyll.Core.Provider.Internal
13import Hakyll.Core.Provider.Metadata
14import qualified Hakyll.Core.Store as Store
17--------------------------------------------------------------------------------
18resourceMetadata :: Provider -> Identifier -> IO Metadata
19resourceMetadata p r = do
20 load p r
21 Store.Found md <- Store.get (providerStore p)
22 [name, toFilePath r, "metadata"]
23 return md
26--------------------------------------------------------------------------------
27resourceBody :: Provider -> Identifier -> IO String
28resourceBody p r = do
29 load p r
30 Store.Found bd <- Store.get (providerStore p)
31 [name, toFilePath r, "body"]
32 maybe (resourceString r) return bd
35--------------------------------------------------------------------------------
36resourceInvalidateMetadataCache :: Provider -> Identifier -> IO ()
37resourceInvalidateMetadataCache p r = do
38 Store.delete (providerStore p) [name, toFilePath r, "metadata"]
39 Store.delete (providerStore p) [name, toFilePath r, "body"]
42--------------------------------------------------------------------------------
43load :: Provider -> Identifier -> IO ()
44load p r = do
45 mmd <- Store.get store mdk :: IO (Store.Result Metadata)
46 case mmd of
47 -- Already loaded
48 Store.Found _ -> return ()
49 -- Not yet loaded
50 _ -> do
51 (metadata, body) <- loadMetadata p r
52 Store.set store mdk metadata
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"