mx-sanebot: add command that can show torrent status

This commit is contained in:
Colin 2023-04-28 01:50:25 +00:00
parent afc916c9f8
commit 1c5a7b72ea

View File

@ -1,4 +1,7 @@
use std::borrow::ToOwned;
use std::fmt; use std::fmt;
use std::process;
use std::str;
pub struct MessageHandler; pub struct MessageHandler;
@ -14,10 +17,10 @@ impl MessageHandler {
fn parse_msg(&self, msg: &str) -> Result<Request, ()> { fn parse_msg(&self, msg: &str) -> Result<Request, ()> {
let msg = msg.trim(); let msg = msg.trim();
if msg == "!help" { match msg {
Ok(Request::Help) "!help" => Ok(Request::Help),
} else { "!bt" => Ok(Request::Bt),
Err(()) _ => Err(())
} }
} }
} }
@ -25,24 +28,41 @@ impl MessageHandler {
enum Request { enum Request {
Help, Help,
Bt,
} }
impl Request { impl Request {
fn evaluate(self) -> Response { fn evaluate(self) -> Response {
match self { match self {
Request::Help => Response::About, Request::Help => Response::Help,
Request::Bt => Response::Bt(
process::Command::new("sane-bt-show")
.output()
.ok()
.and_then(|output|
str::from_utf8(&output.stdout).ok().map(ToOwned::to_owned)
).unwrap_or_else(||
"failed to retrieve torrent status".to_owned())
),
} }
} }
} }
enum Response { enum Response {
About, Help,
Bt(String),
} }
impl fmt::Display for Response { impl fmt::Display for Response {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "commands:\n")?; match self {
write!(f, " !help => show this message\n")?; Response::Help => {
write!(f, "commands:\n")?;
write!(f, " !help => show this message\n")?;
write!(f, " !bt => show torrent statuses\n")?;
},
Response::Bt(stdout) => write!(f, "{}", stdout)?
}
Ok(()) Ok(())
} }
} }