]> gitweb @ CieloNegro.org - Lucu.git/blobdiff - Network/HTTP/Lucu/Utils.hs
Don't use the unix package at all.
[Lucu.git] / Network / HTTP / Lucu / Utils.hs
index 18370fab68cc3aa673b1ef6a85bf11bd3a87eb25..c07c9c9cf94891bf82213f5c24edf293ef534f12 100644 (file)
@@ -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