pub enum LinkCommand {
Show 37 variants
Play {
track_ids: Vec<String>,
start_at: u32,
position_ms: u64,
paused: bool,
handoff: bool,
mode: QueueMode,
},
Enqueue {
track_ids: Vec<String>,
},
PlayNext {
track_ids: Vec<String>,
},
Remove {
track_ids: Vec<String>,
},
Clear,
Sync {
full: bool,
},
Evict {
track_ids: Vec<String>,
},
JumpTo {
track_id: String,
},
Seek {
position_ms: u64,
},
Pause,
Resume,
Next,
Previous,
PlayItem {
id: String,
},
RemoveItems {
ids: Vec<String>,
},
MoveItems {
ids: Vec<String>,
target: String,
after: bool,
},
Insert {
track_ids: Vec<String>,
after: String,
},
Undo,
Redo,
Shuffle {
on: bool,
},
Repeat {
mode: Repeat,
},
SleepTimer {
timer: Option<SleepTimer>,
},
HandOff {
to: String,
},
Devices {
devices: Vec<LinkDevice>,
},
DeviceKeys {
keys: Vec<LinkDeviceKey>,
},
Shares {
grantees: Vec<String>,
error: Option<String>,
accounts: Vec<String>,
},
Shared {
command: Box<LinkCommand>,
},
Forgotten {
device: String,
},
HistoryChanged,
DspProfilesChanged,
SetOutput {
output: OutputChoice,
},
RefreshOutputs,
SetRendererVolume {
volume: u8,
},
SetPreset {
device: String,
profile: Option<String>,
},
WatchLevels {
on: bool,
},
Levels {
from: String,
f: Frame,
},
Acked {
from: String,
ack: u64,
outcome: AckOutcome,
},
}Expand description
What a server asks a linked client to do.
Variants§
Play
Replace the queue with these tracks and play from start_at,
position_ms into it — or load it there paused, when paused.
Fields
Enqueue
Append these tracks to the queue.
PlayNext
Insert these tracks after the current one.
Remove
Take every queue entry for these tracks out of the queue.
Clear
Sync
Pull what the server has changed: library, favourites and playlists.
The library is walked only if the server says it moved, unless full,
which walks it regardless.
Evict
Delete the downloaded copies of these tracks, so the next play fetches them again: for a copy that was cached while the server’s was bad.
JumpTo
Play this track: from where it sits in the queue, or slotted in after the current one when the queue does not hold it.
Seek
Pause
Resume
Next
Previous
PlayItem
Play this queue entry, by the id the device reported it under. Unlike
JumpTo it names one entry of a track queued twice, and reaches a file
only that device has.
RemoveItems
MoveItems
Move these queue entries before or after target, in the order given.
Insert
Insert these tracks after the queue entry after.
Undo
Redo
Shuffle
Turn shuffle on or off. The queue keeps its order; shuffle picks which track yet to play this pass plays next.
Repeat
What follows a track at its end: off, queue or one.
SleepTimer
Set the sleep timer, or with none cancel it.
Fields
timer: Option<SleepTimer>HandOff
Send this device’s queue and playhead to the device to, as a play,
and pause here. The device holding the queue does it, so taking music
from another device and sending it there are one command.
Devices
The account’s other devices, as they are now. News rather than a command: sent whenever one of them changes, to links that asked for it.
Fields
devices: Vec<LinkDevice>DeviceKeys
The public keys the account’s devices, and devices shared with it,
prove themselves with on the local network (koanDeviceKeys). News,
as Devices is: sent when a device that registered a key links, and
whenever the account’s keys change. From the server alone, never from
the network: it is what the network’s claims are checked against.
Fields
keys: Vec<LinkDeviceKey>The accounts this device lets control it. News, as Devices is: sent
when it links and whenever the list changes.
command, sent by another account this device is shared with: run as
that account’s request, from the playback set (allowed_playback).
Forgotten
device was forgotten: drop it, however it was last heard of. News,
as Devices is.
HistoryChanged
The account’s play history on the server moved: a play recorded or
forgotten on one of its devices. The device reads what changed
(remote::history::sync).
DspProfilesChanged
The account’s EQ profiles kept everywhere moved on the server: one
changed or deleted on another of its devices. The device reads what
changed (remote::dsp_sync::sync).
SetOutput
Play through this output from now on, carrying on from where the music is, as the device’s own output menu would.
Fields
output: OutputChoiceRefreshOutputs
List the outputs again, and publish them if they moved: a controller has opened its output menu. Cheap, and answered by the link state.
SetRendererVolume
The volume of the renderer the device plays to, 0–100.
SetPreset
Play the output device through the DSP profile profile, or
untouched with None. A renderer is named by its UDN.
WatchLevels
Send this device’s audio levels (LinkReport::Levels) while on: a
controller has playing bars on screen. A device on the same network may
ask; levels say no more than the now-playing it already sees.
Levels
A frame of the levels of from, a device this one watches, relayed by
the server. News, like Devices.
Acked
The device from answered the command this device sent it under
ack: see remote::acks. Relayed by the server; news, like Levels.
Implementations§
Source§impl LinkCommand
impl LinkCommand
Sourcepub fn allowed_playback(&self) -> bool
pub fn allowed_playback(&self) -> bool
What a device that is not this account’s may have it do: play, pause,
skip and seek, change the queue, jump, set the volume and the sleep
timer, choose the output and the preset, and move the music here or
away. What it asks for runs as the asker’s request, never with this
account’s powers: nothing here changes the library, the config beyond
the output in use, or the account’s favourites, playlists or history,
and a track it names that the library lacks is not synced for (see
CommandSource).
For a device shared with another account, and one on the local network
under Full control.
Sourcepub fn from_the_network(&self, full: bool) -> Option<CommandSource>
pub fn from_the_network(&self, full: bool) -> Option<CommandSource>
How a command from a device on the local network runs here, if at
all: with full control (this device’s setting) the playback set, as
Nearby; without, a stranger’s narrower set, as Stranger.
Sourcepub fn relayable(&self) -> bool
pub fn relayable(&self) -> bool
Whether a client may have the server relay this to another device: the commands one device gives another. The server’s own news (the device list, the device keys, shares, forgettings, history) it alone originates; relayed, a forged copy would read as the server’s. Levels go only between live links, by their own route. Exhaustive, so a new variant is relayable only once someone decides it is.
Sourcepub fn live_only(&self) -> bool
pub fn live_only(&self) -> bool
Only worth saying to a device that is there to hear it: sent over a live route or not at all, never queued for an absent device and never a push to wake one.
Sourcepub fn allowed_nearby(&self) -> bool
pub fn allowed_nearby(&self) -> bool
Whether a device on the same network, which may belong to anyone, may send this under Playback only. Playback and the queue; nothing that touches the library or the files on disk.
Where the sound goes is not playback: an output switch reaches into the room, and a preset into the config. Those are the account’s own.
Source§impl LinkCommand
impl LinkCommand
Sourcepub fn track_ids_mut(&mut self) -> Vec<&mut String>
pub fn track_ids_mut(&mut self) -> Vec<&mut String>
Every track id the command carries, for translating between the server’s row ids and the uids it publishes.
Trait Implementations§
Source§impl Clone for LinkCommand
impl Clone for LinkCommand
Source§impl Debug for LinkCommand
impl Debug for LinkCommand
Source§impl<'de> Deserialize<'de> for LinkCommand
impl<'de> Deserialize<'de> for LinkCommand
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
impl Eq for LinkCommand
Source§impl From<LinkCommand> for Envelope
impl From<LinkCommand> for Envelope
Source§fn from(command: LinkCommand) -> Self
fn from(command: LinkCommand) -> Self
Source§impl PartialEq for LinkCommand
impl PartialEq for LinkCommand
Source§impl Serialize for LinkCommand
impl Serialize for LinkCommand
impl StructuralPartialEq for LinkCommand
Auto Trait Implementations§
impl Freeze for LinkCommand
impl RefUnwindSafe for LinkCommand
impl Send for LinkCommand
impl Sync for LinkCommand
impl Unpin for LinkCommand
impl UnsafeUnpin for LinkCommand
impl UnwindSafe for LinkCommand
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
impl<S, T> Duplex<S> for Twhere
T: FromSample<S> + ToSample<S>,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
impl<F, T> IntoSample<T> for Fwhere
T: FromSample<F>,
fn into_sample(self) -> T
Source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
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 bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
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>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
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 rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
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 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.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
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);