on master help sign in
Add modification time access for resources
commit6808c5350e4eafacf115eb24078c61cf59caa4b2 authorJasper Van der Jeugt <m@jaspervdj.be> dateFri 16 Sep 2011, 20:42 (15 years ago) parent5517a14
3 files changed+22−6
src/Hakyll/Core/Resource/Provider.hs+9−5 src/Hakyll/Core/Resource/Provider/Dummy.hs+3−1 src/Hakyll/Core/Resource/Provider/File.hs+10
src/Hakyll/Core/Resource/Provider.hs+9−5
@@ -23,6 +23,7 @@ import Control.Concurrent (MVar, readMVar, modifyMVar_, newMVar)
2323import Data.Map (Map)
2424import qualified Data.Map as M
2525
26+import Data.Time (UTCTime)
2627import qualified Crypto.Hash.MD5 as MD5
2728import qualified Data.ByteString as B
2829import qualified Data.ByteString.Lazy as LB
@@ -34,13 +35,15 @@ import Hakyll.Core.Resource
3435--
3536data ResourceProvider = ResourceProvider
3637 { -- | A list of all resources this provider is able to provide
37− resourceList :: [Resource]
38+ resourceList :: [Resource]
3839 , -- | Retrieve a certain resource as string
39− resourceString :: Resource -> IO String
40+ resourceString :: Resource -> IO String
4041 , -- | Retrieve a certain resource as lazy bytestring
41− resourceLBS :: Resource -> IO LB.ByteString
42+ resourceLBS :: Resource -> IO LB.ByteString
43+ , -- | Check when a resource was last modified
44+ resourceModificationTime :: Resource -> IO UTCTime
4245 , -- | Cache keeping track of modified items
43− resourceModifiedCache :: MVar (Map Resource Bool)
46+ resourceModifiedCache :: MVar (Map Resource Bool)
4447 }
4548
4649-- | Create a resource provider
@@ -48,8 +51,9 @@ data ResourceProvider = ResourceProvider
4851makeResourceProvider :: [Resource] -- ^ Resource list
4952 -> (Resource -> IO String) -- ^ String reader
5053 -> (Resource -> IO LB.ByteString) -- ^ ByteString reader
54+ -> (Resource -> IO UTCTime) -- ^ Time checker
5155 -> IO ResourceProvider -- ^ Resulting provider
52−makeResourceProvider l s b = ResourceProvider l s b <$> newMVar M.empty
56+makeResourceProvider l s b t = ResourceProvider l s b t <$> newMVar M.empty
5357
5458-- | Check if a given identifier has a resource
5559--
src/Hakyll/Core/Resource/Provider/Dummy.hs+3−1
@@ -7,9 +7,10 @@ module Hakyll.Core.Resource.Provider.Dummy
77import Data.Map (Map)
88import qualified Data.Map as M
99
10+import Data.Time (getCurrentTime)
11+import Data.ByteString.Lazy (ByteString)
1012import qualified Data.Text.Lazy as TL
1113import qualified Data.Text.Lazy.Encoding as TL
12−import Data.ByteString.Lazy (ByteString)
1314
1415import Hakyll.Core.Resource
1516import Hakyll.Core.Resource.Provider
@@ -21,3 +22,4 @@ dummyResourceProvider vfs = makeResourceProvider
2122 (map Resource (M.keys vfs))
2223 (return . TL.unpack . TL.decodeUtf8 . (vfs M.!) . unResource)
2324 (return . (vfs M.!) . unResource)
25+ (const getCurrentTime)
src/Hakyll/Core/Resource/Provider/File.hs+10
@@ -6,6 +6,10 @@ module Hakyll.Core.Resource.Provider.File
66
77import Control.Applicative ((<$>))
88
9+import Data.Time (readTime)
10+import System.Directory (getModificationTime)
11+import System.Locale (defaultTimeLocale)
12+import System.Time (formatCalendarTime, toCalendarTime)
913import qualified Data.ByteString.Lazy as LB
1014
1115import Hakyll.Core.Resource
@@ -22,3 +26,9 @@ fileResourceProvider configuration = do
2226 getRecursiveContents False "."
2327 makeResourceProvider list (readFile . unResource)
2428 (LB.readFile . unResource)
29+ mtime
30+ where
31+ mtime (Resource r) = do
32+ ct <- toCalendarTime =<< getModificationTime r
33+ let str = formatCalendarTime defaultTimeLocale "%s" ct
34+ return $ readTime defaultTimeLocale "%s" str