feat(queue): swap indices rpc
This commit is contained in:
@@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user