]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Page.hs
improvements related to RSS feed
[Rakka.git] / Rakka / Page.hs
index 16835d5aafd79e247d227e557e93d77eb267e0ea..ec43df852c2d252ab758bfffe0e0e22ecf981c9d 100644 (file)
@@ -20,6 +20,7 @@ module Rakka.Page
     , mkObjectURI
     , mkFragmentURI
     , mkAuxiliaryURI
+    , mkFeedURI
     , mkRakkaURI
 
     , xmlizePage
@@ -181,6 +182,13 @@ mkAuxiliaryURI baseURI basePath name
       }
 
 
+mkFeedURI :: URI -> PageName -> URI
+mkFeedURI baseURI name
+    = baseURI {
+        uriPath = foldl (</>) "/" [uriPath baseURI, encodePageName name ++ ".rdf"]
+      }
+
+
 mkRakkaURI :: PageName -> URI
 mkRakkaURI name = URI {
                     uriScheme    = "rakka:"
@@ -240,6 +248,7 @@ xmlizePage
                   += ( eelem "page"
                        += sattr "name"     (redirName page)
                        += sattr "redirect" (redirDest page)
+                       += sattr "isLocked" (yesOrNo $ redirIsLocked page)
                        += sattr "revision" (show $ redirRevision page)
                        += sattr "lastModified" (formatW3CDateTime lastMod)
                      )) -<< ()
@@ -344,7 +353,7 @@ parseEntity
           let (isBinary, content)
                   = case (textData, binaryData) of
                       (Just text, Nothing    ) -> (False, L.pack $ UTF8.encode text )
-                      (Nothing  , Just binary) -> (True , L.pack $ B64.decode binary)
+                      (Nothing  , Just binary) -> (True , L.pack $ fromJust $ B64.decode $ dropWhitespace binary)
                       _                        -> error "one of textData or binaryData is required"
               mimeType
                   =  if isBinary then
@@ -370,6 +379,14 @@ parseEntity
                       , entityContent    = content
                       , entityUpdateInfo = updateInfo
                       }
+    where
+      dropWhitespace :: String -> String
+      dropWhitespace [] = []
+      dropWhitespace (x:xs)
+          | x == ' ' || x == '\t' || x == '\n'
+              = dropWhitespace xs
+          | otherwise
+              = x : dropWhitespace xs
 
 
 parseUpdateInfo :: (ArrowXml a, ArrowChoice a) => a XmlTree UpdateInfo