corebot-bliki-0.2: src/Yesod/CoreBot/Bliki/Store.hs
module Yesod.CoreBot.Bliki.Store where
import Yesod.CoreBot.Bliki.Prelude
import Control.Monad.State.Class
import Control.Monad.Trans
import qualified Data.ByteString.Lazy as B
import qualified Data.FileStore as FileStore
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Lazy.Encoding as TL
import System.Directory
-- XXX: The inner FileStore is not actually pure.
data Store = Store
{ filestore :: FileStore
}
class ( MonadIO m, Applicative m, MonadState m, StateType m ~ Store ) => StoreM m
instance ( MonadIO m, Applicative m, MonadState m, StateType m ~ Store ) => StoreM m
directory_listing :: StoreM m => FilePath -> m [ Resource ]
directory_listing node_path = do
store <- get
liftIO $ FileStore.directory (filestore store) node_path
cache_str :: FilePath -> String -> IO ()
cache_str out_path str = do
let text = TL.pack str
bs = TL.encodeUtf8 text
tmp_out = out_path ++ ".tmp"
createDirectoryIfMissing True (takeDirectory tmp_out)
B.writeFile tmp_out bs
renameFile tmp_out out_path
return ()
data_for_node_rev :: StoreM m
=> FilePath
-> RevisionId
-> m B.ByteString
data_for_node_rev node_path rev_ID = do
fs <- gets filestore
liftIO $ FileStore.smartRetrieve fs True node_path (Just rev_ID)