rtorrent-rpc-0.2.1.0: Network/RTorrent/CommandList.hs
{-# LANGUAGE TypeFamilies, RankNTypes #-}
{-|
Module : Commands
Copyright : (c) Kai Lindholm, 2014
License : MIT
Maintainer : megantti@gmail.com
Stability : experimental
A module for defined commands.
To combine multiple commands, use ':*:',
or store them in a list,
as both of these types have 'Command' instances.
-}
module Network.RTorrent.CommandList
( module Network.RTorrent.File
, module Network.RTorrent.Peer
, module Network.RTorrent.Priority
, module Network.RTorrent.Torrent
, module Network.RTorrent.Tracker
-- * Functions for global variables
, Global
, getUpRate
, getDownRate
, getDirectory
, getPid
, getUploadRate
, getDownloadRate
, setUploadRate
, setDownloadRate
-- * Loading new torrents
, loadTorrent
, loadTorrentRaw
, loadStartTorrent
, loadStartTorrentRaw
-- * Constructing new commands
, commandSimple
, commandArgs
, commandInt
, commandString
-- * Re-exported from "Network.RTorrent.Action"
, (<+>)
, sequenceActions
-- * Re-exported from "Network.RTorrent.Command"
, (:*:)(..)
, AnyCommand (..)
, Command (Ret)
)
where
import Network.XmlRpc.Internals
import Control.Applicative
import Data.ByteString (ByteString)
import Network.RTorrent.Action
import Network.RTorrent.Command.Internals
import Network.RTorrent.File
import Network.RTorrent.Peer
import Network.RTorrent.Priority
import Network.RTorrent.Torrent
import Network.RTorrent.Tracker
-- | Run a command with no arguments.
commandSimple :: XmlRpcType a => String -> Global a
commandSimple cmd = commandArgs cmd []
-- | Run a command with the given arguments.
commandArgs :: XmlRpcType a => String -> [Value] -> Global a
commandArgs = flip $ Global parseSingle
-- | Run a command with the @Int@ given as an argument.
commandInt :: XmlRpcType a => String -> Int -> Global a
commandInt cmd i = commandArgs cmd [ValueInt i]
-- | Run a command with the @String@ given as an argument.
commandString :: XmlRpcType a =>
String -- ^ Command
-> String -- ^ Argument
-> Global a
commandString cmd s = commandArgs cmd [ValueString s]
-- | Get the current up rate, in bytes per second.
getUpRate :: Global Int
getUpRate = commandSimple "get_up_rate"
-- | Get the current down rate, in bytes per second.
getDownRate :: Global Int
getDownRate = commandSimple "get_down_rate"
-- | Get the default download directory.
getDirectory :: Global String
getDirectory = fmap decodeUtf8 $ commandSimple "get_directory"
-- | Get the maximum upload rate, in bytes per second.
--
-- @0@ means no limit.
getUploadRate :: Global Int
getUploadRate = commandSimple "get_upload_rate"
-- | Get the maximum download rate, in bytes per second.
--
-- @0@ means no limit.
getDownloadRate :: Global Int
getDownloadRate = commandSimple "get_download_rate"
-- | Set the maximum upload rate, in bytes per second.
setUploadRate :: Int -> Global Int
setUploadRate = commandInt "set_upload_rate"
-- | Set the maximum download rate, in bytes per second.
setDownloadRate :: Int -> Global Int
setDownloadRate = commandInt "set_download_rate"
-- | Get the process id.
getPid :: Global Int
getPid = commandSimple "system.pid"
-- | Load a torrent file.
loadTorrent :: String -- ^ A path / URL
-> Global Int
loadTorrent = commandString "load"
-- | Load a torrent file.
loadTorrentRaw :: ByteString -- ^ A torrent file as data
-> Global Int
loadTorrentRaw torrentData = commandArgs "load_raw" [ValueBase64 torrentData]
-- | Load a torrent file and start downloading it.
loadStartTorrent :: String -- ^ A path / URL
-> Global Int
loadStartTorrent = commandString "load_start"
-- | Load a torrent file and start downloading it.
loadStartTorrentRaw :: ByteString -- ^ A torrent file as data
-> Global Int
loadStartTorrentRaw torrentData = commandArgs "load_raw_start" [ValueBase64 torrentData]
-- | Execute a command with a result type @t@.
data Global t = Global (forall m. (Monad m, Applicative m) => Value -> m t) [Value] String
instance Command (Global a) where
type Ret (Global a) = a
commandCall (Global _ args cmd) = mkRTMethodCall cmd args
commandValue (Global parse _ _) = parse
instance Functor Global where
fmap f (Global g args s) = Global (fmap f . g) args s