diff --git a/README.md b/README.md index 40893d2..ccf683b 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ spec: https://github.com/transmission/transmission/blob/master/extras/rpc-spec.t - [ ] session-set - [X] session-get - [X] session-stats -- [ ] blocklist-update +- [X] blocklist-update - [ ] port-test - [ ] session-close - [ ] free-space diff --git a/examples/blocklist-update.rs b/examples/blocklist-update.rs new file mode 100644 index 0000000..e7c82f2 --- /dev/null +++ b/examples/blocklist-update.rs @@ -0,0 +1,26 @@ +extern crate transmission_rpc; + +use dotenv::dotenv; +use std::env; +use transmission_rpc::types::{BasicAuth, BlocklistUpdate, Result, RpcResponse}; +use transmission_rpc::TransClient; + +#[tokio::main] +async fn main() -> Result<()> { + dotenv().ok(); + env_logger::init(); + let url = env::var("TURL")?; + let client; + if let (Ok(user), Ok(password)) = (env::var("TUSER"), env::var("TPWD")) { + client = TransClient::with_auth(&url, BasicAuth {user, password}); + } else { + client = TransClient::new(&url); + } + let response: Result> = client.blocklist_update().await; + match response { + Ok(_) => println!("Yay!"), + Err(_) => panic!("Oh no!") + } + println!("Rpc response is ok: {}", response?.is_ok()); + Ok(()) +} diff --git a/src/lib.rs b/src/lib.rs index b704461..4526cbd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,6 +9,7 @@ use serde::de::DeserializeOwned; pub mod types; use types::BasicAuth; +use types::BlocklistUpdate; use types::SessionGet; use types::SessionStats; use types::TorrentAction; @@ -148,6 +149,42 @@ impl TransClient { self.call(RpcRequest::session_stats()).await } + /// Performs a blocklist update call + /// + /// # Errors + /// + /// Any IO Error or Deserialization error + /// + /// # Example + /// + /// ``` + /// extern crate transmission_rpc; + /// + /// use std::env; + /// use dotenv::dotenv; + /// use transmission_rpc::TransClient; + /// use transmission_rpc::types::{Result, BlockListUpdate, RpcResponse, BasicAuth}; + /// + /// #[tokio::main] + /// async fn main() -> Result<()> { + /// dotenv().ok(); + /// env_logger::init(); + /// let url= env::var("TURL")?; + /// let basic_auth = BasicAuth{user: env::var("TUSER")?, password: env::var("TPWD")?}; + /// let client = TransClient::with_auth(&url, basic_auth); + /// let response: Result> = client.blocklist_update().await; + /// match response { + /// Ok(_) => println!("Yay!"), + /// Err(_) => panic!("Oh no!") + /// } + /// println!("Rpc reqsponse is ok: {}", response?.is_ok()); + /// Ok(()) + /// } + /// ``` + pub async fn blocklist_update(&self) -> Result> { + self.call(RpcRequest::blocklist_update()).await + } + /// Performs a torrent get call /// fileds - if None then ALL fields /// ids - if None then All items diff --git a/src/types/mod.rs b/src/types/mod.rs index 272fa90..d7670c2 100644 --- a/src/types/mod.rs +++ b/src/types/mod.rs @@ -22,6 +22,7 @@ pub use self::response::RpcResponse; pub(crate) use self::response::RpcResponseArgument; pub use self::response::SessionGet; pub use self::response::SessionStats; +pub use self::response::BlocklistUpdate; pub use self::response::Torrent; pub use self::response::TorrentAdded; pub use self::response::Torrents; diff --git a/src/types/request.rs b/src/types/request.rs index dd66f4d..37589d9 100644 --- a/src/types/request.rs +++ b/src/types/request.rs @@ -23,6 +23,13 @@ impl RpcRequest { } } + pub fn blocklist_update() -> RpcRequest { + RpcRequest { + method: String::from("blocklist-update"), + arguments: None, + } + } + pub fn torrent_get(fields: Option>, ids: Option>) -> RpcRequest { let string_fields = fields .unwrap_or(TorrentGetField::all()) diff --git a/src/types/response.rs b/src/types/response.rs index a16292b..a4b3587 100644 --- a/src/types/response.rs +++ b/src/types/response.rs @@ -46,6 +46,13 @@ pub struct SessionStats { } impl RpcResponseArgument for SessionStats {} +#[derive(Deserialize, Debug, Clone)] +pub struct BlocklistUpdate { + #[serde(rename = "blocklist-size")] + pub blocklist_size: Option, +} +impl RpcResponseArgument for BlocklistUpdate {} + #[derive(Deserialize, Debug, RustcEncodable, Clone)] pub struct Torrent { #[serde(rename = "addedDate")]