Complete overhaul of protobuf spec

This commit is contained in:
chmanie 2023-06-02 14:36:47 +02:00
parent ddef74be85
commit fac450900c
1 changed files with 133 additions and 151 deletions

View File

@ -2,58 +2,154 @@ syntax = "proto3";
package crabidy.v1; package crabidy.v1;
service CrabidyService { service CrabidyService {
// System
rpc Init(InitRequest) returns (InitResponse);
// Library // Library
rpc GetLibraryNode(GetLibraryNodeRequest) returns (GetLibraryNodeResponse); rpc GetLibraryNode(GetLibraryNodeRequest) returns (GetLibraryNodeResponse);
rpc GetTrack(GetTrackRequest) returns (GetTrackResponse);
// Queue // Queue
rpc QueueTrack(QueueTrackRequest) returns (QueueTrackResponse); rpc Queue(QueueRequest) returns (QueueResponse);
rpc QueueLibraryNode(QueueLibraryNodeRequest) returns (QueueLibraryNodeResponse); rpc Replace(ReplaceRequest) returns (ReplaceResponse);
rpc ReplaceWithTrack(ReplaceWithTrackRequest) returns (ReplaceWithTrackResponse); rpc Append(AppendRequest) returns (AppendResponse);
rpc ReplaceWithNode(ReplaceWithNodeRequest) returns (ReplaceWithNodeResponse); rpc Remove(RemoveRequest) returns (RemoveResponse);
rpc AppendTrack(AppendTrackRequest) returns (AppendTrackResponse); rpc Insert(InsertRequest) returns (InsertResponse);
rpc AppendNode(AppendNodeRequest) returns (AppendNodeResponse); rpc SetCurrent(SetCurrentRequest) returns (SetCurrentResponse);
rpc RemoveTracks(RemoveTracksRequest) returns (RemoveTracksResponse); rpc GetUpdateStream(GetUpdateStreamRequest) returns (stream GetUpdateStreamResponse);
rpc SetCurrentTrack(SetCurrentTrackRequest) returns (SetCurrentTrackResponse);
rpc GetQueueUpdates(GetQueueUpdatesRequest) returns (stream GetQueueUpdatesResponse);
rpc GetQueue(GetQueueRequest) returns (GetQueueResponse);
rpc SaveQueue(SaveQueueRequest) returns (SaveQueueResponse); rpc SaveQueue(SaveQueueRequest) returns (SaveQueueResponse);
// Playback // Playback
rpc TogglePlay(TogglePlayRequest) returns (TogglePlayResponse); rpc TogglePlay(TogglePlayRequest) returns (TogglePlayResponse);
rpc Stop(StopRequest) returns (StopResponse); rpc Stop(StopRequest) returns (StopResponse);
rpc GetActiveTrack(GetActiveTrackRequest) returns (GetActiveTrackResponse); rpc ChangeVolume(ChangeVolumeRequest) returns (ChangeVolumeResponse);
rpc GetTrackUpdates(GetTrackUpdatesRequest) returns (stream GetTrackUpdatesResponse); rpc ToggleMute(ToggleMuteRequest) returns (ToggleMuteResponse);
rpc Next(NextRequest) returns (NextResponse);
rpc Prev(PrevRequest) returns (PrevResponse);
rpc RestartTrack(RestartTrackRequest) returns (RestartTrackResponse);
} }
// System
message InitRequest {}
message InitResponse {
Queue queue = 1;
QueueTrack queue_track = 2;
PlayState play_state = 3;
uint32 volume = 4;
bool mute = 5;
TrackPosition position = 6;
}
// Library
message GetLibraryNodeRequest {
string uuid = 1;
}
message GetLibraryNodeResponse {
LibraryNode node = 1;
}
// Queue
message QueueRequest {
repeated string uuid = 1;
}
message QueueResponse {}
message ReplaceRequest {
repeated string uuid = 1;
}
message ReplaceResponse {}
message AppendRequest {
repeated string uuid = 1;
}
message AppendResponse {}
message RemoveRequest {
repeated string uuid = 1;
}
message RemoveResponse {}
message InsertRequest {
repeated string uuid = 1;
}
message InsertResponse {}
message SetCurrentRequest {
uint32 position = 1;
}
message SetCurrentResponse {}
message SaveQueueRequest {
string name = 1;
}
message SaveQueueResponse {}
// Stream
message GetUpdateStreamRequest {}
message GetUpdateStreamResponse {
oneof update {
Queue queue = 1;
QueueTrack queue_track = 2;
PlayState play_state = 3;
uint32 volume = 4;
bool mute = 5;
TrackPosition position = 6;
}
}
// Playback
message TogglePlayRequest {}
message TogglePlayResponse {}
message StopRequest {}
message StopResponse {}
message ChangeVolumeRequest {
int32 delta = 1;
}
message ChangeVolumeResponse {}
message ToggleMuteRequest {}
message ToggleMuteResponse {}
message NextRequest {}
message NextResponse {}
message PrevRequest {}
message PrevResponse {}
message RestartTrackRequest {}
message RestartTrackResponse {}
// Data types
message LibraryNodeChild { message LibraryNodeChild {
string uuid = 1; string uuid = 1;
string title = 2; string title = 2;
} }
message GetQueueRequest {} message Queue {
message QueueTrackResponse {} uint64 timestamp = 1;
message QueueLibraryNodeResponse {} uint32 current = 2;
message ReplaceWithTrackResponse {} // Without album
message ReplaceWithNodeResponse {} repeated Track tracks = 3;
message AppendTrackResponse {} }
message AppendNodeResponse {}
message RemoveTracksResponse {}
message SetCurrentTrackResponse {}
message SaveQueueResponse {}
message TogglePlayRequest {} message QueueTrack {
message TogglePlayResponse {} uint32 queue_position = 1;
message StopRequest {} // With album
message StopResponse {} optional Track track = 2;
message GetActiveTrackRequest {} }
// To signal whether it's loading data (for frontend only probably - enum PlayState {
// could also be used for fetching from providers?) PLAY_STATE_UNSPECIFIED = 0;
enum LibraryNodeState { PLAY_STATE_STOPPED = 1;
LIBRARY_NODE_STATE_UNSPECIFIED = 0; PLAY_STATE_LOADING = 2;
LIBRARY_NODE_STATE_PENDING = 1; PLAY_STATE_PLAYING = 3;
LIBRARY_NODE_STATE_DONE = 2; PLAY_STATE_PAUSED = 4;
}
message TrackPosition {
uint32 duration = 1;
uint32 position = 2;
} }
message Album { message Album {
@ -61,16 +157,13 @@ message Album {
optional string release_date = 2; optional string release_date = 2;
} }
message Artist {
string name = 1;
}
message Track { message Track {
// Including provider // Including provider
string uuid = 1; string uuid = 1;
string artist = 2; string artist = 2;
string title = 3; string title = 3;
optional uint32 duration = 4; optional uint32 duration = 4;
optional Album album = 5;
} }
message LibraryNode { message LibraryNode {
@ -79,117 +172,6 @@ message LibraryNode {
string title = 2; string title = 2;
repeated LibraryNodeChild children = 3; repeated LibraryNodeChild children = 3;
optional string parent = 4; optional string parent = 4;
LibraryNodeState state = 5; repeated Track tracks = 5;
repeated Track tracks = 6; bool is_queable = 6;
bool is_queable = 7;
}
message GetLibraryNodeRequest {
string uuid = 1;
}
message GetLibraryNodeResponse {
LibraryNode node = 1;
}
message GetTrackRequest {
string uuid = 1;
}
message GetTrackResponse {
Track track = 1;
}
message Queue {
uint64 timestamp = 1;
uint32 current = 2;
repeated Track tracks = 3;
}
message QueuePositionChange {
uint64 timestamp = 1;
uint32 new_position = 2;
}
message QueueTrackRequest {
string uuid = 1;
}
message ReplaceWithTrackRequest {
string uuid = 1;
}
message AppendTrackRequest {
string uuid = 1;
}
message QueueLibraryNodeRequest {
string uuid = 1;
}
message ReplaceWithNodeRequest {
string uuid = 1;
}
message AppendNodeRequest {
string uuid = 1;
}
message RemoveTracksRequest {
repeated uint32 positions = 1;
}
message SetCurrentTrackRequest {
uint32 position = 1;
}
message GetQueueUpdatesRequest {
uint64 timestamp = 2;
}
message GetQueueResponse {
Queue queue = 1;
}
message GetQueueUpdatesResponse {
oneof queue_update_result {
Queue full = 1;
QueuePositionChange position_change = 2;
}
}
message SaveQueueRequest {
string name = 1;
// inside the configured path of crabidy
string path = 2;
}
enum TrackPlayState {
TRACK_PLAY_STATE_UNSPECIFIED = 0;
TRACK_PLAY_STATE_STOPPED = 1;
TRACK_PLAY_STATE_LOADING = 2;
TRACK_PLAY_STATE_PLAYING = 3;
TRACK_PLAY_STATE_PAUSED = 4;
}
message GetTrackUpdatesRequest {
// defines how many of the update messages should be skipped
// before they are sent back via GetTrackUpdates
uint32 updates_skipped = 1;
repeated string type_whitelist = 2;
repeated string type_blacklist = 3;
}
message ActiveTrack {
optional Track track = 1;
TrackPlayState play_state = 2;
uint32 completion = 3;
}
message GetActiveTrackResponse {
ActiveTrack active_track = 1;
}
message GetTrackUpdatesResponse {
ActiveTrack active_track = 1;
} }