129 lines
2.9 KiB
Protocol Buffer
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 { }
|