X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=Rakka%2FResource%2FObject.hs;h=00ebc28e140a622e9d7560e66fb52afc7810adfa;hb=d6f5dd9adfa8bccc7799396554dfaf80d9522a38;hp=73f299bb955e39d628c7877c25175f0629d381c1;hpb=8a7556db44cd91ac0bb52279472bcc2abaa3f18e;p=Rakka.git diff --git a/Rakka/Resource/Object.hs b/Rakka/Resource/Object.hs index 73f299b..00ebc28 100644 --- a/Rakka/Resource/Object.hs +++ b/Rakka/Resource/Object.hs @@ -1,16 +1,17 @@ +-- -*- Coding: utf-8 -*- module Rakka.Resource.Object ( resObject ) where +import Data.ByteString.Char8 as C8 +import Data.Maybe import Network.HTTP.Lucu import Network.HTTP.Lucu.Utils import Rakka.Environment import Rakka.Page import Rakka.Storage import Rakka.SystemConfig -import System.FilePath -import System.Time resObject :: Environment -> ResourceDef @@ -31,16 +32,16 @@ resObject env handleGet :: Environment -> PageName -> Resource () handleGet env name - = do pageM <- getPage (envStorage env) name + = do pageM <- getPage (envStorage env) name Nothing case pageM of Nothing -> foundNoEntity Nothing - Just redir@(Redirection _ _ _ _) + Just redir@(Redirection _ _ _ _ _) -> handleRedirect env redir - Just entity@(Entity _ _ _ _ _ _ _ _ _ _ _ _) - -> handleGetEntity env entity + Just entity@(Entity _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) + -> handleGetEntity entity {- @@ -49,7 +50,7 @@ handleGet env name -} handleRedirect :: Environment -> Page -> Resource () handleRedirect env redir - = do BaseURI baseURI <- getSysConf (envSysConf env) (BaseURI undefined) + = do BaseURI baseURI <- getSysConf (envSysConf env) redirect Found (mkObjectURI baseURI $ redirName redir) @@ -59,13 +60,13 @@ handleRedirect env redir ... -} -handleGetEntity :: Environment -> Page -> Resource () -handleGetEntity env page - = do let lastMod = toClockTime $ pageLastMod page +handleGetEntity :: Page -> Resource () +handleGetEntity page + = do case entityRevision page of + 0 -> foundTimeStamp (entityLastMod page) -- 0 はデフォルトページ + rev -> foundEntity (strongETag $ show rev) (entityLastMod page) - case pageRevision page of - Nothing -> foundTimeStamp lastMod - Just rev -> foundEntity (strongETag $ show rev) lastMod - - setContentType (pageType page) - outputLBS (pageContent page) + setContentType (entityType page) + setHeader (C8.pack "Content-Disposition") + (C8.pack $ "attachment; filename=" ++ quoteStr (entityFileName' page)) + outputLBS (entityContent page)