diff --git a/proto/player.proto b/proto/player.proto index 15a5fae..0cfb3ff 100644 --- a/proto/player.proto +++ b/proto/player.proto @@ -78,4 +78,5 @@ message TracksRequest { message PlayPlaylistRequest { uint32 id = 1; + optional uint32 starting_rank = 2; } diff --git a/src/player.rs b/src/player.rs index ef7cb63..dc5c9ef 100644 --- a/src/player.rs +++ b/src/player.rs @@ -259,8 +259,11 @@ impl Player for PlayerService { let tracks = playlist.tracks.iter().map(|t| t.clone().into()); - let tracks_and_paths: Vec<(Track, PathBuf)> = - tracks.into_iter().zip(track_paths.into_iter()).collect(); + let tracks_and_paths: Vec<(Track, PathBuf)> = tracks + .into_iter() + .zip(track_paths.into_iter()) + .skip(input.starting_rank.unwrap_or(0) as usize) + .collect(); if let Err(_) = player.add_tracks_to_queue(tracks_and_paths, true).await { return Err(tonic::Status::internal(""));