1 {-# LANGUAGE OverloadedStrings, TupleSections #-} 2 module Databrary.Web.Info 3 ( makeWebFileInfo 4 , loadWebFileMap 5 ) where 6 7 import qualified Data.HashMap.Strict as HM 8 import Data.Text (pack) 9 import qualified Network.Mime as Mime 10 import System.FilePath (takeFileName) 11 import System.Posix.ByteString (getFileStatus) 12 13 import Databrary.Files 14 import Databrary.Web 15 import Databrary.Web.Files 16 import Databrary.Web.Types 17 18 makeWebFileInfo :: WebFilePath -> IO WebFileInfo 19 makeWebFileInfo f = do 20 fp <- unRawFilePath $ webFileAbs f 21 let format = Mime.defaultMimeLookup (pack (takeFileName fp)) 22 hash <- hashFile $ webFileAbs f 23 ts <- modificationTimestamp <$> getFileStatus (webFileAbs f) 24 return $ WebFileInfo format hash ts 25 26 loadWebFileMap :: IO WebFileMap 27 loadWebFileMap = fmap HM.fromList . mapM (\f -> (f, ) <$> makeWebFileInfo f) =<< allWebFiles