feat(queue): swap indices rpc

This commit is contained in:
2024-11-28 02:49:42 +01:00
parent 94b8b15f80
commit e69b45ca24
3 changed files with 51 additions and 1 deletions

View File

@@ -12,7 +12,7 @@ use crate::{
player::{
player_server::Player, PauseState, PlayTrackResponse, PlayerStatus, Queue,
SeekPositionRequest, SeekPositionResponse, SetVolumeRequest, SetVolumeResponse,
SkipToQueueIndexRequest, TrackRequest,
SkipToQueueIndexRequest, SwapQueueIndicesRequest, TrackRequest,
},
},
state::GrooveState,
@@ -283,4 +283,34 @@ impl Player for PlayerService {
Ok(tonic::Response::new(response))
}
async fn swap_queue_indices(
&self,
request: tonic::Request<SwapQueueIndicesRequest>,
) -> Result<tonic::Response<Queue>, tonic::Status> {
let input = request.get_ref();
let Ok(a) = input.a.try_into() else {
return Err(tonic::Status::internal(""));
};
let Ok(b) = input.b.try_into() else {
return Err(tonic::Status::internal(""));
};
let state = self.state.lock().await;
let mut player = state.player.lock().await;
if !player.swap_queue_indices(a, b).await {
return Err(tonic::Status::internal(""));
};
let queue = player.queue().await;
let response = Queue {
tracks: queue_to_track_vec(queue),
};
Ok(tonic::Response::new(response))
}
}