Add database stats

This commit is contained in:
kageru 2020-06-21 19:12:36 +02:00
parent c374a04417
commit b415ebb509
Signed by: kageru
GPG Key ID: 8282A2BEA4ADA3D2
2 changed files with 42 additions and 1 deletions

View File

@ -4,7 +4,7 @@ mod error;
use error::{Error, MpdResult};
use itertools::Itertools;
mod structs;
pub use structs::{Position, Status, Track};
pub use structs::{Position, Stats, Status, Track};
/// some unprintable character to separate repeated keys
const SEPARATOR: char = '\x02';
@ -280,4 +280,28 @@ OK";
let queue = read_playlist_info("OK".lines());
assert_eq!(queue, Ok(vec![]));
}
#[test]
fn de_stats_test() {
let input_str = "uptime: 23691
playtime: 11288
artists: 2841
albums: 2455
songs: 40322
db_playtime: 11620284
db_update: 1588433046";
let s: Stats = deserialize_response(input_str.lines()).unwrap();
assert_eq!(
s,
Stats {
uptime: Duration::from_secs(23691),
playtime: Duration::from_secs(11288),
artists: 2841,
albums: 2455,
songs: 40322,
db_playtime: Duration::from_secs(11620284),
db_update: 1588433046,
}
);
}
}

View File

@ -103,6 +103,23 @@ pub struct Status {
pub error: Option<String>,
}
/// Database statistics as returned by the `stats` command.
#[derive(Deserialize, Clone, Debug, Default, PartialEq)]
#[serde(default)]
pub struct Stats {
pub artists: u32,
pub albums: u32,
pub songs: u32,
#[serde(deserialize_with = "de_time_int")]
pub uptime: Duration,
#[serde(deserialize_with = "de_time_int")]
pub db_playtime: Duration,
// TODO: this is a unix era. use some datetime for it
pub db_update: u32,
#[serde(deserialize_with = "de_time_int")]
pub playtime: Duration,
}
/// Deserialization helpers to handle the quirks of mpd’s output.
mod helpers {
use super::*;