// Extracted from: Spotify 1.2.52.442 (windows) syntax = "proto3"; package spotify.connectstate; import "player.proto"; import "devices.proto"; import "media.proto"; option java_package = "com.spotify.connectstate.model"; option optimize_for = CODE_SIZE; message ClusterUpdate { Cluster cluster = 1; ClusterUpdateReason update_reason = 2; string ack_id = 3; repeated string devices_that_changed = 4; } message Device { DeviceInfo device_info = 1; PlayerState player_state = 2; PrivateDeviceInfo private_device_info = 3; bytes transfer_data = 4; } message Cluster { reserved 7; int64 changed_timestamp_ms = 1; string active_device_id = 2; PlayerState player_state = 3; map device = 4; bytes transfer_data = 5; uint64 transfer_data_timestamp = 6; bool need_full_player_state = 8; int64 server_timestamp_ms = 9; optional bool needs_state_updates = 10; optional uint64 started_playing_at_timestamp = 11; } message PutStateRequest { string callback_url = 1; Device device = 2; MemberType member_type = 3; bool is_active = 4; PutStateReason put_state_reason = 5; uint32 message_id = 6; string last_command_sent_by_device_id = 7; uint32 last_command_message_id = 8; uint64 started_playing_at = 9; uint64 has_been_playing_for_ms = 11; uint64 client_side_timestamp = 12; bool only_write_player_state = 13; } message PrivateDeviceInfo { string platform = 1; } message DeviceInfo { reserved 5; bool can_play = 1; uint32 volume = 2; string name = 3; Capabilities capabilities = 4; string device_software_version = 6; devices.DeviceType device_type = 7; string spirc_version = 9; string device_id = 10; bool is_private_session = 11; bool is_social_connect = 12; string client_id = 13; string brand = 14; string model = 15; map metadata_map = 16; string product_id = 17; string deduplication_id = 18; uint32 selected_alias_id = 19; map device_aliases = 20; bool is_offline = 21; string public_ip = 22; string license = 23; bool is_group = 25; bool is_dynamic_device = 26; repeated string disallow_playback_reasons = 27; repeated string disallow_transfer_reasons = 28; optional AudioOutputDeviceInfo audio_output_device_info = 24; } message AudioOutputDeviceInfo { optional AudioOutputDeviceType audio_output_device_type = 1; optional string device_name = 2; } message Capabilities { reserved "supported_contexts"; reserved "supports_lossless_audio"; reserved 1; reserved 4; reserved 24; bool can_be_player = 2; bool restrict_to_local = 3; bool gaia_eq_connect_id = 5; bool supports_logout = 6; bool is_observable = 7; int32 volume_steps = 8; repeated string supported_types = 9; bool command_acks = 10; bool supports_rename = 11; bool hidden = 12; bool disable_volume = 13; bool connect_disabled = 14; bool supports_playlist_v2 = 15; bool is_controllable = 16; bool supports_external_episodes = 17; bool supports_set_backend_metadata = 18; bool supports_transfer_command = 19; bool supports_command_request = 20; bool is_voice_enabled = 21; bool needs_full_player_state = 22; bool supports_gzip_pushes = 23; bool supports_set_options_command = 25; CapabilitySupportDetails supports_hifi = 26; string connect_capabilities = 27; bool supports_rooms = 28; bool supports_dj = 29; common.media.AudioQuality supported_audio_quality = 30; } message CapabilitySupportDetails { bool fully_supported = 1; bool user_eligible = 2; bool device_supported = 3; } message ConnectCommandOptions { int32 message_id = 1; uint32 target_alias_id = 3; } message ConnectLoggingParams { repeated string interaction_ids = 1; repeated string page_instance_ids = 2; } message LogoutCommand { ConnectCommandOptions command_options = 1; } message SetVolumeCommand { int32 volume = 1; ConnectCommandOptions command_options = 2; ConnectLoggingParams logging_params = 3; string connection_type = 4; } message RenameCommand { string rename_to = 1; ConnectCommandOptions command_options = 2; } message SetBackendMetadataCommand { map metadata = 1; } enum AudioOutputDeviceType { UNKNOWN_AUDIO_OUTPUT_DEVICE_TYPE = 0; BUILT_IN_SPEAKER = 1; LINE_OUT = 2; BLUETOOTH = 3; AIRPLAY = 4; AUTOMOTIVE = 5; CAR_PROJECTED = 6; } enum PutStateReason { UNKNOWN_PUT_STATE_REASON = 0; SPIRC_HELLO = 1; SPIRC_NOTIFY = 2; NEW_DEVICE = 3; PLAYER_STATE_CHANGED = 4; VOLUME_CHANGED = 5; PICKER_OPENED = 6; BECAME_INACTIVE = 7; ALIAS_CHANGED = 8; NEW_CONNECTION = 9; PULL_PLAYBACK = 10; AUDIO_DRIVER_INFO_CHANGED = 11; PUT_STATE_RATE_LIMITED = 12; BACKEND_METADATA_APPLIED = 13; } enum MemberType { SPIRC_V2 = 0; SPIRC_V3 = 1; CONNECT_STATE = 2; CONNECT_STATE_EXTENDED = 5; ACTIVE_DEVICE_TRACKER = 6; PLAY_TOKEN = 7; } enum ClusterUpdateReason { UNKNOWN_CLUSTER_UPDATE_REASON = 0; DEVICES_DISAPPEARED = 1; DEVICE_STATE_CHANGED = 2; NEW_DEVICE_APPEARED = 3; DEVICE_VOLUME_CHANGED = 4; DEVICE_ALIAS_CHANGED = 5; DEVICE_NEW_CONNECTION = 6; }