on 86ede74 help sign in
62 lines 2.2 kB history raw
1--------------------------------------------------------------------------------
2module Hakyll.Core.ResourceProvider.MetadataCache
3 ( resourceMetadata
4 , resourceBody
5 , resourceInvalidateMetadataCache
6 ) where
9--------------------------------------------------------------------------------
10import Hakyll.Core.Identifier
11import Hakyll.Core.Metadata
12import Hakyll.Core.ResourceProvider.Internal
13import Hakyll.Core.ResourceProvider.Metadata
14import qualified Hakyll.Core.Store as Store
17--------------------------------------------------------------------------------
18resourceMetadata :: ResourceProvider -> Identifier a -> IO Metadata
19resourceMetadata rp r = do
20 load rp r
21 Store.Found md <- Store.get (resourceStore rp)
22 [name, toFilePath r, "metadata"]
23 return md
26--------------------------------------------------------------------------------
27resourceBody :: ResourceProvider -> Identifier a -> IO String
28resourceBody rp r = do
29 load rp r
30 Store.Found bd <- Store.get (resourceStore rp)
31 [name, toFilePath r, "body"]
32 maybe (resourceString r) return bd
35--------------------------------------------------------------------------------
36resourceInvalidateMetadataCache :: ResourceProvider -> Identifier a -> IO ()
37resourceInvalidateMetadataCache rp r = do
38 Store.delete (resourceStore rp) [name, toFilePath r, "metadata"]
39 Store.delete (resourceStore rp) [name, toFilePath r, "body"]
42--------------------------------------------------------------------------------
43load :: ResourceProvider -> Identifier a -> IO ()
44load rp 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 rp r
52 Store.set store mdk metadata
53 Store.set store bk body
54 where
55 store = resourceStore rp
56 mdk = [name, toFilePath r, "metadata"]
57 bk = [name, toFilePath r, "body"]
60--------------------------------------------------------------------------------
61name :: String
62name = "Hakyll.Core.Resource.Provider.MetadataCache"