syntax = "proto3"; package music_agregator.indexer.v1; option go_package = "homelab.lan/music-agregator/gen/music_agregator/v1/indexer"; service IndexerService { rpc Search(SearchRequest) returns (SearchResponse) {} rpc Capabilities(CapabilitiesRequest) returns (CapabilitiesResponse) {} } message SearchRequest { string query = 1; int32 limit = 2; string tracker = 3; } message SearchResponse { repeated SearchItem result = 1; } message SearchItem { string title = 1; string download_link = 2; string torrent_page_url = 3; string pub_date = 4; int64 size = 5; string description = 6; repeated string categories = 7; Enclosure enclosure = 8; repeated TorznabAttr torznab_attrs = 9; Release release = 10; } message Release { string raw_title = 1; string artist = 2; string album = 3; int32 year = 4; int32 year_end = 5; string type = 6; repeated string genres = 7; string format = 8; string source = 9; string bitrate = 10; int32 bit_depth = 11; int32 sample_rate = 12; string rip_type = 13; int32 release_count = 14; repeated string tags = 15; string label = 16; string catalog_num = 17; bool parsed_successfully = 18; repeated string parse_errors = 19; } message Enclosure { string url = 1; int64 length = 2; string type = 3; } message TorznabAttr { string name = 1; string value = 2; } message CapabilitiesRequest { string indexer = 1; } message CapabilitiesResponse { Server server = 1; Limits limits = 2; Searching searching = 3; repeated Category categories = 4; } message Server { string title = 1; } message Limits { int32 default = 1; int32 max = 2; } message Searching { SearchCapability search = 1; SearchCapability tv_search = 2; SearchCapability movie_search = 3; SearchCapability music_search = 4; SearchCapability audio_search = 5; SearchCapability book_search = 6; } message SearchCapability { bool available = 1; repeated string supported_params = 2; string search_engine = 3; } message Category { int32 id = 1; string name = 2; repeated Subcat subcats = 3; } message Subcat { int32 id = 1; string name = 2; }