import "common.proto"; package Remote; message AudioCollectionRequest { message BatchParameter { required uint32 offset = 1; // First element requested required uint32 size = 2; // Number of elements requested. Server may not honor this size if too big } message GetGenreList { required BatchParameter batch_parameter = 2; } message GetArtistList { repeated uint64 genre_id = 2; // Artist that has at least a track of the genre required BatchParameter batch_parameter = 3; } message GetReleaseList { // Search filters repeated uint64 artist_id = 1; // Release that contains at least a track of this artist repeated uint64 filter_genre = 2; // Release that has at least a track of the genre optional bool get_cover = 3; // Request cover art for each release required BatchParameter batch_parameter = 4; } message GetTrackList { // Search filters repeated uint64 artist_id = 1; // Track that belongs to these artists repeated uint64 release_id = 2; // Track that is part of these releases repeated uint64 genre_id = 3; // Track that has at least a track of the genre optional bool get_cover = 4; // Request cover art for each track required BatchParameter batch_parameter = 5; } enum Type { TypeGetGenreList = 1; TypeGetArtistList = 2; TypeGetReleaseList = 3; TypeGetTrackList = 4; } required Type type = 1; optional GetGenreList get_genres = 2; optional GetArtistList get_artists = 3; optional GetReleaseList get_releases = 4; optional GetTrackList get_tracks = 5; } message AudioCollectionResponse { message GenreList { repeated Genre genres = 2; } message ArtistList { repeated Artist artists = 2; } message ReleaseList { repeated Release releases = 2; } message TrackList { repeated Track tracks = 2; } message CoverArt { optional string mime_type = 1; repeated bytes data = 2; } message Genre { required uint64 id = 1; required string name = 2; } message Artist { required uint64 id = 1; required string name = 2; required uint32 nb_releases = 3; } message Release { required uint64 id = 1; required string name = 2; required uint32 nb_tracks = 3; required uint32 duration_secs = 4; optional string release_date = 5; optional CoverArt coverArt = 6; } message Track { required uint64 id = 1; required uint64 artist_id = 2; required uint64 release_id = 3; repeated uint64 genre_id = 4; optional uint32 disc_number = 5; optional uint32 track_number = 6; required string name = 7; required uint32 duration_secs = 8; optional string release_date = 9; optional string original_release_date = 10; optional bytes coverArt = 11; } enum Type { TypeError = 1; TypeGenreList = 2; TypeArtistList = 3; TypeReleaseList = 4; TypeTrackList = 5; } optional Type type = 1; optional Error error = 2; optional GenreList genre_list = 3; optional ArtistList artist_list = 4; optional ReleaseList release_list = 5; optional TrackList track_list = 6; }