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