apply suggestions, improve errors

This commit is contained in:
Felix Prillwitz 2024-12-17 17:13:20 +01:00
parent 51eb100e77
commit 60378c6fb1
No known key found for this signature in database
GPG key ID: DE334B43606D1455
4 changed files with 20 additions and 12 deletions

View file

@ -50,6 +50,8 @@ use tokio::{sync::mpsc, time::sleep};
pub enum SpircError {
#[error("response payload empty")]
NoData,
#[error("{0} had no uri")]
NoUri(&'static str),
#[error("message pushed for another URI")]
InvalidUri(String),
#[error("tried resolving not allowed context: {0:?}")]
@ -64,7 +66,7 @@ impl From<SpircError> for Error {
fn from(err: SpircError) -> Self {
use SpircError::*;
match err {
NoData | NotAllowedContext(_) => Error::unavailable(err),
NoData | NoUri(_) | NotAllowedContext(_) => Error::unavailable(err),
InvalidUri(_) | FailedDealerSetup => Error::aborted(err),
UnknownEndpoint(_) => Error::unimplemented(err),
}
@ -1037,7 +1039,11 @@ impl SpircTask {
.map(|o| o.repeating_track.unwrap_or_default())
.unwrap_or_else(|| self.connect_state.repeat_track());
let context_uri = play.context.uri.as_ref().ok_or(SpircError::NoData)?.clone();
let context_uri = play
.context
.uri
.clone()
.ok_or(SpircError::NoUri("context"))?;
self.handle_load(
SpircLoadCommand {
@ -1093,7 +1099,7 @@ impl SpircTask {
fn handle_transfer(&mut self, mut transfer: TransferState) -> Result<(), Error> {
let mut ctx_uri = match transfer.current_session.context.uri {
None => Err(SpircError::NoData)?,
None => Err(SpircError::NoUri("transfer context"))?,
Some(ref uri) => uri.clone(),
};
@ -1517,7 +1523,9 @@ impl SpircTask {
&mut self,
playlist_modification_info: PlaylistModificationInfo,
) -> Result<(), Error> {
let uri = playlist_modification_info.uri.ok_or(SpircError::NoData)?;
let uri = playlist_modification_info
.uri
.ok_or(SpircError::NoUri("playlist modification"))?;
let uri = String::from_utf8(uri)?;
if self.connect_state.context_uri() != &uri {

View file

@ -44,14 +44,15 @@ const SPOTIFY_MAX_NEXT_TRACKS_SIZE: usize = 80;
pub enum StateError {
#[error("the current track couldn't be resolved from the transfer state")]
CouldNotResolveTrackFromTransfer,
#[error("message field {0} was not available")]
MessageFieldNone(String),
#[error("context is not available. type: {0:?}")]
NoContext(ContextType),
#[error("could not find track {0:?} in context of {1}")]
CanNotFindTrackInContext(Option<usize>, usize),
#[error("currently {action} is not allowed because {reason}")]
CurrentlyDisallowed { action: String, reason: String },
CurrentlyDisallowed {
action: &'static str,
reason: String,
},
#[error("the provided context has no tracks")]
ContextHasNoTracks,
#[error("playback of local files is not supported")]
@ -65,7 +66,6 @@ impl From<StateError> for Error {
use StateError::*;
match err {
CouldNotResolveTrackFromTransfer
| MessageFieldNone(_)
| NoContext(_)
| CanNotFindTrackInContext(_, _)
| ContextHasNoTracks

View file

@ -196,7 +196,7 @@ impl ConnectState {
let mut new_context = self.state_context_from_page(
page,
context.restrictions.take(),
context.uri.as_ref(),
context.uri.as_deref(),
None,
);
@ -236,7 +236,7 @@ impl ConnectState {
self.autoplay_context = Some(self.state_context_from_page(
page,
context.restrictions.take(),
context.uri.as_ref(),
context.uri.as_deref(),
Some(Provider::Autoplay),
))
}
@ -249,7 +249,7 @@ impl ConnectState {
&mut self,
page: ContextPage,
restrictions: Option<Restrictions>,
new_context_uri: Option<&String>,
new_context_uri: Option<&str>,
provider: Option<Provider>,
) -> StateContext {
let new_context_uri = new_context_uri.unwrap_or(self.context_uri());

View file

@ -41,7 +41,7 @@ impl ConnectState {
.first()
{
Err(StateError::CurrentlyDisallowed {
action: "shuffle".to_string(),
action: "shuffle",
reason: reason.clone(),
})?
}