1 {-# LANGUAGE OverloadedStrings #-} 2 module Databrary.Web.GZip 3 ( generateGZip 4 ) where 5 6 import qualified Codec.Compression.GZip as GZ 7 import Control.Monad (mzero) 8 import Control.Monad.IO.Class 9 import qualified Data.ByteString.Lazy as BSL 10 import System.FilePath (takeExtension) 11 12 import Databrary.Files 13 import Databrary.Web 14 import Databrary.Web.Types 15 import Databrary.Web.Generate 16 17 generateGZip :: WebGenerator 18 generateGZip fo@(f, _) = do 19 (b, ext) <- liftIO $ splitWebExtension f 20 b' <- liftIO $ unRawFilePath $ webFileAbs b 21 if takeExtension b' `notElem` [".png"] && ext == ".gz" -- things that don't compress 22 then do 23 f' <- liftIO $ unRawFilePath $ webFileAbs f 24 webRegenerate 25 (BSL.writeFile f' . GZ.compress =<< BSL.readFile b') 26 [] [b] fo 27 else mzero