mpris 2.1.0

Idiomatic MPRIS D-Bus interface library
Documentation
use mpris::PlayerFinder;
use std::time::{Duration, Instant};

fn main() {
    let player = PlayerFinder::new()
        .expect("Could not connect to D-Bus")
        .find_active()
        .expect("Could not find active player");

    println!(
        "Showing event stream for player {}...\n(Exit with Ctrl-C)\n",
        player.identity()
    );

    let events = player.events().expect("Could not start event stream");
    let start = Instant::now();

    for event in events {
        match event {
            Ok(event) => println!("{}: {:#?}", format_elapsed(start.elapsed()), event),
            Err(err) => {
                println!("D-Bus error: {}. Aborting.", err);
                break;
            }
        }
    }

    println!("Event stream ended.");
}

fn format_elapsed(duration: Duration) -> String {
    let seconds = duration.as_secs();
    let minutes = seconds / 60;
    let seconds_left = seconds - (60 * minutes);
    let ms = duration.subsec_millis();
    format!("{:02}:{:02}.{:3}", minutes, seconds_left, ms)
}