Clementine-audio-player-Mac.../ext/libclementine-remote/remotecontrolmessages.proto

409 lines
10 KiB
Protocol Buffer

/* This file is part of Clementine.
Copyright 2017, David Sansome <me@davidsansome.com>
Copyright 2017, Andreas Muttscheller <asfa194@gmail.com>
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
// Note: this file is licensed under the Apache License instead of GPL, so
// 3rd party applications or libraries can use another license besides GPL.
syntax = "proto2";
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;
GLOBAL_SEARCH_STATUS = 56;
}
// Valid Engine states
enum EngineState {
Empty = 0;
Idle = 1;
Playing = 2;
Paused = 3;
}
// Song Metadata
message SongMetadata {
enum Type {
UNKNOWN = 0;
ASF = 1;
FLAC = 2;
MP4 = 3;
MPC = 4;
MPEG = 5;
OGGFLAC = 6;
OGGSPEEX = 7;
OGGVORBIS = 8;
AIFF = 9;
WAV = 10;
TRUEAUDIO = 11;
CDDA = 12;
OGGOPUS = 13;
WAVPACK = 14;
SPC = 15;
VGM = 16;
APE = 17;
STREAM = 99;
}
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)
optional string url = 19;
optional string art_automatic = 20;
optional string art_manual = 21;
optional Type type = 22;
}
// Playlist information
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;
Repeat_OneByOne = 4;
Repeat_Intro = 5;
}
// 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];
repeated SongMetadata songs = 6;
}
// 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;
optional bytes search_provider_icon = 5;
}
message ResponseTranscoderStatus {
optional int32 processed = 1;
optional int32 total = 2;
}
enum GlobalSearchStatus {
GlobalSearchStarted = 1;
GlobalSearchFinished = 2;
}
message ResponseGlobalSearchStatus {
optional int32 id = 1;
optional string query = 2;
optional GlobalSearchStatus status = 3;
}
// The message itself
message Message {
optional int32 version = 1 [default=21];
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;
optional ResponseGlobalSearchStatus response_global_search_status = 40;
}