X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Network%2FHTTP%2FLucu%2FUtils.hs;fp=Network%2FHTTP%2FLucu%2FUtils.hs;h=c07c9c9cf94891bf82213f5c24edf293ef534f12;hb=46ea3a688edea377e83794d1387f3f2d203bb0c6;hp=18370fab68cc3aa673b1ef6a85bf11bd3a87eb25;hpb=64129c18cf0eeb0e96d83882be14a8d96f4c2892;p=Lucu.git diff --git a/Network/HTTP/Lucu/Utils.hs b/Network/HTTP/Lucu/Utils.hs index 18370fa..c07c9c9 100644 --- a/Network/HTTP/Lucu/Utils.hs +++ b/Network/HTTP/Lucu/Utils.hs @@ -11,6 +11,9 @@ module Network.HTTP.Lucu.Utils , parseWWWFormURLEncoded , splitPathInfo , trim + + , getLastModified + , liftByteString , liftLazyByteString , liftAscii @@ -20,6 +23,7 @@ module Network.HTTP.Lucu.Utils , liftUTCTime ) where +import Control.Applicative import Control.Monad import Data.Ascii (Ascii, CIAscii, AsciiBuilder) import qualified Data.Ascii as A @@ -35,11 +39,14 @@ import Data.Ratio import Data.Text (Text) import qualified Data.Text as T import Data.Time +import Data.Time.Clock.POSIX import Language.Haskell.TH.Lib import Language.Haskell.TH.Syntax import Network.URI import Prelude hiding (last) import Prelude.Unicode +import System.Directory +import System.Time (ClockTime(..)) -- |>>> splitBy (== ':') "ab:c:def" -- ["ab", "c", "def"] @@ -111,6 +118,16 @@ trim = reverse ∘ f ∘ reverse ∘ f where f = dropWhile isSpace +-- |Get the modification time of a given file. +getLastModified ∷ FilePath → IO UTCTime +getLastModified = (clockTimeToUTC <$>) ∘ getModificationTime + where + clockTimeToUTC ∷ ClockTime → UTCTime + clockTimeToUTC (TOD sec picoSec) + = posixSecondsToUTCTime + $ fromRational + $ sec % 1 + picoSec % (1000 ⋅ 1000 ⋅ 1000 ⋅ 1000) + -- |Convert a 'ByteString' to an 'Exp' representing it as a literal. liftByteString ∷ ByteString → Q Exp liftByteString bs