Skip to content

Commit

Permalink
Merge pull request #414 from hasezoey/protoCleanup
Browse files Browse the repository at this point in the history
Cleanup proto definitions
  • Loading branch information
tramhao authored Jan 18, 2025
2 parents ddefbc1 + 84de546 commit e8247ed
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 124 deletions.
64 changes: 23 additions & 41 deletions lib/proto/player.proto
Original file line number Diff line number Diff line change
Expand Up @@ -2,39 +2,40 @@ syntax = "proto3";
package player;

service MusicPlayer {
rpc TogglePause(TogglePauseRequest) returns (TogglePauseResponse);
rpc SkipNext(SkipNextRequest) returns (SkipNextResponse);
rpc GetProgress(GetProgressRequest) returns (GetProgressResponse);
rpc VolumeUp(VolumeUpRequest) returns (VolumeReply);
rpc VolumeDown(VolumeDownRequest) returns (VolumeReply);
rpc CycleLoop(CycleLoopRequest) returns (CycleLoopReply);
rpc SpeedUp(SpeedUpRequest) returns (SpeedReply);
rpc SpeedDown(SpeedDownRequest) returns (SpeedReply);
rpc ToggleGapless(ToggleGaplessRequest) returns (ToggleGaplessReply);
rpc SeekForward(SeekForwardRequest) returns (PlayerTime);
rpc SeekBackward(SeekBackwardRequest) returns (PlayerTime);
rpc ReloadConfig(ReloadConfigRequest) returns (EmptyReply);
rpc ReloadPlaylist(ReloadPlaylistRequest) returns (EmptyReply);
rpc PlaySelected(PlaySelectedRequest) returns (EmptyReply);
rpc SkipPrevious(SkipPreviousRequest) returns (EmptyReply);

rpc SubscribeServerUpdates(EmptyReply) returns (stream StreamUpdates);
// Player Commands
rpc TogglePause(Empty) returns (TogglePauseResponse);
rpc SkipNext(Empty) returns (Empty);
rpc SkipPrevious(Empty) returns (Empty);
rpc GetProgress(Empty) returns (GetProgressResponse);
rpc VolumeUp(Empty) returns (VolumeReply);
rpc VolumeDown(Empty) returns (VolumeReply);
rpc SpeedUp(Empty) returns (SpeedReply);
rpc SpeedDown(Empty) returns (SpeedReply);
rpc ToggleGapless(Empty) returns (ToggleGaplessReply);
rpc SeekForward(Empty) returns (PlayerTime);
rpc SeekBackward(Empty) returns (PlayerTime);

// Playlist Commands
rpc PlaySelected(Empty) returns (Empty);
rpc CycleLoop(Empty) returns (Empty);
rpc ReloadPlaylist(Empty) returns (Empty);

// Misc Commands
rpc ReloadConfig(Empty) returns (Empty);
rpc SubscribeServerUpdates(Empty) returns (stream StreamUpdates);
}

message TogglePauseRequest {}
message Empty {}

message TogglePauseResponse {
uint32 status = 1;
}

message SkipNextRequest {}
message SkipNextResponse {}

message PlayerTime {
Duration position = 1;
Duration total_duration = 2;
}

message GetProgressRequest {}
message GetProgressResponse {
PlayerTime progress = 1;
uint32 current_track_index = 3;
Expand All @@ -47,38 +48,19 @@ message GetProgressResponse {
string radio_title = 9;
}

message VolumeUpRequest {}
message VolumeDownRequest {}
message VolumeReply {
// actually a u16, but protobuf does not support types lower than 32 bits
uint32 volume = 1;
}

message CycleLoopRequest {}
message CycleLoopReply {}

message SpeedUpRequest {}
message SpeedDownRequest {}
message SpeedReply {
int32 speed = 1;
}

message ToggleGaplessRequest {}
message ToggleGaplessReply {
bool gapless = 1;
}

message SeekForwardRequest {}
message SeekBackwardRequest {}

message ReloadConfigRequest {}
message ReloadPlaylistRequest {}

message EmptyReply {}

message PlaySelectedRequest {}
message SkipPreviousRequest {}

// using a custom Duration that matches rust's definition, as rust's may not fit
// into google's well-known Duration
message Duration {
Expand Down
85 changes: 24 additions & 61 deletions server/src/music_player_service.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,8 @@ use std::pin::Pin;
use std::sync::Arc;
use termusiclib::player::music_player_server::MusicPlayer;
use termusiclib::player::{
stream_updates, CycleLoopReply, CycleLoopRequest, EmptyReply, GetProgressRequest,
GetProgressResponse, PlaySelectedRequest, PlayerTime, ReloadConfigRequest,
ReloadPlaylistRequest, SeekBackwardRequest, SeekForwardRequest, SkipNextRequest,
SkipNextResponse, SkipPreviousRequest, SpeedDownRequest, SpeedReply, SpeedUpRequest,
StreamUpdates, ToggleGaplessReply, ToggleGaplessRequest, TogglePauseRequest,
TogglePauseResponse, UpdateMissedEvents, VolumeDownRequest, VolumeReply, VolumeUpRequest,
stream_updates, Empty, GetProgressResponse, PlayerTime, SpeedReply, StreamUpdates,
ToggleGaplessReply, TogglePauseResponse, UpdateMissedEvents, VolumeReply,
};
use termusicplayback::{PlayerCmd, PlayerCmdSender, StreamTX};
use tokio_stream::wrappers::errors::BroadcastStreamRecvError;
Expand Down Expand Up @@ -48,18 +44,15 @@ impl MusicPlayerService {

#[tonic::async_trait]
impl MusicPlayer for MusicPlayerService {
async fn cycle_loop(
&self,
_request: Request<CycleLoopRequest>,
) -> Result<Response<CycleLoopReply>, Status> {
let reply = CycleLoopReply {};
async fn cycle_loop(&self, _request: Request<Empty>) -> Result<Response<Empty>, Status> {
let reply = Empty {};
self.command(&PlayerCmd::CycleLoop);

Ok(Response::new(reply))
}
async fn get_progress(
&self,
_request: Request<GetProgressRequest>,
_request: Request<Empty>,
) -> Result<Response<GetProgressResponse>, Status> {
let mut r = self.player_stats.lock();
let reply = r.as_getprogress_response();
Expand All @@ -70,39 +63,30 @@ impl MusicPlayer for MusicPlayerService {
Ok(Response::new(reply))
}

async fn play_selected(
&self,
_request: Request<PlaySelectedRequest>,
) -> Result<Response<EmptyReply>, Status> {
let reply = EmptyReply {};
async fn play_selected(&self, _request: Request<Empty>) -> Result<Response<Empty>, Status> {
let reply = Empty {};
self.command(&PlayerCmd::PlaySelected);

Ok(Response::new(reply))
}

async fn reload_config(
&self,
_request: Request<ReloadConfigRequest>,
) -> Result<Response<EmptyReply>, Status> {
let reply = EmptyReply {};
async fn reload_config(&self, _request: Request<Empty>) -> Result<Response<Empty>, Status> {
let reply = Empty {};
self.command(&PlayerCmd::ReloadConfig);

Ok(Response::new(reply))
}

async fn reload_playlist(
&self,
_request: Request<ReloadPlaylistRequest>,
) -> Result<Response<EmptyReply>, Status> {
let reply = EmptyReply {};
async fn reload_playlist(&self, _request: Request<Empty>) -> Result<Response<Empty>, Status> {
let reply = Empty {};
self.command(&PlayerCmd::ReloadPlaylist);

Ok(Response::new(reply))
}

async fn seek_backward(
&self,
_request: Request<SeekBackwardRequest>,
_request: Request<Empty>,
) -> Result<Response<PlayerTime>, Status> {
self.command(&PlayerCmd::SeekBackward);
// This is to let the player update volume within loop
Expand All @@ -113,10 +97,7 @@ impl MusicPlayer for MusicPlayerService {
Ok(Response::new(reply))
}

async fn seek_forward(
&self,
_request: Request<SeekForwardRequest>,
) -> Result<Response<PlayerTime>, Status> {
async fn seek_forward(&self, _request: Request<Empty>) -> Result<Response<PlayerTime>, Status> {
self.command(&PlayerCmd::SeekForward);
// This is to let the player update volume within loop
std::thread::sleep(std::time::Duration::from_millis(20));
Expand All @@ -127,29 +108,20 @@ impl MusicPlayer for MusicPlayerService {
Ok(Response::new(reply))
}

async fn skip_next(
&self,
_request: Request<SkipNextRequest>,
) -> Result<Response<SkipNextResponse>, Status> {
let reply = SkipNextResponse {};
async fn skip_next(&self, _request: Request<Empty>) -> Result<Response<Empty>, Status> {
let reply = Empty {};
self.command(&PlayerCmd::SkipNext);

Ok(Response::new(reply))
}
async fn skip_previous(
&self,
_request: Request<SkipPreviousRequest>,
) -> Result<Response<EmptyReply>, Status> {
let reply = EmptyReply {};
async fn skip_previous(&self, _request: Request<Empty>) -> Result<Response<Empty>, Status> {
let reply = Empty {};
self.command(&PlayerCmd::SkipPrevious);

Ok(Response::new(reply))
}

async fn speed_down(
&self,
_request: Request<SpeedDownRequest>,
) -> Result<Response<SpeedReply>, Status> {
async fn speed_down(&self, _request: Request<Empty>) -> Result<Response<SpeedReply>, Status> {
self.command(&PlayerCmd::SpeedDown);
// This is to let the player update volume within loop
std::thread::sleep(std::time::Duration::from_millis(20));
Expand All @@ -159,10 +131,7 @@ impl MusicPlayer for MusicPlayerService {
Ok(Response::new(reply))
}

async fn speed_up(
&self,
_request: Request<SpeedUpRequest>,
) -> Result<Response<SpeedReply>, Status> {
async fn speed_up(&self, _request: Request<Empty>) -> Result<Response<SpeedReply>, Status> {
self.command(&PlayerCmd::SpeedUp);
// This is to let the player update volume within loop
std::thread::sleep(std::time::Duration::from_millis(20));
Expand All @@ -174,7 +143,7 @@ impl MusicPlayer for MusicPlayerService {

async fn toggle_gapless(
&self,
_request: Request<ToggleGaplessRequest>,
_request: Request<Empty>,
) -> Result<Response<ToggleGaplessReply>, Status> {
self.command(&PlayerCmd::ToggleGapless);
// This is to let the player update volume within loop
Expand All @@ -187,7 +156,7 @@ impl MusicPlayer for MusicPlayerService {

async fn toggle_pause(
&self,
_request: Request<TogglePauseRequest>,
_request: Request<Empty>,
) -> Result<Response<TogglePauseResponse>, Status> {
self.command(&PlayerCmd::TogglePause);
std::thread::sleep(std::time::Duration::from_millis(20));
Expand All @@ -197,10 +166,7 @@ impl MusicPlayer for MusicPlayerService {
Ok(Response::new(reply))
}

async fn volume_down(
&self,
_request: Request<VolumeDownRequest>,
) -> Result<Response<VolumeReply>, Status> {
async fn volume_down(&self, _request: Request<Empty>) -> Result<Response<VolumeReply>, Status> {
self.command(&PlayerCmd::VolumeDown);
// This is to let the player update volume within loop
std::thread::sleep(std::time::Duration::from_millis(20));
Expand All @@ -212,10 +178,7 @@ impl MusicPlayer for MusicPlayerService {
Ok(Response::new(reply))
}

async fn volume_up(
&self,
_request: Request<VolumeUpRequest>,
) -> Result<Response<VolumeReply>, Status> {
async fn volume_up(&self, _request: Request<Empty>) -> Result<Response<VolumeReply>, Status> {
self.command(&PlayerCmd::VolumeUp);
// This is to let the player update volume within loop
std::thread::sleep(std::time::Duration::from_millis(20));
Expand All @@ -231,7 +194,7 @@ impl MusicPlayer for MusicPlayerService {
Pin<Box<dyn Stream<Item = Result<termusiclib::player::StreamUpdates, Status>> + Send>>;
async fn subscribe_server_updates(
&self,
_: Request<EmptyReply>,
_: Request<Empty>,
) -> Result<Response<Self::SubscribeServerUpdatesStream>, Status> {
let rx = self.stream_tx.subscribe();

Expand Down
Loading

0 comments on commit e8247ed

Please sign in to comment.