syntax = "proto3"; import 'google/protobuf/empty.proto'; import 'library.proto'; package player; service Player { rpc PlayTrack(TrackRequest) returns (PlayTrackResponse); rpc ResumeTrack(google.protobuf.Empty) returns (PauseState); rpc PauseTrack(google.protobuf.Empty) returns (PauseState); rpc TogglePause(google.protobuf.Empty) returns (PauseState); rpc GetStatus(google.protobuf.Empty) returns (stream PlayerStatus); rpc SeekPosition(SeekPositionRequest) returns (SeekPositionResponse); rpc SetVolume(SetVolumeRequest) returns (SetVolumeResponse); rpc PlayTrackNext(TrackRequest) returns (Queue); rpc AddTrackToQueue(TrackRequest) returns (Queue); rpc SkipTrack(google.protobuf.Empty) returns (PlayerStatus); rpc SkipToQueueIndex(SkipToQueueIndexRequest) returns (PlayerStatus); } message TrackRequest { string hash = 1; } message PlayTrackResponse { library.Track track = 1; uint64 position = 2; } message PlayerStatus { optional library.Track currently_playing = 1; bool is_paused = 2; float volume = 3; uint64 progress = 4; repeated library.Track queue = 5; } message Queue { repeated library.Track tracks = 1; } message PauseState { bool is_paused = 1; } message SeekPositionRequest { uint64 position = 1; } message SeekPositionResponse { uint64 position = 1; } message SetVolumeRequest { float volume = 1; } message SetVolumeResponse { float volume = 1; } message SkipToQueueIndexRequest { uint32 index = 1; }