crabidy/crabidy-core/proto/crabidy.proto

129 lines
2.9 KiB
Protocol Buffer

syntax = "proto3";
package crabidy;
service Library {
rpc GetLibraryNode (LibraryNodeRequest) returns (LibraryNodeResponse);
}
// To signal whether it's loading data (for frontend only probably)
enum LibraryNodeState {
LIBRARY_NODE_STATE_UNSPECIFIED = 0;
LIBRARY_NODE_STATE_PENDING = 1;
LIBRARY_NODE_STATE_DONE = 2;
}
message Track {
// Including provider
string uuid = 1;
string artist = 2;
string title = 3;
}
message LibraryNodeRequest {
string uuid = 1;
}
message LibraryNodeResponse {
// Including provider
string uuid = 1;
string name = 2;
repeated string children = 3;
optional string parent = 4;
LibraryNodeState state = 5;
repeated Track tracks = 6;
bool is_queable = 7;
}
service Queue {
rpc QueueTrack (QueueTrackRequest) returns (EmptyResponse);
rpc QueueLibraryNode (QueueNodeRequest) returns (EmptyResponse);
rpc ReplaceWithTrack (QueueTrackRequest) returns (EmptyResponse);
rpc ReplaceWithNode (QueueNodeRequest) returns (EmptyResponse);
rpc AppendTrack (QueueTrackRequest) returns (EmptyResponse);
rpc AppendNode (QueueNodeRequest) returns (EmptyResponse);
rpc RemoveTracks (RemoveTracksRequest) returns (EmptyResponse);
rpc SetCurrentTrack (SetCurrentTrackRequest) returns (EmptyResponse);
rpc GetQueueUpdates (QueueUpdatesRequest) returns (stream QueueUpdateResponse);
rpc GetQueue(EmptyRequest) returns (CurrentQueue);
rpc SaveQueue (QueueSaveRequest) returns (EmptyResponse);
}
message CurrentQueue {
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 QueueNodeRequest {
string uuid = 1;
}
message RemoveTracksRequest {
repeated uint32 positions = 1;
}
message SetCurrentTrackRequest {
uint32 position = 1;
}
message QueueUpdatesRequest {
uint64 timestamp =2;
}
message QueueUpdateResponse {
oneof QueueUpdateResult{
CurrentQueue full = 1;
QueuePositionChange position_change = 2;
}
}
message QueueSaveRequest {
string name = 1;
// inside the configured path of crabidy
string path = 2;
}
service Playback {
rpc TogglePlay (EmptyRequest) returns (EmptyResponse);
rpc Stop (EmptyRequest) returns (EmptyResponse);
rpc GetActiveTrack (EmptyRequest) returns (ActiveTrack);
rpc GetTrackUpdates (ActiveTrackFilter) returns (stream ActiveTrack);
}
enum TrackPlayState {
TRACK_PLAY_STATE_STOPPED = 0;
TRACK_PLAY_STATE_LOADING = 1;
TRACK_PLAY_STATE_PLAYING = 2;
TRACK_PLAY_STATE_PAUSED = 3;
}
message ActiveTrackFilter {
// 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 EmptyRequest { }
message EmptyResponse { }