X-Git-Url: http://git.cielonegro.org/gitweb.cgi?a=blobdiff_plain;f=Rakka%2FStorage.hs;h=a89a2afa4676d10778762b7bd61c9f97ea8e2959;hb=443af4d3304139bb2187a0c726327b9c05829810;hp=56b42da0ae57f8668685f86d1cd9bca08ebe0f60;hpb=126e9f3faff19add1fb3dea792ec10dc57c30f03;p=Rakka.git diff --git a/Rakka/Storage.hs b/Rakka/Storage.hs index 56b42da..a89a2af 100644 --- a/Rakka/Storage.hs +++ b/Rakka/Storage.hs @@ -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,19 +47,32 @@ 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 -> Maybe String -> Page -> m StatusCode +putPage sto userID page + = liftIO $ do st <- putPage' (stoRepository sto) userID page + syncIndex sto + return st + + +deletePage :: MonadIO m => Storage -> Maybe String -> PageName -> m StatusCode +deletePage sto userID name + = liftIO $ do st <- deletePage' (stoRepository sto) userID 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 :: ArrowIO a => Storage -> a (Maybe String, Page) StatusCode putPageA = arrIO2 . putPage +deletePageA :: ArrowIO a => Storage -> a (Maybe String, PageName) StatusCode +deletePageA = arrIO2 . deletePage + + searchPages :: MonadIO m => Storage -> Condition -> m [(PageName, RevNum)] searchPages sto cond = liftIO $ @@ -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