]> gitweb @ CieloNegro.org - Rakka.git/blobdiff - Rakka/Storage.hs
implemented page deleting
[Rakka.git] / Rakka / Storage.hs
index 56b42da0ae57f8668685f86d1cd9bca08ebe0f60..d88a336506a23dd162278ec8b69930ab18a46879 100644 (file)
@@ -5,11 +5,15 @@ module Rakka.Storage
 
     , getPage
     , putPage
+    , deletePage
 
     , getPageA
     , putPageA
+    , deletePageA
 
     , searchPages
+
+    , rebuildIndex
     )
     where
 
@@ -18,6 +22,7 @@ import           Control.Concurrent.STM
 import           Control.Monad
 import           Control.Monad.Trans
 import           Data.Maybe
+import           Network.HTTP.Lucu
 import           Rakka.Page
 import           Rakka.Storage.Impl
 import           Rakka.Storage.Types
@@ -26,8 +31,6 @@ import           System.IO
 import           Subversion.Repository
 import           Text.HyperEstraier hiding (WriteLock)
 
-logger = "Rakka.Storage"
-
 
 mkStorage :: FilePath -> Repository -> (Page -> IO Document) -> IO Storage
 mkStorage lsdir repos mkDraft
@@ -44,17 +47,30 @@ getPage :: MonadIO m => Storage -> PageName -> Maybe RevNum -> m (Maybe Page)
 getPage = ((liftIO .) .) . getPage' . stoRepository
 
 
-putPage :: MonadIO m => Storage -> Page -> RevNum -> m ()
-putPage sto page oldRev
-    = error "FIXME: not implemented"
+putPage :: MonadIO m => Storage -> Page -> m StatusCode
+putPage sto page
+    = liftIO $ do st <- putPage' (stoRepository sto) page
+                  syncIndex sto
+                  return st
+
+
+deletePage :: MonadIO m => Storage -> PageName -> m StatusCode
+deletePage sto name
+    = liftIO $ do st <- deletePage' (stoRepository sto) name
+                  syncIndex sto
+                  return st
 
 
 getPageA :: ArrowIO a => Storage -> a (PageName, Maybe RevNum) (Maybe Page)
 getPageA = arrIO2 . getPage 
 
 
-putPageA :: ArrowIO a => Storage -> a (Page, RevNum) ()
-putPageA = arrIO2 . putPage
+putPageA :: ArrowIO a => Storage -> a Page StatusCode
+putPageA = arrIO . putPage
+
+
+deletePageA :: ArrowIO a => Storage -> a PageName StatusCode
+deletePageA = arrIO . deletePage
 
 
 searchPages :: MonadIO m => Storage -> Condition -> m [(PageName, RevNum)]
@@ -65,6 +81,11 @@ searchPages sto cond
          atomically $ takeTMVar var
 
 
+rebuildIndex :: MonadIO m => Storage -> m ()
+rebuildIndex sto
+    = liftIO $ atomically $ writeTChan (stoIndexChan sto) RebuildIndex
+
+
 syncIndex :: Storage -> IO ()
 syncIndex sto
     = atomically $ writeTChan (stoIndexChan sto) SyncIndex