module Rakka.Resource.Page.Get ( handleGet ) where import Control.Arrow import Control.Arrow.ArrowList import Network.HTTP.Lucu import Network.URI import Rakka.Environment import Rakka.Page import Rakka.Resource import Rakka.Storage import Rakka.Utils import Text.XML.HXT.Arrow.XmlArrow import Text.XML.HXT.DOM.TypeDefs {- [リダイレクトの場合] HTTP/1.1 302 Found Location: http://example.org/Destination?from=Source&revision=112 [text/* の場合] -- デフォルトでない場合のみ存在 lastModified="2000-01-01T00:00:00" /> blah blah... -- 存在しない場合もある blah blah... [text/* 以外の場合: content 要素の代はりに object 要素] -- data 屬性に URI -} handleGet :: Environment -> PageName -> Resource () handleGet env name = let sto = envStorage env in runIdempotentA $ proc () -> do siteName <- getSiteNameA env -< () baseURI <- getBaseURIA env -< () pageM <- getPageA sto -< name case pageM of Nothing -> returnA -< foundNoEntity Nothing Just redir@(Redirection _ _ _ _) -> do tree <- ( eelem "/" += ( eelem "page" += sattr "site" siteName += sattr "baseURI" (uriToString id baseURI "") += sattr "name" name += sattr "redirect" (redirDest redir) += ( case redirRevision redir of Nothing -> none Just rev -> sattr "revision" (show rev) ) += sattr "lastModified" (formatW3CDateTime $ redirLastMod redir) ) ) -<< () returnA -< do redirect SeeOther (mkPageURI baseURI name) outputXmlPage tree redirToXHTML redirToXHTML :: ArrowXml a => a XmlTree XmlTree redirToXHTML = error "not implemented"