]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Resource/Object.hs
Wrote more
[Rakka.git] / Rakka / Resource / Object.hs
index af0d9b7604da54602e89e7d6ef4e25a749947c48..a18a268cb3504dc55badca12134cdf5883d02ed7 100644 (file)
@@ -3,13 +3,14 @@ module Rakka.Resource.Object
     )
     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
 
 
@@ -26,12 +27,12 @@ resObject env
       }
     where
       toPageName :: [String] -> PageName
-      toPageName = decodePageName . dropExtension . joinWith "/" 
+      toPageName = decodePageName . joinWith "/" 
 
 
 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
@@ -39,7 +40,7 @@ handleGet env name
            Just redir@(Redirection _ _ _ _)
                -> handleRedirect env redir
 
-           Just entity@(Entity _ _ _ _ _ _ _ _ _ _ _ _)
+           Just entity@(Entity _ _ _ _ _ _ _ _ _ _ _ _ _ _)
                -> handleGetEntity env 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)
 
 
@@ -64,8 +65,10 @@ handleGetEntity env page
     = do let lastMod = toClockTime $ pageLastMod page
 
          case pageRevision page of
-           Nothing  -> foundTimeStamp lastMod
-           Just rev -> foundEntity (strongETag $ show rev) lastMod
+           0   -> foundTimeStamp lastMod -- 0 はデフォルトページ
+           rev -> foundEntity (strongETag $ show rev) lastMod
 
-         setContentType (pageType    page)
-         outputLBS      (pageContent page)
+         setContentType (pageType page)
+         setHeader (C8.pack "Content-Disposition")
+                       (C8.pack $ "attachment; filename=" ++ quoteStr (pageFileName' page))
+         outputLBS (pageContent page)