Skip to main content

PlayerCommand

Enum PlayerCommand 

Source
pub enum PlayerCommand {
Show 41 variants Play(QueueItemId), Cue { id: QueueItemId, position_ms: u64, play: bool, }, Pause, PauseAndReport(Sender<u64>), Resume, Stop, Seek(u64), NextTrack, PrevTrack, AddToPlaylist(Vec<PlaylistItem>), RemoveFromPlaylist(QueueItemId), RemoveFromPlaylistBatch(Vec<QueueItemId>), MoveInPlaylist { id: QueueItemId, target: QueueItemId, after: bool, }, MoveItemsInPlaylist { ids: Vec<QueueItemId>, target: QueueItemId, after: bool, }, ReorderPlaylist(Vec<QueueItemId>), UpdatePaths(Vec<(QueueItemId, PathBuf)>), InsertInPlaylist { items: Vec<PlaylistItem>, after: QueueItemId, }, ClearPlaylist, ReplacePlaylist { items: Vec<PlaylistItem>, start: usize, position_ms: u64, play: bool, }, TrackReady(QueueItemId), TrackStreamReady(QueueItemId), StreamProbed { id: QueueItemId, info: Box<StreamInfo>, mode: ProbeMode, }, TrackFailed(QueueItemId), CacheTracks(Vec<i64>), DecodeFinished(u64), TrackQueued, Undo, Redo, BeginUndoBatch, EndUndoBatch, SetOutputDevice(String), ClearOutputDevice, ReloadDsp, RestartOutput, UseRenderer(Option<Box<Connection>>), ResumeRenderer(Box<Connection>), SetRendererVolume(u8), SetShuffle(bool), SetRepeat(Repeat), RestorePlayMode(PlayMode), Renderer { session: u64, event: Event, },
}
Expand description

Commands from the UI layer to the audio engine.

Variants§

§

Play(QueueItemId)

Set the cursor and start playback.

§

Cue

Set the cursor and load id at position_ms, playing or paused.

What a restored session does. Play, Seek and Pause in turn would start the track from the top and let a moment of it out before the pause.

Fields

§position_ms: u64
§play: bool
§

Pause

§

PauseAndReport(Sender<u64>)

Pause, and answer with the playhead once the output has gone silent: after the fade, where one runs. What a hand-off resumes from.

§

Resume

§

Stop

§

Seek(u64)

§

NextTrack

§

PrevTrack

§

AddToPlaylist(Vec<PlaylistItem>)

§

RemoveFromPlaylist(QueueItemId)

§

RemoveFromPlaylistBatch(Vec<QueueItemId>)

Batch remove: delete multiple items as a single undoable operation.

§

MoveInPlaylist

Fields

§after: bool
§

MoveItemsInPlaylist

Batch move: extract ids and reinsert them at target position.

Fields

§after: bool
§

ReorderPlaylist(Vec<QueueItemId>)

Put the queue in exactly this order, keeping every item.

A queue locked to a playlist follows it, and following a reorder means moving the items that are already there — rebuilding them would issue new ids and throw away what has played, what is mid-download and where the cursor is. Ids not named keep their relative order at the end.

§

UpdatePaths(Vec<(QueueItemId, PathBuf)>)

Update file paths for playlist items after an organize operation. On Unix, rename() doesn’t invalidate open FDs so playback continues.

§

InsertInPlaylist

Insert items after a specific queue item (for drag/drop at cursor position).

Fields

§

ClearPlaylist

Clear the entire playlist (stop + remove all items).

§

ReplacePlaylist

Replace the playlist and open the track at start, as one operation: from position_ms, playing or paused.

Doing this as ClearPlaylist + AddToPlaylist + Play sends three commands down a bounded channel, and the player acts on each as it arrives: the first track starts, then the cursor jumps, so clicking track nine of an album shows track one playing first. It is three undo entries for one user action. And between the clear and the add the playlist is empty, which tells the download queue that nothing is wanted.

start past the end starts at the beginning. It opens at position_ms, playing or paused, as Cue does: a hand-off picks up where the source stopped without the top of the track being heard.

Fields

§start: usize
§position_ms: u64
§play: bool
§

TrackReady(QueueItemId)

Download complete — check if cursor is waiting on this item.

§

TrackStreamReady(QueueItemId)

Enough data buffered for streaming playback — check if cursor is waiting.

§

StreamProbed

A partial file has been probed off-thread and can be started.

Probing reads as much of the container as it takes to describe itself, which for Ogg means its last page — the whole remaining download. That cannot happen on this loop, so it happens on its own thread and arrives here as a command like anything else. Stale by the time it lands is the normal case, and simply ignored.

Fields

§mode: ProbeMode

What the probe had to settle for. Decoding has to be opened the same way — given a length, a container that went looking for its tail once will do it again, on the decode thread, where the cost is silence instead of a busy player.

§

TrackFailed(QueueItemId)

Download failed — a cursor parked on this item must stop waiting.

Without it the player sits on a Pending item forever: Ready is the only thing it listens for, and a track that cannot be fetched never becomes Ready. That is the offline-library stall.

§

CacheTracks(Vec<i64>)

Fetch these tracks into the cache, with no queue entry to play them.

§

DecodeFinished(u64)

Decode thread exhausted the playlist — auto-advance or stop. Carries the session it came from, so one sent just before a play or seek is recognised as stale.

§

TrackQueued

The decoder queued the next track, so when the playhead reaches it is now known.

§

Undo

Undo the last reversible playlist operation.

§

Redo

Redo the last undone operation.

§

BeginUndoBatch

Begin collecting undo entries into a single batch (e.g. drag operations).

§

EndUndoBatch

End the batch — collapse collected entries into one undo step.

§

SetOutputDevice(String)

Switch output audio device by name. Restarts engine on current track.

§

ClearOutputDevice

Clear the configured output device, reverting to system default.

§

ReloadDsp

The DSP profiles, or the device they key on, changed: load them again and carry on where playback is.

§

RestartOutput

Build the output again on the same device and carry on from where the current track is, paused if it was. For an output the system stopped underneath us: an iOS interruption (a call, Siri) or a reset of its media services leaves the old unit unable to start again.

§

UseRenderer(Option<Box<Connection>>)

Play to this renderer from now on, carrying on from where the current track is; None brings the music back to this device’s own output. The session is opened by the caller, off this thread: see upnp::connect.

§

ResumeRenderer(Box<Connection>)

The renderer last used, found on the network after launch. Taken as UseRenderer would be, unless playback or the output has moved since launch, in which case it is dropped: see upnp::resume.

§

SetRendererVolume(u8)

Set the volume of the renderer being played to, 0–100.

§

SetShuffle(bool)

Turn shuffle on or off: the items after the cursor reordered at random, or put back as they were. One undo step.

§

SetRepeat(Repeat)

What follows a track at its end: the queue’s next, the first again after the last, or the same item.

§

RestorePlayMode(PlayMode)

Take the mode a saved session had, its queue already restored in the order it was saved. Shuffle reorders nothing here.

§

Renderer

What the renderer was heard to do, during the session numbered session. Dropped once that session is over, like DecodeFinished.

Fields

§session: u64
§event: Event

Implementations§

Source§

impl PlayerCommand

Source

pub fn asks_to_play(&self) -> bool

Whether it asks for something to be heard.

Trait Implementations§

Source§

impl Debug for PlayerCommand

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<S> FromSample<S> for S

Source§

fn from_sample_(s: S) -> S

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

Source§

fn into_sample(self) -> T

Source§

impl<T> Paint for T
where T: ?Sized,

Source§

fn fg(&self, value: Color) -> Painted<&T>

Returns a styled value derived from self with the foreground set to value.

This method should be used rarely. Instead, prefer to use color-specific builder methods like red() and green(), which have the same functionality but are pithier.

§Example

Set foreground color to white using fg():

use yansi::{Paint, Color};

painted.fg(Color::White);

Set foreground color to white using white().

use yansi::Paint;

painted.white();
Source§

fn primary(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Primary].

§Example
println!("{}", value.primary());
Source§

fn fixed(&self, color: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Fixed].

§Example
println!("{}", value.fixed(color));
Source§

fn rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the fg() set to [Color :: Rgb].

§Example
println!("{}", value.rgb(r, g, b));
Source§

fn black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Black].

§Example
println!("{}", value.black());
Source§

fn red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Red].

§Example
println!("{}", value.red());
Source§

fn green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Green].

§Example
println!("{}", value.green());
Source§

fn yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Yellow].

§Example
println!("{}", value.yellow());
Source§

fn blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Blue].

§Example
println!("{}", value.blue());
Source§

fn magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Magenta].

§Example
println!("{}", value.magenta());
Source§

fn cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: Cyan].

§Example
println!("{}", value.cyan());
Source§

fn white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: White].

§Example
println!("{}", value.white());
Source§

fn bright_black(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlack].

§Example
println!("{}", value.bright_black());
Source§

fn bright_red(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightRed].

§Example
println!("{}", value.bright_red());
Source§

fn bright_green(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightGreen].

§Example
println!("{}", value.bright_green());
Source§

fn bright_yellow(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightYellow].

§Example
println!("{}", value.bright_yellow());
Source§

fn bright_blue(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightBlue].

§Example
println!("{}", value.bright_blue());
Source§

fn bright_magenta(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.bright_magenta());
Source§

fn bright_cyan(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightCyan].

§Example
println!("{}", value.bright_cyan());
Source§

fn bright_white(&self) -> Painted<&T>

Returns self with the fg() set to [Color :: BrightWhite].

§Example
println!("{}", value.bright_white());
Source§

fn bg(&self, value: Color) -> Painted<&T>

Returns a styled value derived from self with the background set to value.

This method should be used rarely. Instead, prefer to use color-specific builder methods like on_red() and on_green(), which have the same functionality but are pithier.

§Example

Set background color to red using fg():

use yansi::{Paint, Color};

painted.bg(Color::Red);

Set background color to red using on_red().

use yansi::Paint;

painted.on_red();
Source§

fn on_primary(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Primary].

§Example
println!("{}", value.on_primary());
Source§

fn on_fixed(&self, color: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Fixed].

§Example
println!("{}", value.on_fixed(color));
Source§

fn on_rgb(&self, r: u8, g: u8, b: u8) -> Painted<&T>

Returns self with the bg() set to [Color :: Rgb].

§Example
println!("{}", value.on_rgb(r, g, b));
Source§

fn on_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Black].

§Example
println!("{}", value.on_black());
Source§

fn on_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Red].

§Example
println!("{}", value.on_red());
Source§

fn on_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Green].

§Example
println!("{}", value.on_green());
Source§

fn on_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Yellow].

§Example
println!("{}", value.on_yellow());
Source§

fn on_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Blue].

§Example
println!("{}", value.on_blue());
Source§

fn on_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Magenta].

§Example
println!("{}", value.on_magenta());
Source§

fn on_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: Cyan].

§Example
println!("{}", value.on_cyan());
Source§

fn on_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: White].

§Example
println!("{}", value.on_white());
Source§

fn on_bright_black(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlack].

§Example
println!("{}", value.on_bright_black());
Source§

fn on_bright_red(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightRed].

§Example
println!("{}", value.on_bright_red());
Source§

fn on_bright_green(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightGreen].

§Example
println!("{}", value.on_bright_green());
Source§

fn on_bright_yellow(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightYellow].

§Example
println!("{}", value.on_bright_yellow());
Source§

fn on_bright_blue(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightBlue].

§Example
println!("{}", value.on_bright_blue());
Source§

fn on_bright_magenta(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightMagenta].

§Example
println!("{}", value.on_bright_magenta());
Source§

fn on_bright_cyan(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightCyan].

§Example
println!("{}", value.on_bright_cyan());
Source§

fn on_bright_white(&self) -> Painted<&T>

Returns self with the bg() set to [Color :: BrightWhite].

§Example
println!("{}", value.on_bright_white());
Source§

fn attr(&self, value: Attribute) -> Painted<&T>

Enables the styling Attribute value.

This method should be used rarely. Instead, prefer to use attribute-specific builder methods like bold() and underline(), which have the same functionality but are pithier.

§Example

Make text bold using attr():

use yansi::{Paint, Attribute};

painted.attr(Attribute::Bold);

Make text bold using using bold().

use yansi::Paint;

painted.bold();
Source§

fn bold(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Bold].

§Example
println!("{}", value.bold());
Source§

fn dim(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Dim].

§Example
println!("{}", value.dim());
Source§

fn italic(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Italic].

§Example
println!("{}", value.italic());
Source§

fn underline(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Underline].

§Example
println!("{}", value.underline());

Returns self with the attr() set to [Attribute :: Blink].

§Example
println!("{}", value.blink());

Returns self with the attr() set to [Attribute :: RapidBlink].

§Example
println!("{}", value.rapid_blink());
Source§

fn invert(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Invert].

§Example
println!("{}", value.invert());
Source§

fn conceal(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Conceal].

§Example
println!("{}", value.conceal());
Source§

fn strike(&self) -> Painted<&T>

Returns self with the attr() set to [Attribute :: Strike].

§Example
println!("{}", value.strike());
Source§

fn quirk(&self, value: Quirk) -> Painted<&T>

Enables the yansi Quirk value.

This method should be used rarely. Instead, prefer to use quirk-specific builder methods like mask() and wrap(), which have the same functionality but are pithier.

§Example

Enable wrapping using .quirk():

use yansi::{Paint, Quirk};

painted.quirk(Quirk::Wrap);

Enable wrapping using wrap().

use yansi::Paint;

painted.wrap();
Source§

fn mask(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Mask].

§Example
println!("{}", value.mask());
Source§

fn wrap(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Wrap].

§Example
println!("{}", value.wrap());
Source§

fn linger(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Linger].

§Example
println!("{}", value.linger());
Source§

fn clear(&self) -> Painted<&T>

👎Deprecated since 1.0.1:

renamed to resetting() due to conflicts with Vec::clear(). The clear() method will be removed in a future release.

Returns self with the quirk() set to [Quirk :: Clear].

§Example
println!("{}", value.clear());
Source§

fn resetting(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Resetting].

§Example
println!("{}", value.resetting());
Source§

fn bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: Bright].

§Example
println!("{}", value.bright());
Source§

fn on_bright(&self) -> Painted<&T>

Returns self with the quirk() set to [Quirk :: OnBright].

§Example
println!("{}", value.on_bright());
Source§

fn whenever(&self, value: Condition) -> Painted<&T>

Conditionally enable styling based on whether the Condition value applies. Replaces any previous condition.

See the crate level docs for more details.

§Example

Enable styling painted only when both stdout and stderr are TTYs:

use yansi::{Paint, Condition};

painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);
Source§

fn new(self) -> Painted<Self>
where Self: Sized,

Create a new Painted with a default Style. Read more
Source§

fn paint<S>(&self, style: S) -> Painted<&Self>
where S: Into<Style>,

Apply a style wholesale to self. Any previous style is replaced. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

Source§

fn to_sample_(self) -> U

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more