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 GetRevision { } 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 required uint32 size = 4; // Scale image to size*size pixels. Set 0 to get the biggest image } enum Type { TypeGetRevision = 1; TypeGetGenreList = 2; TypeGetArtistList = 3; TypeGetReleaseList = 4; TypeGetTrackList = 5; TypeGetCoverArt = 6; } required Type type = 1; optional GetRevision get_revision = 2; optional GetGenreList get_genres = 3; optional GetArtistList get_artists = 4; optional GetReleaseList get_releases = 5; optional GetTrackList get_tracks = 6; optional GetCoverArt get_cover_art = 7; } message AudioCollectionResponse { message Revision { required string rev = 1; // Unique identifier of the database revision } 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; } message Release { required uint64 id = 1; // Release id required string name = 2; } 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 { TypeRevision = 1; TypeGenreList = 2; TypeArtistList = 3; TypeReleaseList = 4; TypeTrackList = 5; TypeCoverArt = 6; } required Type type = 1; optional Revision revision = 2; optional GenreList genre_list = 3; optional ArtistList artist_list = 4; optional ReleaseList release_list = 5; optional TrackList track_list = 6; repeated CoverArt cover_art = 7; }