module Network.Syncthing.Post
(
config
, discovery
, ping
, sendError
, clearErrors
, reset
, restart
, shutdown
, upgrade
, ignores
, prio
, scan
) where
import Control.Applicative ((<$>))
import Control.Monad (join, (>=>))
import qualified Data.Map as Map
import Data.Maybe (maybeToList)
import Data.Text (Text)
import Network.Syncthing.Internal.Monad
import Network.Syncthing.Internal.Request
import Network.Syncthing.Internal.Types
maybeSystemMsg :: MonadSync m => SyncRequest -> SyncM m (Maybe SystemMsg)
maybeSystemMsg = queryMaybe >=> return . join
ping :: MonadSync m => SyncM m Text
ping = getPing <$> query postRequest { path = "/rest/system/ping" }
prio :: MonadSync m => FolderName -> Path -> SyncM m Need
prio folder filePath =
query postRequest { path = "/rest/db/prio"
, params = [ ("folder", folder) , ("file", filePath) ]
}
discovery :: MonadSync m => Device -> Server -> SyncM m ()
discovery device server =
send postRequest { path = "/rest/system/discovery"
, params = [("device", device), ("addr", server)]
}
config :: MonadSync m => Config -> SyncM m ()
config cfg = send postRequest { path = "/rest/system/config"
, method = post cfg
}
sendError :: MonadSync m => Text -> SyncM m ()
sendError msg = send postRequest { path = "/rest/system/error"
, method = post msg
}
clearErrors :: MonadSync m => SyncM m ()
clearErrors = send $ postRequest { path = "/rest/system/error/clear" }
ignores :: MonadSync m => FolderName -> [Text] -> SyncM m (Maybe [Text])
ignores folder ignoresList =
getIgnores <$> query postRequest { path = "/rest/db/ignores"
, method = post ignoresMap
, params = [("folder", folder)]
}
where
ignoresMap :: Map.Map Text [Text]
ignoresMap = Map.singleton "ignore" ignoresList
scan:: MonadSync m => FolderName -> Maybe Path -> SyncM m ()
scan folder subPath =
send postRequest { path = "/rest/db/scan"
, params = [("folder", folder)]
++ maybeToList (("sub",) <$> subPath)
}
restart :: MonadSync m => SyncM m SystemMsg
restart = query postRequest { path = "/rest/system/restart" }
shutdown :: MonadSync m => SyncM m SystemMsg
shutdown = query postRequest { path = "/rest/system/shutdown" }
reset :: MonadSync m => SyncM m SystemMsg
reset = query postRequest { path = "/rest/system/reset" }
upgrade :: MonadSync m => SyncM m (Maybe SystemMsg)
upgrade = maybeSystemMsg postRequest { path = "/rest/system/upgrade" }