diff options
| author | Jasper Van der Jeugt <m@jaspervdj.be> | 2012-11-08 12:45:26 +0100 |
|---|---|---|
| committer | Jasper Van der Jeugt <m@jaspervdj.be> | 2012-11-08 12:45:26 +0100 |
| commit | 89f324f81b40d6818e6307794fe06b60053adbc0 (patch) | |
| tree | e8c4f7fb869597ede5f283913cd0633be6830af6 /src/Hakyll/Core/Resource/Provider | |
| parent | e5c97d978bf34bdc98d97bf42ee2be29a5af4242 (diff) | |
| download | hakyll-89f324f81b40d6818e6307794fe06b60053adbc0.tar.gz | |
Pick metadata parsing from old develop
Diffstat (limited to 'src/Hakyll/Core/Resource/Provider')
| -rw-r--r-- | src/Hakyll/Core/Resource/Provider/Dummy.hs | 25 | ||||
| -rw-r--r-- | src/Hakyll/Core/Resource/Provider/File.hs | 39 | ||||
| -rw-r--r-- | src/Hakyll/Core/Resource/Provider/Internal.hs | 84 |
3 files changed, 84 insertions, 64 deletions
diff --git a/src/Hakyll/Core/Resource/Provider/Dummy.hs b/src/Hakyll/Core/Resource/Provider/Dummy.hs deleted file mode 100644 index 548f845..0000000 --- a/src/Hakyll/Core/Resource/Provider/Dummy.hs +++ /dev/null @@ -1,25 +0,0 @@ --- | Dummy resource provider for testing purposes --- -module Hakyll.Core.Resource.Provider.Dummy - ( dummyResourceProvider - ) where - -import Data.Map (Map) -import qualified Data.Map as M - -import Data.Time (getCurrentTime) -import Data.ByteString.Lazy (ByteString) -import qualified Data.Text.Lazy as TL -import qualified Data.Text.Lazy.Encoding as TL - -import Hakyll.Core.Resource -import Hakyll.Core.Resource.Provider - --- | Create a dummy 'ResourceProvider' --- -dummyResourceProvider :: Map String ByteString -> IO ResourceProvider -dummyResourceProvider vfs = makeResourceProvider - (map resource (M.keys vfs)) - (return . TL.unpack . TL.decodeUtf8 . (vfs M.!) . unResource) - (return . (vfs M.!) . unResource) - (const getCurrentTime) diff --git a/src/Hakyll/Core/Resource/Provider/File.hs b/src/Hakyll/Core/Resource/Provider/File.hs deleted file mode 100644 index 3a67817..0000000 --- a/src/Hakyll/Core/Resource/Provider/File.hs +++ /dev/null @@ -1,39 +0,0 @@ --- | A concrete 'ResourceProvider' that gets it's resources from the filesystem --- -{-# LANGUAGE CPP #-} -module Hakyll.Core.Resource.Provider.File - ( fileResourceProvider - ) where - -import Control.Applicative ((<$>)) - -import Data.Time (readTime) -import System.Directory (getModificationTime) -import System.Locale (defaultTimeLocale) -import System.Time (formatCalendarTime, toCalendarTime) -import qualified Data.ByteString.Lazy as LB - -import Hakyll.Core.Resource -import Hakyll.Core.Resource.Provider -import Hakyll.Core.Util.File -import Hakyll.Core.Configuration - --- | Create a filesystem-based 'ResourceProvider' --- -fileResourceProvider :: HakyllConfiguration -> IO ResourceProvider -fileResourceProvider configuration = do - -- Retrieve a list of paths - list <- map resource . filter (not . shouldIgnoreFile configuration) <$> - getRecursiveContents False "." - makeResourceProvider list (readFile . unResource) - (LB.readFile . unResource) - (mtime . unResource) - where - mtime r = do -#if MIN_VERSION_directory(1,2,0) - getModificationTime r -#else - ct <- toCalendarTime =<< getModificationTime r - let str = formatCalendarTime defaultTimeLocale "%s" ct - return $ readTime defaultTimeLocale "%s" str -#endif diff --git a/src/Hakyll/Core/Resource/Provider/Internal.hs b/src/Hakyll/Core/Resource/Provider/Internal.hs new file mode 100644 index 0000000..fb93fcc --- /dev/null +++ b/src/Hakyll/Core/Resource/Provider/Internal.hs @@ -0,0 +1,84 @@ +-------------------------------------------------------------------------------- +module Hakyll.Core.Resource.Provider.Internal + ( ResourceProvider (..) + , newResourceProvider + + , resourceList + , resourceExists + , resourceMetadataResource + + , resourceString + , resourceLBS + ) where + + +-------------------------------------------------------------------------------- +import Control.Applicative ((<$>)) +import qualified Data.ByteString.Lazy as BL +import Data.IORef +import Data.Map (Map) +import qualified Data.Map as M +import Data.Set (Set) +import qualified Data.Set as S +import System.FilePath (addExtension) + + +-------------------------------------------------------------------------------- +import Hakyll.Core.Resource +import Hakyll.Core.Store +import Hakyll.Core.Util.File + + +-------------------------------------------------------------------------------- +-- | Responsible for retrieving and listing resources +data ResourceProvider = ResourceProvider + { -- | A list of all files found + resourceSet :: Set Resource + , -- | Cache keeping track of modified files + resourceModifiedCache :: IORef (Map Resource Bool) + , -- | Underlying persistent store for caching + resourceStore :: Store + } + + +-------------------------------------------------------------------------------- +-- | Create a resource provider +newResourceProvider :: Store -- ^ Store to use + -> (FilePath -> Bool) -- ^ Should we ignore this file? + -> FilePath -- ^ Search directory + -> IO ResourceProvider -- ^ Resulting provider +newResourceProvider store ignore directory = do + list <- map resource . filter (not . ignore) <$> + getRecursiveContents False directory + cache <- newIORef M.empty + return $ ResourceProvider (S.fromList list) cache store + + +-------------------------------------------------------------------------------- +resourceList :: ResourceProvider -> [Resource] +resourceList = S.toList . resourceSet + + +-------------------------------------------------------------------------------- +-- | Check if a given resiyrce exists +resourceExists :: ResourceProvider -> Resource -> Bool +resourceExists provider = (`S.member` resourceSet provider) + + +-------------------------------------------------------------------------------- +-- | Each resource may have an associated metadata resource (with a @.metadata@ +-- filename) +resourceMetadataResource :: Resource -> Resource +resourceMetadataResource = resource . flip addExtension "metadata" . unResource + + +-------------------------------------------------------------------------------- +-- | Get the raw body of a resource as string +resourceString :: Resource -> IO String +resourceString = readFile . unResource + + +-------------------------------------------------------------------------------- +-- | Get the raw body of a resource of a lazy bytestring +resourceLBS :: Resource -> IO BL.ByteString +resourceLBS = BL.readFile . unResource |
