module ReviewBoard.Api (
module ReviewBoard.Core,
module ReviewBoard.Browser,
module ReviewBoard.Request,
userList,
groupList,
groupStar,
groupUnstar,
reviewRequest,
reviewRequestByChangenum,
reviewRequestNew,
reviewRequestDelete,
reviewRequestSet,
reviewRequestSetField,
reviewRequestSaveDraft,
reviewRequestDiscardDraft,
reviewRequestStar,
reviewRequestUnstar,
reviewRequestDiffNew,
reviewRequestScreenshotNew,
reviewRequestListAll,
reviewRequestListToGroup,
reviewRequestListToUser,
reviewRequestListFromUser,
reviewAll,
reviewSaveDraft,
reviewDeleteDraft,
reviewPublishDraft,
repositoryList,
execRBAction,
) where
import Prelude hiding (all)
import ReviewBoard.Core
import ReviewBoard.Browser
import ReviewBoard.Request
import Network.URI
import Network.HTTP hiding (user)
import qualified Network.Browser as NB
import Control.Monad.Error
userList :: Maybe String -> RBAction RBResponse
userList (Just u) = get (users Nothing) [textField "query" u]
userList Nothing = get (users Nothing) []
groupList :: Maybe String -> RBAction RBResponse
groupList (Just g) = get (groups Nothing) [textField "query" g]
groupList Nothing = get (groups Nothing) []
groupStar :: String -> RBAction RBResponse
groupStar g = get (groups (Just g) . star) []
groupUnstar :: String -> RBAction RBResponse
groupUnstar g = get (groups (Just g) . unstar) []
reviewRequestNew :: String -> Maybe String -> RBAction RBResponse
reviewRequestNew p (Just u) = post (reviewrequests Nothing . new) $ toFormVar [("repository_path", p), ("submit_as", u)]
reviewRequestNew p Nothing = post (reviewrequests Nothing . new) [textField "repository_path" p]
reviewRequestDelete :: Integer -> RBAction RBResponse
reviewRequestDelete id = post (reviewrequests (Just id) . delete) []
reviewRequest :: Integer -> RBAction RBResponse
reviewRequest id = post (reviewrequests (Just id)) []
reviewRequestByChangenum :: Integer -> Integer -> RBAction RBResponse
reviewRequestByChangenum rId cId = post (reviewrequests Nothing . repository rId . changenum cId) []
reviewRequestSaveDraft :: Integer -> RBAction RBResponse
reviewRequestSaveDraft id = post (reviewrequests (Just id) . draft . save) []
reviewRequestDiscardDraft :: Integer -> RBAction RBResponse
reviewRequestDiscardDraft id = post (reviewrequests (Just id) . draft . discard) []
reviewRequestSet :: Integer -> [(RRField, String)] -> RBAction RBResponse
reviewRequestSet id fs = post (reviewrequests (Just id) . draft . set Nothing) (map (\(f, v) -> textField (show f) v) fs)
reviewRequestSetField :: Integer -> RRField -> String -> RBAction RBResponse
reviewRequestSetField id f v = post (reviewrequests (Just id) . draft . set (Just f)) $ [textField "value" v]
reviewRequestStar :: Integer -> RBAction RBResponse
reviewRequestStar id = get (reviewrequests (Just id) . star) []
reviewRequestUnstar :: Integer -> RBAction RBResponse
reviewRequestUnstar id = get (reviewrequests (Just id) . unstar) []
reviewRequestDiffNew :: Integer -> String -> FilePath -> RBAction RBResponse
reviewRequestDiffNew id bd fp = do
uri <- mkURI $ (reviewrequests (Just id) . diff . new) ""
let form = Form POST uri [fileUpload "path" fp "text/plain", textField "basedir" bd]
runRequest form return
reviewRequestScreenshotNew :: Integer -> FilePath -> RBAction RBResponse
reviewRequestScreenshotNew id fp = do
uri <- mkURI $ (reviewrequests (Just id) . screenshot . new) ""
let form = Form POST uri [fileUpload "path" fp ((contentType . extension) fp)]
runRequest form return
where
extension = reverse . takeWhile (/= '.') . reverse
contentType "png" = "image/png"
contentType "gif" = "image/gif"
contentType "jpg" = "image/jpeg"
contentType "jpeg" = "image/jpeg"
contentType _ = "text/plain"
reviewRequestListAll :: Maybe String -> RBAction RBResponse
reviewRequestListAll (Just s) = get (reviewrequests Nothing . all) [textField (show STATUS) s]
reviewRequestListAll Nothing = get (reviewrequests Nothing . all) []
reviewRequestListToGroup :: String -> Maybe String -> RBAction RBResponse
reviewRequestListToGroup g (Just s) = get (reviewrequests Nothing . to . group (Just g)) [textField (show STATUS) s]
reviewRequestListToGroup g Nothing = get (reviewrequests Nothing . to . group (Just g)) []
reviewRequestListToUser :: String -> Bool -> Maybe String -> RBAction RBResponse
reviewRequestListToUser u True (Just s) = get (rr2u u . directly) [textField (show STATUS) s]
reviewRequestListToUser u True Nothing = get (rr2u u . directly) []
reviewRequestListToUser u False (Just s) = get (rr2u u) [textField (show STATUS) s]
reviewRequestListToUser u False Nothing = get (rr2u u) []
rr2u u = reviewrequests Nothing . to . user (Just u)
reviewRequestListFromUser :: String -> Maybe String -> RBAction RBResponse
reviewRequestListFromUser u (Just s) = get (reviewrequests Nothing . from . user (Just u)) [textField (show STATUS) s]
reviewRequestListFromUser u Nothing = get (reviewrequests Nothing . from . user (Just u)) []
reviewAll :: Integer -> RBAction RBResponse
reviewAll id = get (reviewrequests (Just id) . reviews Nothing) []
reviewPublishDraft :: Integer -> RBAction RBResponse
reviewPublishDraft id = post (reviewrequests (Just id) . reviews Nothing . draft . publish) [checkBox "shipit" False]
reviewSaveDraft :: Integer -> RBAction RBResponse
reviewSaveDraft id = post (reviewrequests (Just id) . reviews Nothing . draft . save) []
reviewDeleteDraft :: Integer -> RBAction RBResponse
reviewDeleteDraft id = post (reviewrequests (Just id) . reviews Nothing . draft . delete) []
repositoryList :: RBAction RBResponse
repositoryList = get repositories []
execRBAction :: String -> String -> String -> (RBAction a) -> IO a
execRBAction url user password action = do
r <- runRBAction url user password action
either error return $ fst r