package pb.remote; // The supported message types enum MsgType { UNKNOWN = 0; // Messages generally send from client to server CONNECT = 1; REQUEST_PLAYLISTS = 3; REQUEST_PLAYLIST_SONGS = 4; CHANGE_SONG = 5; SET_VOLUME = 6; SET_TRACK_POSITION = 7; INSERT_URLS = 8; REMOVE_SONGS = 9; OPEN_PLAYLIST = 10; CLOSE_PLAYLIST = 11; GET_LYRICS = 14; DOWNLOAD_SONGS = 15; SONG_OFFER_RESPONSE = 16; // Lastfm LOVE = 12; BAN = 13; STOP_AFTER = 17; GET_LIBRARY = 18; RATE_SONG = 19; GLOBAL_SEARCH = 100; // Messages send by both DISCONNECT = 2; PLAY = 20; PLAYPAUSE = 21; PAUSE = 22; STOP = 23; NEXT = 24; PREVIOUS = 25; SHUFFLE_PLAYLIST = 26; // Messages that contain the repeat or random mode // Either set by client or clementine REPEAT = 27; SHUFFLE = 28; // Messages send from server to client INFO = 40; CURRENT_METAINFO = 41; PLAYLISTS = 42; PLAYLIST_SONGS = 43; ENGINE_STATE_CHANGED = 44; KEEP_ALIVE = 45; UPDATE_TRACK_POSITION = 46; ACTIVE_PLAYLIST_CHANGED = 47; FIRST_DATA_SENT_COMPLETE = 48; LYRICS = 49; SONG_FILE_CHUNK = 50; DOWNLOAD_QUEUE_EMPTY = 51; LIBRARY_CHUNK = 52; DOWNLOAD_TOTAL_SIZE = 53; GLOBAL_SEARCH_RESULT = 54; TRANSCODING_FILES = 55; } // Valid Engine states enum EngineState { Empty = 0; Idle = 1; Playing = 2; Paused = 3; } // Song Metadata message SongMetadata { optional int32 id = 1; // unique id of the song optional int32 index = 2; // Index of the current row of the active playlist optional string title = 3; optional string album = 4; optional string artist = 5; optional string albumartist = 6; optional int32 track = 7; optional int32 disc = 8; optional string pretty_year = 9; optional string genre = 10; optional int32 playcount = 11; optional string pretty_length = 12; optional bytes art = 13; optional int32 length = 14; optional bool is_local = 15; optional string filename = 16; optional int32 file_size = 17; optional float rating = 18; // 0 (0 stars) to 1 (5 stars) } // Playlist informations message Playlist { optional int32 id = 1; optional string name = 2; optional int32 item_count = 3; optional bool active = 4; optional bool closed = 5; } // Valid Repeatmodes enum RepeatMode { Repeat_Off = 0; Repeat_Track = 1; Repeat_Album = 2; Repeat_Playlist = 3; } // Valid Shuffle modes enum ShuffleMode { Shuffle_Off = 0; Shuffle_All = 1; Shuffle_InsideAlbum = 2; Shuffle_Albums = 3; } message RequestPlaylists { optional bool include_closed = 1; } // A Client requests songs from a specific playlist message RequestPlaylistSongs { optional int32 id = 1; } // Client want to change track message RequestChangeSong { // In which playlist is the song? optional int32 playlist_id = 1; // And on which position? optional int32 song_index = 2; } // Set the volume message RequestSetVolume { optional int32 volume = 1; } // Repeat and Random messages message Repeat { optional RepeatMode repeat_mode = 1; } message Shuffle { optional ShuffleMode shuffle_mode = 1; } // Response from server // General info message ResponseClementineInfo { optional string version = 1; optional EngineState state = 2; } // The current song played message ResponseCurrentMetadata { optional SongMetadata song_metadata = 1; } // The playlists in clementine message ResponsePlaylists { repeated Playlist playlist = 1; } // A list of songs in a playlist message ResponsePlaylistSongs { optional Playlist requested_playlist = 1; // The songs that are in the playlist repeated SongMetadata songs = 2; } // The current state of the play engine message ResponseEngineStateChanged { optional EngineState state = 1; } // Sends the current position of the track message ResponseUpdateTrackPosition { optional int32 position = 1; } // The connect message containing the authentication code message RequestConnect { optional int32 auth_code = 1; optional bool send_playlist_songs = 2; optional bool downloader = 3; } // Respone, why the connection was closed enum ReasonDisconnect { Server_Shutdown = 1; Wrong_Auth_Code = 2; Not_Authenticated = 3; Download_Forbidden = 4; } message ResponseDisconnect { optional ReasonDisconnect reason_disconnect = 1; } message ResponseActiveChanged { optional int32 id = 1; } // A client requests a new track position // position in seconds! message RequestSetTrackPosition { optional int32 position = 1; } message RequestInsertUrls { // In which playlist should the urls be inserted? optional int32 playlist_id = 1; repeated string urls = 2; optional int32 position = 3 [default=-1]; optional bool play_now = 4 [default=false]; optional bool enqueue = 5 [default=false]; } // Client want to change track message RequestRemoveSongs { // In which playlist is the songs? optional int32 playlist_id = 1; // And on which position? repeated int32 songs = 2; } // Messages for opening / closing playlists message RequestOpenPlaylist { optional int32 playlist_id = 1; } message RequestClosePlaylist { optional int32 playlist_id = 1; } // Message containing lyrics message ResponseLyrics { repeated Lyric lyrics = 1; } message Lyric { optional string id = 1; optional string title = 2; optional string content = 3; } // Message request for downloading songs enum DownloadItem { CurrentItem = 1; ItemAlbum = 2; APlaylist = 3; Urls = 4; } message RequestDownloadSongs { optional DownloadItem download_item = 1; optional int32 playlist_id = 2; repeated string urls = 3; } message ResponseSongFileChunk { optional int32 chunk_number = 1; optional int32 chunk_count = 2; optional int32 file_number = 3; optional int32 file_count = 4; optional SongMetadata song_metadata = 6; // only sent with first chunk! optional bytes data = 7; optional int32 size = 8; optional bytes file_hash = 9; } message ResponseLibraryChunk { optional int32 chunk_number = 1; optional int32 chunk_count = 2; optional bytes data = 3; optional int32 size = 4; optional bytes file_hash = 5; } message ResponseSongOffer { optional bool accepted = 1; // true = client wants to download item } message RequestRateSong { optional float rating = 1; // 0 to 1 } message ResponseDownloadTotalSize { optional int32 total_size = 1; optional int32 file_count = 2; } message RequestGlobalSearch { optional string query = 1; } message ResponseGlobalSearch { optional int32 id = 1; optional string query = 2; optional string search_provider = 3; repeated SongMetadata song_metadata = 4; } message ResponseTranscoderStatus { optional int32 processed = 1; optional int32 total = 2; } // The message itself message Message { optional int32 version = 1 [default=18]; optional MsgType type = 2 [default=UNKNOWN]; // What data is in the message? optional RequestConnect request_connect = 21; optional RequestPlaylists request_playlists = 27; optional RequestPlaylistSongs request_playlist_songs = 10; optional RequestChangeSong request_change_song = 11; optional RequestSetVolume request_set_volume = 12; optional RequestSetTrackPosition request_set_track_position = 23; optional RequestInsertUrls request_insert_urls = 25; optional RequestRemoveSongs request_remove_songs = 26; optional RequestOpenPlaylist request_open_playlist = 28; optional RequestClosePlaylist request_close_playlist = 29; optional RequestDownloadSongs request_download_songs = 31; optional RequestRateSong request_rate_song = 35; optional RequestGlobalSearch request_global_search = 37; optional Repeat repeat = 13; optional Shuffle shuffle = 14; optional ResponseClementineInfo response_clementine_info = 15; optional ResponseCurrentMetadata response_current_metadata = 16; optional ResponsePlaylists response_playlists = 17; optional ResponsePlaylistSongs response_playlist_songs = 18; optional ResponseEngineStateChanged response_engine_state_changed = 19; optional ResponseUpdateTrackPosition response_update_track_position = 20; optional ResponseDisconnect response_disconnect = 22; optional ResponseActiveChanged response_active_changed = 24; optional ResponseLyrics response_lyrics = 30; optional ResponseSongFileChunk response_song_file_chunk = 32; optional ResponseSongOffer response_song_offer = 33; optional ResponseLibraryChunk response_library_chunk = 34; optional ResponseDownloadTotalSize response_download_total_size = 36; optional ResponseGlobalSearch response_global_search = 38; optional ResponseTranscoderStatus response_transcoder_status = 39; }