1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
#![doc = include_str!("../README.md")]
mod config;
mod platform;
use std::{fmt::Debug, time::Duration};
pub use config::*;
pub use platform::{Error, MediaControls};
/// The status of media playback.
#[derive(Clone, PartialEq, Eq, Debug)]
pub enum MediaPlayback {
Stopped,
Paused { progress: Option<MediaPosition> },
Playing { progress: Option<MediaPosition> },
}
/// The metadata of a media item.
#[derive(Clone, PartialEq, Eq, Debug, Default)]
pub struct MediaMetadata<'a> {
pub title: Option<&'a str>,
pub album: Option<&'a str>,
pub artist: Option<&'a str>,
pub cover_url: Option<&'a str>,
pub duration: Option<Duration>,
}
/// Events sent by the OS media controls.
#[derive(Clone, PartialEq, Debug)]
pub enum MediaControlEvent {
Play,
Pause,
Toggle,
Next,
Previous,
Stop,
/// Seek forward or backward by an undetermined amount.
Seek(SeekDirection),
/// Seek forward or backward by a certain amount.
SeekBy(SeekDirection, Duration),
/// Set the position/progress of the currently playing media item.
SetPosition(MediaPosition),
/// Sets the volume. The value is intended to be from 0.0 to 1.0.
/// But other values are also accepted. **It is up to the user to
/// set constraints on this value.**
/// **NOTE**: If the volume event was received and correctly handled,
/// the user must call [`MediaControls::set_volume`]. Note that
/// this must be done only with the MPRIS backend.
SetVolume(f64),
/// Open the URI in the media player.
OpenUri(String),
/// Bring the media player's user interface to the front using any appropriate mechanism available.
Raise,
/// Shut down the media player.
Quit,
}
/// An instant in a media item.
#[derive(Clone, Copy, PartialEq, Eq, Debug)]
pub struct MediaPosition(pub Duration);
/// The direction to seek in.
#[derive(Copy, Clone, PartialEq, Eq, Debug)]
pub enum SeekDirection {
Forward,
Backward,
}
impl Drop for MediaControls {
fn drop(&mut self) {
// Ignores errors if there are any.
self.detach().ok();
}
}
impl Debug for MediaControls {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.write_str("MediaControls")?;
Ok(())
}
}