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 = 1; } message GetArtistList { required BatchParameter batch_parameter = 1; repeated uint64 genre_id = 2; // Artist that has at least a track of the genre } message GetReleaseList { required BatchParameter batch_parameter = 1; // Search filters repeated uint64 artist_id = 2; // Release that contains at least a track of one of these artists repeated uint64 filter_genre = 3; // Release that has at least a track of the genre } message GetTrackList { required BatchParameter batch_parameter = 1; // Search filters repeated uint64 artist_id = 2; // Track that belongs to these artists repeated uint64 release_id = 3; // Track that is part of these releases repeated uint64 genre_id = 4; // Track that has at least a track of the genre } message GetCoverArt { enum Type { TypeGetCoverArtRelease = 1; TypeGetCoverArtTrack = 2; } required Type type = 1; optional uint64 release_id = 2; // Release that owns the cover art optional uint64 track_id = 3; // Track that owns the cover art } enum Type { TypeGetRevision = 1; TypeGetGenreList = 2; TypeGetArtistList = 3; TypeGetReleaseList = 4; TypeGetTrackList = 5; TypeGetCoverArt = 6; } required Type type = 1; optional GetGenreList get_genres = 2; optional GetArtistList get_artists = 3; optional GetReleaseList get_releases = 4; optional GetTrackList get_tracks = 5; optional GetCoverArt get_cover_art = 6; } message AudioCollectionResponse { message Revision { required uint64 rev = 1; } 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; required bytes data = 2; } message Genre { required uint64 id = 1; // Genre Id required string name = 2; } message Artist { required uint64 id = 1; // Artist Id required string name = 2; required uint32 nb_releases = 3; } message Release { required uint64 id = 1; // Release id required string name = 2; required uint32 nb_tracks = 3; required uint32 duration_secs = 4; optional string release_date = 5; } message Track { required uint64 id = 1; // Track id 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; } enum Type { TypeError = 1; TypeRevision = 2; TypeGenreList = 3; TypeArtistList = 4; TypeReleaseList = 5; TypeTrackList = 6; TypeCoverArt = 7; } optional Type type = 1; optional Error error = 2; optional Revision revision = 3; optional GenreList genre_list = 4; optional ArtistList artist_list = 5; optional ReleaseList release_list = 6; optional TrackList track_list = 7; repeated CoverArt cover_art = 8; }