eab92dd40b
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/claude-agent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
381 lines
7.7 KiB
Protocol Buffer
381 lines
7.7 KiB
Protocol Buffer
syntax = "proto3";
|
|
package music_agregator.v1;
|
|
option go_package = "homelab.lan/music-agregator/gen/music_agregator/v1/";
|
|
|
|
service MusicAgregatorService {
|
|
rpc MonitorAlbum(MonitorAlbumRequest) returns (MonitorAlbumResponse) {}
|
|
rpc MonitorAlbumStream(stream MonitorAlbumStreamRequest) returns (stream MonitorAlbumStreamResponse) {}
|
|
rpc GetArtists(GetArtistsRequest) returns (GetArtistsResponse) {}
|
|
rpc GetAlbum(GetAlbumRequest) returns (GetAlbumResponse) {}
|
|
rpc AnalyzeAlbumRelease(AnalyzeAlbumReleaseRequest) returns (AnalyzeAlbumReleaseResponse) {}
|
|
rpc SearchArtists(SearchArtistsRequest) returns (SearchArtistsResponse) {}
|
|
rpc GetArtistAlbums(GetArtistAlbumsRequest) returns (GetArtistAlbumsResponse) {}
|
|
}
|
|
|
|
message MonitorAlbumRequest {
|
|
string album_id = 1;
|
|
IndexerOptions indexer_options = 2;
|
|
QualityType quality = 3;
|
|
}
|
|
|
|
message IndexerOptions {
|
|
string tracker = 1;
|
|
}
|
|
|
|
enum QualityType {
|
|
QUALITY_UNSPECIFIED = 0;
|
|
QUALITY_LOSSLESS = 1;
|
|
QUALITY_LOSSY = 2;
|
|
}
|
|
|
|
message MonitorAlbumResponse {
|
|
AlbumDetail album = 1;
|
|
ArtistSummary artist = 2;
|
|
MonitoredRelease release = 3;
|
|
}
|
|
|
|
message GetArtistsRequest {}
|
|
|
|
message GetArtistsResponse {
|
|
repeated ArtistSummary artists = 1;
|
|
}
|
|
|
|
enum MonitorState {
|
|
MONITOR_STATE_UNSPECIFIED = 0;
|
|
MONITOR_STATE_MONITORED = 1;
|
|
MONITOR_STATE_UNMONITORED = 2;
|
|
MONITOR_STATE_EXCLUDED = 3;
|
|
}
|
|
|
|
message ArtistSummary {
|
|
string id = 1;
|
|
string external_id = 2;
|
|
string name = 3;
|
|
string artist_type = 4;
|
|
string country = 5;
|
|
repeated string genres = 6;
|
|
string image_url = 7;
|
|
MonitorState monitor_state = 8;
|
|
repeated AlbumDetail albums = 9;
|
|
}
|
|
|
|
message AlbumDetail {
|
|
string id = 1;
|
|
string external_id = 2;
|
|
string title = 3;
|
|
string album_type = 4;
|
|
string release_date = 5;
|
|
int32 total_tracks = 6;
|
|
int32 total_discs = 7;
|
|
string cover_url = 8;
|
|
repeated string genres = 9;
|
|
string label = 10;
|
|
MonitorState monitor_state = 11;
|
|
DownloadInfo download = 12;
|
|
AlbumReleaseDetail release = 13;
|
|
}
|
|
|
|
message DownloadInfo {
|
|
string state = 1;
|
|
string format = 2;
|
|
string quality = 3;
|
|
string save_path = 4;
|
|
}
|
|
|
|
message GetAlbumRequest {
|
|
string album_id = 1;
|
|
}
|
|
|
|
message AlbumInfo {
|
|
AlbumDetail album = 1;
|
|
repeated TrackDetail tracks = 2;
|
|
}
|
|
|
|
message GetAlbumResponse {
|
|
AlbumInfo info = 1;
|
|
}
|
|
|
|
message AnalyzeAlbumReleaseRequest {
|
|
string album_id = 1;
|
|
}
|
|
|
|
message AnalyzeAlbumReleaseResponse {
|
|
AlbumInfo info = 1;
|
|
}
|
|
|
|
message TrackDetail {
|
|
string id = 1;
|
|
string external_id = 2;
|
|
string title = 3;
|
|
int32 duration_ms = 4;
|
|
int32 disc_number = 5;
|
|
int32 track_number = 6;
|
|
string isrc = 7;
|
|
bool explicit = 8;
|
|
repeated ArtistCredit artists = 9;
|
|
string file_path = 10;
|
|
int64 file_size = 11;
|
|
string format = 12;
|
|
int32 bit_depth = 13;
|
|
int32 sample_rate = 14;
|
|
int32 channels = 15;
|
|
int32 bitrate_kbps = 16;
|
|
}
|
|
|
|
message ArtistCredit {
|
|
string id = 1;
|
|
string name = 2;
|
|
}
|
|
|
|
message AlbumReleaseDetail {
|
|
string id = 1;
|
|
string format = 2;
|
|
int32 bit_depth = 3;
|
|
int32 sample_rate = 4;
|
|
int32 channels = 5;
|
|
bool is_lossless = 6;
|
|
string source = 7;
|
|
int64 total_size = 8;
|
|
int32 total_duration_ms = 9;
|
|
int32 track_count = 10;
|
|
bool has_cover_art = 11;
|
|
bool has_cue_sheet = 12;
|
|
bool has_rip_log = 13;
|
|
string path = 14;
|
|
}
|
|
|
|
message MonitoredRelease {
|
|
string info_hash = 1;
|
|
string artist = 2;
|
|
string album = 3;
|
|
int32 year = 4;
|
|
string format = 5;
|
|
bool lossless = 6;
|
|
int32 bit_depth = 7;
|
|
int32 sample_rate = 8;
|
|
string source = 9;
|
|
int32 track_count = 10;
|
|
repeated string track_names = 11;
|
|
bool has_cover_art = 12;
|
|
bool has_cue_sheet = 13;
|
|
bool has_rip_log = 14;
|
|
int64 total_audio_size = 15;
|
|
string download_link = 16;
|
|
int32 seeders = 17;
|
|
string tracker = 18;
|
|
}
|
|
|
|
message SearchArtistsRequest {
|
|
string query = 1;
|
|
int32 limit = 2;
|
|
int32 offset = 3;
|
|
}
|
|
|
|
message SearchArtistsResponse {
|
|
repeated SearchArtistResult artists = 1;
|
|
int32 total = 2;
|
|
}
|
|
|
|
message SearchArtistResult {
|
|
string id = 1;
|
|
string name = 2;
|
|
string sort_name = 3;
|
|
string artist_type = 4;
|
|
string country = 5;
|
|
string formed_date = 6;
|
|
string disbanded_date = 7;
|
|
string description = 8;
|
|
string image_url = 9;
|
|
repeated string genres = 10;
|
|
repeated ExternalId external_ids = 11;
|
|
}
|
|
|
|
message ExternalId {
|
|
string provider = 1;
|
|
string id = 2;
|
|
}
|
|
|
|
message GetArtistAlbumsRequest {
|
|
string artist_id = 1;
|
|
int32 limit = 2;
|
|
int32 offset = 3;
|
|
}
|
|
|
|
message GetArtistAlbumsResponse {
|
|
repeated AlbumResult albums = 1;
|
|
int32 total = 2;
|
|
}
|
|
|
|
message AlbumResult {
|
|
string id = 1;
|
|
string title = 2;
|
|
string album_type = 3;
|
|
string release_date = 4;
|
|
string upc = 5;
|
|
int32 total_tracks = 6;
|
|
int32 total_discs = 7;
|
|
string cover_url = 8;
|
|
repeated AlbumArtistCredit artists = 9;
|
|
AlbumLabel label = 10;
|
|
repeated string genres = 11;
|
|
repeated ExternalId external_ids = 12;
|
|
}
|
|
|
|
message AlbumArtistCredit {
|
|
string id = 1;
|
|
string name = 2;
|
|
string role = 3;
|
|
}
|
|
|
|
message AlbumLabel {
|
|
string id = 1;
|
|
string name = 2;
|
|
string country = 3;
|
|
}
|
|
|
|
enum InteractionMode {
|
|
INTERACTION_MODE_AUTOMATIC = 0;
|
|
INTERACTION_MODE_MANUAL = 1;
|
|
}
|
|
|
|
enum MonitorStep {
|
|
MONITOR_STEP_UNSPECIFIED = 0;
|
|
MONITOR_STEP_FETCHING_METADATA = 1;
|
|
MONITOR_STEP_CHECKING_OWNED = 2;
|
|
MONITOR_STEP_SEARCHING_INDEXER = 3;
|
|
MONITOR_STEP_PARSING_RESULTS = 4;
|
|
MONITOR_STEP_FILTERING_QUALITY = 5;
|
|
MONITOR_STEP_SELECTING_RELEASE = 6;
|
|
MONITOR_STEP_ADDING_TORRENT = 7;
|
|
MONITOR_STEP_SAVING = 8;
|
|
MONITOR_STEP_COMPLETE = 9;
|
|
}
|
|
|
|
enum PromptType {
|
|
PROMPT_TYPE_UNSPECIFIED = 0;
|
|
PROMPT_TYPE_CONFIRM = 1;
|
|
PROMPT_TYPE_SELECT_ONE = 2;
|
|
PROMPT_TYPE_SELECT_MANY = 3;
|
|
}
|
|
|
|
message MonitorAlbumStreamRequest {
|
|
oneof message {
|
|
StartMonitorRequest start = 1;
|
|
UserDecision decision = 2;
|
|
CancelRequest cancel = 3;
|
|
}
|
|
}
|
|
|
|
message StartMonitorRequest {
|
|
string album_id = 1;
|
|
IndexerOptions indexer_options = 2;
|
|
QualityType quality = 3;
|
|
InteractionMode mode = 4;
|
|
}
|
|
|
|
message UserDecision {
|
|
string prompt_id = 1;
|
|
oneof decision {
|
|
bool confirm = 2;
|
|
string selected_id = 3;
|
|
SelectedIds selected_ids = 4;
|
|
}
|
|
}
|
|
|
|
message SelectedIds {
|
|
repeated string ids = 1;
|
|
}
|
|
|
|
message CancelRequest {}
|
|
|
|
message MonitorAlbumStreamResponse {
|
|
oneof message {
|
|
StatusUpdate status = 1;
|
|
PromptForDecision prompt = 2;
|
|
MonitorAlbumResponse result = 3;
|
|
ErrorUpdate error = 4;
|
|
}
|
|
}
|
|
|
|
message StatusUpdate {
|
|
MonitorStep step = 1;
|
|
string message = 2;
|
|
oneof data {
|
|
StreamAlbumInfo album_info = 10;
|
|
TorrentList torrents = 11;
|
|
ReleaseInfo release_info = 12;
|
|
}
|
|
}
|
|
|
|
message PromptForDecision {
|
|
string prompt_id = 1;
|
|
PromptType type = 2;
|
|
string message = 3;
|
|
int32 timeout_seconds = 4;
|
|
oneof options {
|
|
ConfirmPrompt confirm = 10;
|
|
SelectOnePrompt select_one = 11;
|
|
SelectManyPrompt select_many = 12;
|
|
}
|
|
}
|
|
|
|
message ErrorUpdate {
|
|
MonitorStep failed_step = 1;
|
|
string message = 2;
|
|
bool recoverable = 3;
|
|
}
|
|
|
|
message StreamAlbumInfo {
|
|
string artist = 1;
|
|
string title = 2;
|
|
string release_date = 3;
|
|
bool already_owned = 4;
|
|
string owned_quality = 5;
|
|
}
|
|
|
|
message TorrentList {
|
|
repeated TorrentSummary torrents = 1;
|
|
}
|
|
|
|
message TorrentSummary {
|
|
string id = 1;
|
|
string title = 2;
|
|
string tracker = 3;
|
|
int32 seeders = 4;
|
|
string format = 5;
|
|
bool lossless = 6;
|
|
}
|
|
|
|
message ReleaseInfo {
|
|
string info_hash = 1;
|
|
string format = 2;
|
|
int32 bit_depth = 3;
|
|
int32 sample_rate = 4;
|
|
int32 seeders = 5;
|
|
string tracker = 6;
|
|
}
|
|
|
|
message ConfirmPrompt {
|
|
string confirm_label = 1;
|
|
string cancel_label = 2;
|
|
bool default_value = 3;
|
|
}
|
|
|
|
message SelectOnePrompt {
|
|
repeated SelectOption options = 1;
|
|
string default_id = 2;
|
|
}
|
|
|
|
message SelectManyPrompt {
|
|
repeated SelectOption options = 1;
|
|
repeated string default_ids = 2;
|
|
int32 min_selections = 3;
|
|
int32 max_selections = 4;
|
|
}
|
|
|
|
message SelectOption {
|
|
string id = 1;
|
|
string label = 2;
|
|
string description = 3;
|
|
}
|