mirror of
https://github.com/librespot-org/librespot.git
synced 2024-12-18 17:11:53 +00:00
Update protocol files.
This commit is contained in:
parent
caf78992fb
commit
addc1fce22
31 changed files with 1301 additions and 679 deletions
8
Cargo.lock
generated
8
Cargo.lock
generated
|
@ -26,7 +26,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bitflags"
|
name = "bitflags"
|
||||||
version = "0.2.1"
|
version = "0.3.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -113,7 +113,7 @@ source = "git+https://github.com/stepancheg/rust-protobuf.git#d6e80593f38ce47dfa
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "protobuf_macros"
|
name = "protobuf_macros"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/plietar/rust-protobuf-macros.git#5fa976178a48b01bdf2da6d5e7929367e348ea04"
|
source = "git+https://github.com/plietar/rust-protobuf-macros.git#3b49de3937a34b7a21be1d13caea4348a93c6de4"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rand"
|
name = "rand"
|
||||||
|
@ -143,7 +143,7 @@ dependencies = [
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rust-gmp"
|
name = "rust-gmp"
|
||||||
version = "0.2.0"
|
version = "0.2.0"
|
||||||
source = "git+https://github.com/plietar/rust-gmp.git#db2bb627165b12ebe18a41a941ac6284ce9b895d"
|
source = "git+https://github.com/plietar/rust-gmp.git#cc003c224559f6035cd34a7ed5c6284a49785816"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"num 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
|
"num 0.1.25 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
@ -185,7 +185,7 @@ name = "vergen"
|
||||||
version = "0.0.13"
|
version = "0.0.13"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
"bitflags 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"time 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)",
|
"time 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -43,12 +43,7 @@ fn main() {
|
||||||
&proto.join("authentication.proto"),
|
&proto.join("authentication.proto"),
|
||||||
&proto.join("mercury.proto"),
|
&proto.join("mercury.proto"),
|
||||||
&proto.join("metadata.proto"),
|
&proto.join("metadata.proto"),
|
||||||
&proto.join("playlist4changes.proto"),
|
&proto.join("spirc.proto"),
|
||||||
&proto.join("playlist4content.proto"),
|
|
||||||
&proto.join("playlist4issues.proto"),
|
|
||||||
&proto.join("playlist4meta.proto"),
|
|
||||||
&proto.join("playlist4ops.proto"),
|
|
||||||
&proto.join("playlist4service.proto"),
|
|
||||||
]).unwrap();
|
]).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
49
protocol/proto/ad-hermes-proxy.proto
Normal file
49
protocol/proto/ad-hermes-proxy.proto
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
message Rule {
|
||||||
|
optional string type = 0x1;
|
||||||
|
optional uint32 times = 0x2;
|
||||||
|
optional uint64 interval = 0x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message AdRequest {
|
||||||
|
optional string client_language = 0x1;
|
||||||
|
optional string product = 0x2;
|
||||||
|
optional uint32 version = 0x3;
|
||||||
|
optional string type = 0x4;
|
||||||
|
repeated string avoidAds = 0x5;
|
||||||
|
}
|
||||||
|
|
||||||
|
message AdQueueResponse {
|
||||||
|
repeated AdQueueEntry adQueueEntry = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message AdFile {
|
||||||
|
optional string id = 0x1;
|
||||||
|
optional string format = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message AdQueueEntry {
|
||||||
|
optional uint64 start_time = 0x1;
|
||||||
|
optional uint64 end_time = 0x2;
|
||||||
|
optional double priority = 0x3;
|
||||||
|
optional string token = 0x4;
|
||||||
|
optional uint32 ad_version = 0x5;
|
||||||
|
optional string id = 0x6;
|
||||||
|
optional string type = 0x7;
|
||||||
|
optional string campaign = 0x8;
|
||||||
|
optional string advertiser = 0x9;
|
||||||
|
optional string url = 0xa;
|
||||||
|
optional uint64 duration = 0xb;
|
||||||
|
optional uint64 expiry = 0xc;
|
||||||
|
optional string tracking_url = 0xd;
|
||||||
|
optional string banner_type = 0xe;
|
||||||
|
optional string html = 0xf;
|
||||||
|
optional string image = 0x10;
|
||||||
|
optional string background_image = 0x11;
|
||||||
|
optional string background_url = 0x12;
|
||||||
|
optional string background_color = 0x13;
|
||||||
|
optional string title = 0x14;
|
||||||
|
optional string caption = 0x15;
|
||||||
|
repeated AdFile file = 0x16;
|
||||||
|
repeated Rule rule = 0x17;
|
||||||
|
}
|
||||||
|
|
93
protocol/proto/appstore.proto
Normal file
93
protocol/proto/appstore.proto
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
message AppInfo {
|
||||||
|
optional string identifier = 0x1;
|
||||||
|
optional int32 version_int = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message AppInfoList {
|
||||||
|
repeated AppInfo items = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SemanticVersion {
|
||||||
|
optional int32 major = 0x1;
|
||||||
|
optional int32 minor = 0x2;
|
||||||
|
optional int32 patch = 0x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message RequestHeader {
|
||||||
|
optional string market = 0x1;
|
||||||
|
optional Platform platform = 0x2;
|
||||||
|
enum Platform {
|
||||||
|
WIN32_X86 = 0x0;
|
||||||
|
OSX_X86 = 0x1;
|
||||||
|
LINUX_X86 = 0x2;
|
||||||
|
IPHONE_ARM = 0x3;
|
||||||
|
SYMBIANS60_ARM = 0x4;
|
||||||
|
OSX_POWERPC = 0x5;
|
||||||
|
ANDROID_ARM = 0x6;
|
||||||
|
WINCE_ARM = 0x7;
|
||||||
|
LINUX_X86_64 = 0x8;
|
||||||
|
OSX_X86_64 = 0x9;
|
||||||
|
PALM_ARM = 0xa;
|
||||||
|
LINUX_SH = 0xb;
|
||||||
|
FREEBSD_X86 = 0xc;
|
||||||
|
FREEBSD_X86_64 = 0xd;
|
||||||
|
BLACKBERRY_ARM = 0xe;
|
||||||
|
SONOS_UNKNOWN = 0xf;
|
||||||
|
LINUX_MIPS = 0x10;
|
||||||
|
LINUX_ARM = 0x11;
|
||||||
|
LOGITECH_ARM = 0x12;
|
||||||
|
LINUX_BLACKFIN = 0x13;
|
||||||
|
ONKYO_ARM = 0x15;
|
||||||
|
QNXNTO_ARM = 0x16;
|
||||||
|
BADPLATFORM = 0xff;
|
||||||
|
}
|
||||||
|
optional AppInfoList app_infos = 0x6;
|
||||||
|
optional string bridge_identifier = 0x7;
|
||||||
|
optional SemanticVersion bridge_version = 0x8;
|
||||||
|
optional DeviceClass device_class = 0x9;
|
||||||
|
enum DeviceClass {
|
||||||
|
DESKTOP = 0x1;
|
||||||
|
TABLET = 0x2;
|
||||||
|
MOBILE = 0x3;
|
||||||
|
WEB = 0x4;
|
||||||
|
TV = 0x5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
message AppItem {
|
||||||
|
optional string identifier = 0x1;
|
||||||
|
optional Requirement requirement = 0x2;
|
||||||
|
enum Requirement {
|
||||||
|
REQUIRED_INSTALL = 0x1;
|
||||||
|
LAZYLOAD = 0x2;
|
||||||
|
OPTIONAL_INSTALL = 0x3;
|
||||||
|
}
|
||||||
|
optional string manifest = 0x4;
|
||||||
|
optional string checksum = 0x5;
|
||||||
|
optional string bundle_uri = 0x6;
|
||||||
|
optional string small_icon_uri = 0x7;
|
||||||
|
optional string large_icon_uri = 0x8;
|
||||||
|
optional string medium_icon_uri = 0x9;
|
||||||
|
optional Type bundle_type = 0xa;
|
||||||
|
enum Type {
|
||||||
|
APPLICATION = 0x0;
|
||||||
|
FRAMEWORK = 0x1;
|
||||||
|
BRIDGE = 0x2;
|
||||||
|
}
|
||||||
|
optional SemanticVersion version = 0xb;
|
||||||
|
optional uint32 ttl_in_seconds = 0xc;
|
||||||
|
optional IdentifierList categories = 0xd;
|
||||||
|
}
|
||||||
|
|
||||||
|
message AppList {
|
||||||
|
repeated AppItem items = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message IdentifierList {
|
||||||
|
repeated string identifiers = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message BannerConfig {
|
||||||
|
optional string json = 0x1;
|
||||||
|
}
|
||||||
|
|
|
@ -1,21 +1,20 @@
|
||||||
// size=30
|
|
||||||
message ClientResponseEncrypted {
|
message ClientResponseEncrypted {
|
||||||
required LoginCredentials login_credentials = 0xa; // idx=0 offset=c
|
required LoginCredentials login_credentials = 0xa;
|
||||||
optional AccountCreation account_creation = 0x14; // idx=1 offset=10
|
optional AccountCreation account_creation = 0x14;
|
||||||
optional FingerprintResponseUnion fingerprint_response = 0x1e; // idx=2 offset=14
|
optional FingerprintResponseUnion fingerprint_response = 0x1e;
|
||||||
optional PeerTicketUnion peer_ticket = 0x28; // idx=3 offset=18
|
optional PeerTicketUnion peer_ticket = 0x28;
|
||||||
required SystemInfo system_info = 0x32; // idx=4 offset=1c
|
required SystemInfo system_info = 0x32;
|
||||||
optional string platform_model = 0x3c; // idx=5 offset=20
|
optional string platform_model = 0x3c;
|
||||||
optional string version_string = 0x46; // idx=6 offset=24
|
optional string version_string = 0x46;
|
||||||
optional LibspotifyAppKey appkey = 0x50; // idx=7 offset=28
|
optional LibspotifyAppKey appkey = 0x50;
|
||||||
optional ClientInfo client_info = 0x5a; // idx=8 offset=2c
|
optional ClientInfo client_info = 0x5a;
|
||||||
}
|
}
|
||||||
|
|
||||||
// size=18
|
|
||||||
message LoginCredentials {
|
message LoginCredentials {
|
||||||
optional string username = 0xa; // idx=0 offset=c
|
optional string username = 0xa;
|
||||||
required Type typ = 0x14; // idx=1 offset=10
|
required Type typ = 0x14;
|
||||||
optional bytes auth_data = 0x1e; // idx=2 offset=14
|
optional bytes auth_data = 0x1e;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum Type {
|
enum Type {
|
||||||
|
@ -31,51 +30,44 @@ enum AccountCreation {
|
||||||
ACCOUNT_CREATION_ALWAYS_CREATE = 0x3;
|
ACCOUNT_CREATION_ALWAYS_CREATE = 0x3;
|
||||||
}
|
}
|
||||||
|
|
||||||
// size=14
|
|
||||||
message FingerprintResponseUnion {
|
message FingerprintResponseUnion {
|
||||||
optional FingerprintGrainResponse grain = 0xa; // idx=0 offset=c
|
optional FingerprintGrainResponse grain = 0xa;
|
||||||
optional FingerprintHmacRipemdResponse hmac_ripemd = 0x14; // idx=1 offset=10
|
optional FingerprintHmacRipemdResponse hmac_ripemd = 0x14;
|
||||||
}
|
}
|
||||||
|
|
||||||
// size=1c
|
|
||||||
message FingerprintGrainResponse {
|
message FingerprintGrainResponse {
|
||||||
required bytes encrypted_key = 0xa; // idx=0 offset=c size=f
|
required bytes encrypted_key = 0xa;
|
||||||
}
|
}
|
||||||
|
|
||||||
// size=20
|
|
||||||
message FingerprintHmacRipemdResponse {
|
message FingerprintHmacRipemdResponse {
|
||||||
required bytes hmac = 0xa; // idx=0 offset=c size=13
|
required bytes hmac = 0xa;
|
||||||
}
|
}
|
||||||
|
|
||||||
// size=14
|
|
||||||
message PeerTicketUnion {
|
message PeerTicketUnion {
|
||||||
optional PeerTicketPublicKey public_key = 0xa; // idx=0 offset=c
|
optional PeerTicketPublicKey public_key = 0xa;
|
||||||
optional PeerTicketOld old_ticket = 0x14; // idx=1 offset=10
|
optional PeerTicketOld old_ticket = 0x14;
|
||||||
}
|
}
|
||||||
|
|
||||||
// size=8c
|
|
||||||
message PeerTicketPublicKey {
|
message PeerTicketPublicKey {
|
||||||
required bytes public_key = 0xa; // idx=0 offset=c size=7f
|
required bytes public_key = 0xa;
|
||||||
}
|
}
|
||||||
|
|
||||||
// size=90
|
|
||||||
message PeerTicketOld {
|
message PeerTicketOld {
|
||||||
required bytes peer_ticket = 0xa; // idx=0 offset=c
|
required bytes peer_ticket = 0xa;
|
||||||
required bytes peer_ticket_signature = 0x14; // idx=1 offset=10 size=7f
|
required bytes peer_ticket_signature = 0x14;
|
||||||
}
|
}
|
||||||
|
|
||||||
// size=34
|
|
||||||
message SystemInfo {
|
message SystemInfo {
|
||||||
required CpuFamily cpu_family = 0xa; // idx=0 offset=c
|
required CpuFamily cpu_family = 0xa;
|
||||||
optional uint32 cpu_subtype = 0x14; // idx=1 offset=10
|
optional uint32 cpu_subtype = 0x14;
|
||||||
optional uint32 cpu_ext = 0x1e; // idx=2 offset=14
|
optional uint32 cpu_ext = 0x1e;
|
||||||
optional Brand brand = 0x28; // idx=3 offset=18
|
optional Brand brand = 0x28;
|
||||||
optional uint32 brand_flags = 0x32; // idx=4 offset=1c
|
optional uint32 brand_flags = 0x32;
|
||||||
required Os os = 0x3c; // idx=5 offset=20
|
required Os os = 0x3c;
|
||||||
optional uint32 os_version = 0x46; // idx=6 offset=24
|
optional uint32 os_version = 0x46;
|
||||||
optional uint32 os_ext = 0x50; // idx=7 offset=28
|
optional uint32 os_ext = 0x50;
|
||||||
optional string system_information_string = 0x5a; // idx=8 offset=2c
|
optional string system_information_string = 0x5a;
|
||||||
optional string device_id = 0x64; // idx=9 offset=30
|
optional string device_id = 0x64;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum CpuFamily {
|
enum CpuFamily {
|
||||||
|
@ -124,25 +116,22 @@ enum Os {
|
||||||
OS_BCO = 0x16;
|
OS_BCO = 0x16;
|
||||||
}
|
}
|
||||||
|
|
||||||
// size=168
|
|
||||||
message LibspotifyAppKey {
|
message LibspotifyAppKey {
|
||||||
required uint32 version = 0x1; // idx=0 offset=c
|
required uint32 version = 0x1;
|
||||||
required bytes devkey = 0x2; // idx=1 offset=10 size=7f
|
required bytes devkey = 0x2;
|
||||||
required bytes signature = 0x3; // idx=2 offset=90 size=bf
|
required bytes signature = 0x3;
|
||||||
required string useragent = 0x4; // idx=3 offset=150
|
required string useragent = 0x4;
|
||||||
required bytes callback_hash = 0x5; // idx=4 offset=154 size=13
|
required bytes callback_hash = 0x5;
|
||||||
}
|
}
|
||||||
|
|
||||||
// size=18
|
|
||||||
message ClientInfo {
|
message ClientInfo {
|
||||||
optional bool limited = 0x1; // idx=0 offset=c
|
optional bool limited = 0x1;
|
||||||
optional ClientInfoFacebook fb = 0x2; // idx=1 offset=10
|
optional ClientInfoFacebook fb = 0x2;
|
||||||
optional string language = 0x3; // idx=2 offset=14
|
optional string language = 0x3;
|
||||||
}
|
}
|
||||||
|
|
||||||
// size=10
|
|
||||||
message ClientInfoFacebook {
|
message ClientInfoFacebook {
|
||||||
optional string machine_id = 0x1; // idx=0 offset=c
|
optional string machine_id = 0x1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message AuthSuccess {
|
message AuthSuccess {
|
||||||
|
|
49
protocol/proto/facebook-publish.proto
Normal file
49
protocol/proto/facebook-publish.proto
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
message EventReply {
|
||||||
|
optional int32 queued = 0x1;
|
||||||
|
optional RetryInfo retry = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message RetryInfo {
|
||||||
|
optional int32 retry_delay = 0x1;
|
||||||
|
optional int32 max_retry = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Id {
|
||||||
|
optional string uri = 0x1;
|
||||||
|
optional int64 start_time = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Start {
|
||||||
|
optional int32 length = 0x1;
|
||||||
|
optional string context_uri = 0x2;
|
||||||
|
optional int64 end_time = 0x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Seek {
|
||||||
|
optional int64 end_time = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Pause {
|
||||||
|
optional int32 seconds_played = 0x1;
|
||||||
|
optional int64 end_time = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Resume {
|
||||||
|
optional int32 seconds_played = 0x1;
|
||||||
|
optional int64 end_time = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message End {
|
||||||
|
optional int32 seconds_played = 0x1;
|
||||||
|
optional int64 end_time = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Event {
|
||||||
|
optional Id id = 0x1;
|
||||||
|
optional Start start = 0x2;
|
||||||
|
optional Seek seek = 0x3;
|
||||||
|
optional Pause pause = 0x4;
|
||||||
|
optional Resume resume = 0x5;
|
||||||
|
optional End end = 0x6;
|
||||||
|
}
|
||||||
|
|
181
protocol/proto/facebook.proto
Normal file
181
protocol/proto/facebook.proto
Normal file
|
@ -0,0 +1,181 @@
|
||||||
|
message Credential {
|
||||||
|
optional string facebook_uid = 0x1;
|
||||||
|
optional string access_token = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message EnableRequest {
|
||||||
|
optional Credential credential = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message EnableReply {
|
||||||
|
optional Credential credential = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message DisableRequest {
|
||||||
|
optional Credential credential = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message RevokeRequest {
|
||||||
|
optional Credential credential = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message InspectCredentialRequest {
|
||||||
|
optional Credential credential = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message InspectCredentialReply {
|
||||||
|
optional Credential alternative_credential = 0x1;
|
||||||
|
optional bool app_user = 0x2;
|
||||||
|
optional bool permanent_error = 0x3;
|
||||||
|
optional bool transient_error = 0x4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UserState {
|
||||||
|
optional Credential credential = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UpdateUserStateRequest {
|
||||||
|
optional Credential credential = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message OpenGraphError {
|
||||||
|
repeated string permanent = 0x1;
|
||||||
|
repeated string invalid_token = 0x2;
|
||||||
|
repeated string retries = 0x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message OpenGraphScrobble {
|
||||||
|
optional int32 create_delay = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message OpenGraphConfig {
|
||||||
|
optional OpenGraphError error = 0x1;
|
||||||
|
optional OpenGraphScrobble scrobble = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message AuthConfig {
|
||||||
|
optional string url = 0x1;
|
||||||
|
repeated string permissions = 0x2;
|
||||||
|
repeated string blacklist = 0x3;
|
||||||
|
repeated string whitelist = 0x4;
|
||||||
|
repeated string cancel = 0x5;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ConfigReply {
|
||||||
|
optional string domain = 0x1;
|
||||||
|
optional string app_id = 0x2;
|
||||||
|
optional string app_namespace = 0x3;
|
||||||
|
optional AuthConfig auth = 0x4;
|
||||||
|
optional OpenGraphConfig og = 0x5;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UserFields {
|
||||||
|
optional bool app_user = 0x1;
|
||||||
|
optional bool display_name = 0x2;
|
||||||
|
optional bool first_name = 0x3;
|
||||||
|
optional bool middle_name = 0x4;
|
||||||
|
optional bool last_name = 0x5;
|
||||||
|
optional bool picture_large = 0x6;
|
||||||
|
optional bool picture_square = 0x7;
|
||||||
|
optional bool gender = 0x8;
|
||||||
|
optional bool email = 0x9;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UserOptions {
|
||||||
|
optional bool cache_is_king = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UserRequest {
|
||||||
|
optional UserOptions options = 0x1;
|
||||||
|
optional UserFields fields = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message User {
|
||||||
|
optional string spotify_username = 0x1;
|
||||||
|
optional string facebook_uid = 0x2;
|
||||||
|
optional bool app_user = 0x3;
|
||||||
|
optional string display_name = 0x4;
|
||||||
|
optional string first_name = 0x5;
|
||||||
|
optional string middle_name = 0x6;
|
||||||
|
optional string last_name = 0x7;
|
||||||
|
optional string picture_large = 0x8;
|
||||||
|
optional string picture_square = 0x9;
|
||||||
|
optional string gender = 0xa;
|
||||||
|
optional string email = 0xb;
|
||||||
|
}
|
||||||
|
|
||||||
|
message FriendsFields {
|
||||||
|
optional bool app_user = 0x1;
|
||||||
|
optional bool display_name = 0x2;
|
||||||
|
optional bool picture_large = 0x6;
|
||||||
|
}
|
||||||
|
|
||||||
|
message FriendsOptions {
|
||||||
|
optional int32 limit = 0x1;
|
||||||
|
optional int32 offset = 0x2;
|
||||||
|
optional bool cache_is_king = 0x3;
|
||||||
|
optional bool app_friends = 0x4;
|
||||||
|
optional bool non_app_friends = 0x5;
|
||||||
|
}
|
||||||
|
|
||||||
|
message FriendsRequest {
|
||||||
|
optional FriendsOptions options = 0x1;
|
||||||
|
optional FriendsFields fields = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message FriendsReply {
|
||||||
|
repeated User friends = 0x1;
|
||||||
|
optional bool more = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ShareRequest {
|
||||||
|
optional Credential credential = 0x1;
|
||||||
|
optional string uri = 0x2;
|
||||||
|
optional string message_text = 0x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ShareReply {
|
||||||
|
optional string post_id = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message InboxRequest {
|
||||||
|
optional Credential credential = 0x1;
|
||||||
|
repeated string facebook_uids = 0x3;
|
||||||
|
optional string message_text = 0x4;
|
||||||
|
optional string message_link = 0x5;
|
||||||
|
}
|
||||||
|
|
||||||
|
message InboxReply {
|
||||||
|
optional string message_id = 0x1;
|
||||||
|
optional string thread_id = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message PermissionsOptions {
|
||||||
|
optional bool cache_is_king = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message PermissionsRequest {
|
||||||
|
optional Credential credential = 0x1;
|
||||||
|
optional PermissionsOptions options = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message PermissionsReply {
|
||||||
|
repeated string permissions = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GrantPermissionsRequest {
|
||||||
|
optional Credential credential = 0x1;
|
||||||
|
repeated string permissions = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GrantPermissionsReply {
|
||||||
|
repeated string granted = 0x1;
|
||||||
|
repeated string failed = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message TransferRequest {
|
||||||
|
optional Credential credential = 0x1;
|
||||||
|
optional string source_username = 0x2;
|
||||||
|
optional string target_username = 0x3;
|
||||||
|
}
|
||||||
|
|
|
@ -1,49 +1,44 @@
|
||||||
message MercuryRequest {
|
|
||||||
required string url = 0x01;
|
|
||||||
optional string mime = 0x02;
|
|
||||||
required string method = 0x03;
|
|
||||||
}
|
|
||||||
|
|
||||||
message MercuryReply {
|
|
||||||
required string url = 0x01;
|
|
||||||
required string mime = 0x02;
|
|
||||||
required sint32 code = 0x04;
|
|
||||||
repeated Header header = 0x06;
|
|
||||||
|
|
||||||
message Header {
|
|
||||||
required string key = 0x01;
|
|
||||||
required bytes value = 0x02;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message MercuryGetRequest {
|
|
||||||
required string url = 0x01;
|
|
||||||
optional string method = 0x03;
|
|
||||||
}
|
|
||||||
|
|
||||||
message MercuryMultiGetRequest {
|
message MercuryMultiGetRequest {
|
||||||
repeated MercuryGetRequest request = 0x01;
|
repeated MercuryRequest request = 0x1;
|
||||||
}
|
|
||||||
|
|
||||||
message MercuryGetReply {
|
|
||||||
enum CachePolicy {
|
|
||||||
CACHE_NO = 1;
|
|
||||||
CACHE_PRIVATE = 2;
|
|
||||||
CACHE_PUBLIC = 3;
|
|
||||||
}
|
|
||||||
optional sint32 code = 0x01;
|
|
||||||
optional CachePolicy cache_policy = 0x03;
|
|
||||||
optional uint32 ttl = 0x04;
|
|
||||||
optional bytes etag = 0x05;
|
|
||||||
optional string mime = 0x06;
|
|
||||||
optional bytes body = 0x07;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message MercuryMultiGetReply {
|
message MercuryMultiGetReply {
|
||||||
repeated MercuryGetReply reply = 0x1;
|
repeated MercuryReply reply = 0x1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message MercurySubscribed {
|
message MercuryRequest {
|
||||||
required string url = 0x1;
|
optional string uri = 0x1;
|
||||||
|
optional string content_type = 0x2;
|
||||||
|
optional bytes body = 0x3;
|
||||||
|
optional bytes etag = 0x4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message MercuryReply {
|
||||||
|
optional sint32 status_code = 0x1;
|
||||||
|
optional string status_message = 0x2;
|
||||||
|
optional CachePolicy cache_policy = 0x3;
|
||||||
|
enum CachePolicy {
|
||||||
|
CACHE_NO = 0x1;
|
||||||
|
CACHE_PRIVATE = 0x2;
|
||||||
|
CACHE_PUBLIC = 0x3;
|
||||||
|
}
|
||||||
|
optional sint32 ttl = 0x4;
|
||||||
|
optional bytes etag = 0x5;
|
||||||
|
optional string content_type = 0x6;
|
||||||
|
optional bytes body = 0x7;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
message Header {
|
||||||
|
optional string uri = 0x01;
|
||||||
|
optional string content_type = 0x02;
|
||||||
|
optional string method = 0x03;
|
||||||
|
optional sint32 status_code = 0x04;
|
||||||
|
repeated UserField user_fields = 0x06;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UserField {
|
||||||
|
optional string key = 0x01;
|
||||||
|
optional bytes value = 0x02;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
8
protocol/proto/mergedprofile.proto
Normal file
8
protocol/proto/mergedprofile.proto
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
message MergedProfileRequest {
|
||||||
|
}
|
||||||
|
|
||||||
|
message MergedProfileReply {
|
||||||
|
optional string username = 0x1;
|
||||||
|
optional string artistid = 0x2;
|
||||||
|
}
|
||||||
|
|
|
@ -1,154 +1,159 @@
|
||||||
message TopTracks {
|
message TopTracks {
|
||||||
optional string country = 1;
|
optional string country = 0x1;
|
||||||
repeated Track track = 2;
|
repeated Track track = 0x2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ActivityPeriod {
|
message ActivityPeriod {
|
||||||
optional sint32 start_year = 1;
|
optional sint32 start_year = 0x1;
|
||||||
optional sint32 end_year = 2;
|
optional sint32 end_year = 0x2;
|
||||||
optional sint32 decade = 3;
|
optional sint32 decade = 0x3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Artist {
|
message Artist {
|
||||||
optional bytes gid = 1;
|
optional bytes gid = 0x1;
|
||||||
optional string name = 2;
|
optional string name = 0x2;
|
||||||
optional sint32 popularity = 3;
|
optional sint32 popularity = 0x3;
|
||||||
repeated TopTracks top_track = 4;
|
repeated TopTracks top_track = 0x4;
|
||||||
repeated AlbumGroup album_group = 5;
|
repeated AlbumGroup album_group = 0x5;
|
||||||
repeated AlbumGroup single_group = 6;
|
repeated AlbumGroup single_group = 0x6;
|
||||||
repeated AlbumGroup compilation_group = 7;
|
repeated AlbumGroup compilation_group = 0x7;
|
||||||
repeated AlbumGroup appears_on_group = 8;
|
repeated AlbumGroup appears_on_group = 0x8;
|
||||||
repeated string genre = 9;
|
repeated string genre = 0x9;
|
||||||
repeated ExternalId external_id = 10;
|
repeated ExternalId external_id = 0xa;
|
||||||
repeated Image portrait = 11;
|
repeated Image portrait = 0xb;
|
||||||
repeated Biography biography = 12;
|
repeated Biography biography = 0xc;
|
||||||
repeated ActivityPeriod activity_period = 13;
|
repeated ActivityPeriod activity_period = 0xd;
|
||||||
repeated Restriction restriction = 14;
|
repeated Restriction restriction = 0xe;
|
||||||
repeated Artist related = 15;
|
repeated Artist related = 0xf;
|
||||||
optional bool is_portrait_album_cover = 16;
|
optional bool is_portrait_album_cover = 0x10;
|
||||||
optional ImageGroup portrait_group = 17;
|
optional ImageGroup portrait_group = 0x11;
|
||||||
}
|
}
|
||||||
|
|
||||||
message AlbumGroup {
|
message AlbumGroup {
|
||||||
repeated Album album = 1;
|
repeated Album album = 0x1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Date {
|
message Date {
|
||||||
optional sint32 year = 1;
|
optional sint32 year = 0x1;
|
||||||
optional sint32 month = 2;
|
optional sint32 month = 0x2;
|
||||||
optional sint32 day = 3;
|
optional sint32 day = 0x3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Album {
|
message Album {
|
||||||
|
optional bytes gid = 0x1;
|
||||||
|
optional string name = 0x2;
|
||||||
|
repeated Artist artist = 0x3;
|
||||||
|
optional Type type = 0x4;
|
||||||
enum Type {
|
enum Type {
|
||||||
ALBUM = 1;
|
ALBUM = 0x1;
|
||||||
SINGLE = 2;
|
SINGLE = 0x2;
|
||||||
COMPILATION = 3;
|
COMPILATION = 0x3;
|
||||||
}
|
}
|
||||||
optional bytes gid = 1;
|
optional string label = 0x5;
|
||||||
optional string name = 2;
|
optional Date date = 0x6;
|
||||||
repeated Artist artist = 3;
|
optional sint32 popularity = 0x7;
|
||||||
optional Type typ = 4;
|
repeated string genre = 0x8;
|
||||||
optional string label = 5;
|
repeated Image cover = 0x9;
|
||||||
optional Date date = 6;
|
repeated ExternalId external_id = 0xa;
|
||||||
optional sint32 popularity = 7;
|
repeated Disc disc = 0xb;
|
||||||
repeated string genre = 8;
|
repeated string review = 0xc;
|
||||||
repeated Image cover = 9;
|
repeated Copyright copyright = 0xd;
|
||||||
repeated ExternalId external_id = 10;
|
repeated Restriction restriction = 0xe;
|
||||||
repeated Disc disc = 11;
|
repeated Album related = 0xf;
|
||||||
repeated string review = 12;
|
repeated SalePeriod sale_period = 0x10;
|
||||||
repeated Copyright copyright = 13;
|
optional ImageGroup cover_group = 0x11;
|
||||||
repeated Restriction restriction = 14;
|
|
||||||
repeated Album related = 15;
|
|
||||||
repeated SalePeriod sale_period = 16;
|
|
||||||
optional ImageGroup cover_group = 17;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message Track {
|
message Track {
|
||||||
optional bytes gid = 1;
|
optional bytes gid = 0x1;
|
||||||
optional string name = 2;
|
optional string name = 0x2;
|
||||||
optional Album album = 3;
|
optional Album album = 0x3;
|
||||||
repeated Artist artist = 4;
|
repeated Artist artist = 0x4;
|
||||||
optional sint32 number = 5;
|
optional sint32 number = 0x5;
|
||||||
optional sint32 disc_number = 6;
|
optional sint32 disc_number = 0x6;
|
||||||
optional sint32 duration = 7;
|
optional sint32 duration = 0x7;
|
||||||
optional sint32 popularity = 8;
|
optional sint32 popularity = 0x8;
|
||||||
optional bool explicit = 9;
|
optional bool explicit = 0x9;
|
||||||
repeated ExternalId external_id = 10;
|
repeated ExternalId external_id = 0xa;
|
||||||
repeated Restriction restriction = 11;
|
repeated Restriction restriction = 0xb;
|
||||||
repeated AudioFile file = 12;
|
repeated AudioFile file = 0xc;
|
||||||
repeated Track alternative = 13;
|
repeated Track alternative = 0xd;
|
||||||
repeated SalePeriod sale_period = 14;
|
repeated SalePeriod sale_period = 0xe;
|
||||||
repeated AudioFile preview = 15;
|
repeated AudioFile preview = 0xf;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Image {
|
message Image {
|
||||||
|
optional bytes file_id = 0x1;
|
||||||
|
optional Size size = 0x2;
|
||||||
enum Size {
|
enum Size {
|
||||||
DEFAULT = 0;
|
DEFAULT = 0x0;
|
||||||
SMALL = 1;
|
SMALL = 0x1;
|
||||||
LARGE = 2;
|
LARGE = 0x2;
|
||||||
XLARGE = 3;
|
XLARGE = 0x3;
|
||||||
}
|
}
|
||||||
optional bytes file_id = 1;
|
optional sint32 width = 0x3;
|
||||||
optional Size size = 2;
|
optional sint32 height = 0x4;
|
||||||
optional sint32 width = 3;
|
|
||||||
optional sint32 height = 4;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message ImageGroup {
|
message ImageGroup {
|
||||||
repeated Image image = 1;
|
repeated Image image = 0x1;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Biography {
|
message Biography {
|
||||||
optional string text = 1;
|
optional string text = 0x1;
|
||||||
repeated Image portrait = 2;
|
repeated Image portrait = 0x2;
|
||||||
repeated ImageGroup portrait_group = 3;
|
repeated ImageGroup portrait_group = 0x3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Disc {
|
message Disc {
|
||||||
optional sint32 number = 1;
|
optional sint32 number = 0x1;
|
||||||
optional string name = 2;
|
optional string name = 0x2;
|
||||||
repeated Track track = 3;
|
repeated Track track = 0x3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Copyright {
|
message Copyright {
|
||||||
|
optional Type type = 0x1;
|
||||||
enum Type {
|
enum Type {
|
||||||
P = 0;
|
P = 0x0;
|
||||||
C = 1;
|
C = 0x1;
|
||||||
}
|
}
|
||||||
optional Type typ = 1;
|
optional string text = 0x2;
|
||||||
optional string text = 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message Restriction {
|
message Restriction {
|
||||||
enum Catalogue {
|
optional string countries_allowed = 0x2;
|
||||||
FREE = 0;
|
optional string countries_forbidden = 0x3;
|
||||||
PREMIUM = 1;
|
optional Type type = 0x4;
|
||||||
SHUFFLE = 3;
|
|
||||||
COMMERCIAL = 4;
|
|
||||||
}
|
|
||||||
enum Type {
|
enum Type {
|
||||||
STREAMING = 0;
|
STREAMING = 0x0;
|
||||||
}
|
}
|
||||||
repeated Catalogue catalogue = 1;
|
repeated string catalogue_str = 0x5;
|
||||||
optional string countries_allowed = 2;
|
|
||||||
optional string countries_forbidden = 3;
|
|
||||||
optional Type typ = 4;
|
|
||||||
repeated string usage = 5;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message SalePeriod {
|
message SalePeriod {
|
||||||
repeated Restriction restriction = 1;
|
repeated Restriction restriction = 0x1;
|
||||||
optional Date start = 2;
|
optional Date start = 0x2;
|
||||||
optional Date end = 3;
|
optional Date end = 0x3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ExternalId {
|
message ExternalId {
|
||||||
optional string typ = 1;
|
optional string type = 0x1;
|
||||||
optional string id = 2;
|
optional string id = 0x2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message AudioFile {
|
message AudioFile {
|
||||||
|
optional bytes file_id = 0x1;
|
||||||
|
optional Format format = 0x2;
|
||||||
enum Format {
|
enum Format {
|
||||||
OGG_VORBIS_96 = 0;
|
OGG_VORBIS_96 = 0x0;
|
||||||
OGG_VORBIS_160 = 1;
|
OGG_VORBIS_160 = 0x1;
|
||||||
OGG_VORBIS_320 = 2;
|
OGG_VORBIS_320 = 0x2;
|
||||||
MP3_256 = 3;
|
MP3_256 = 0x3;
|
||||||
MP3_320 = 4;
|
MP3_320 = 0x4;
|
||||||
MP3_160 = 5;
|
MP3_160 = 0x5;
|
||||||
MP3_96 = 6;
|
MP3_96 = 0x6;
|
||||||
OTHER1 = 7; // TODO
|
OTHER = 0x7;
|
||||||
OTHER2 = 8; // TODO
|
OTHER2 = 0x8;
|
||||||
}
|
}
|
||||||
optional bytes gid = 1;
|
|
||||||
optional Format format = 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,80 +1,84 @@
|
||||||
|
import "playlist4ops.proto";
|
||||||
|
import "playlist4meta.proto";
|
||||||
import "playlist4content.proto";
|
import "playlist4content.proto";
|
||||||
import "playlist4issues.proto";
|
import "playlist4issues.proto";
|
||||||
import "playlist4meta.proto";
|
|
||||||
import "playlist4ops.proto";
|
|
||||||
|
|
||||||
message ChangeInfo {
|
message ChangeInfo {
|
||||||
optional string user = 1;
|
optional string user = 0x1;
|
||||||
optional int32 timestamp = 2;
|
optional int32 timestamp = 0x2;
|
||||||
optional bool admin = 3;
|
optional bool admin = 0x3;
|
||||||
optional bool undo = 4;
|
optional bool undo = 0x4;
|
||||||
optional bool redo = 5;
|
optional bool redo = 0x5;
|
||||||
optional bool merge = 6;
|
optional bool merge = 0x6;
|
||||||
optional bool compressed = 7;
|
optional bool compressed = 0x7;
|
||||||
optional bool migration = 8;
|
optional bool migration = 0x8;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Delta {
|
message Delta {
|
||||||
optional bytes base_version = 1;
|
optional bytes base_version = 0x1;
|
||||||
repeated Op ops = 2;
|
repeated Op ops = 0x2;
|
||||||
optional ChangeInfo info = 4;
|
optional ChangeInfo info = 0x4;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Merge {
|
message Merge {
|
||||||
optional bytes base_version = 1;
|
optional bytes base_version = 0x1;
|
||||||
optional bytes merge_version = 2;
|
optional bytes merge_version = 0x2;
|
||||||
optional ChangeInfo info = 4;
|
optional ChangeInfo info = 0x4;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ChangeSet {
|
message ChangeSet {
|
||||||
|
optional Kind kind = 0x1;
|
||||||
enum Kind {
|
enum Kind {
|
||||||
KIND_UNKNOWN = 0;
|
KIND_UNKNOWN = 0x0;
|
||||||
DELTA = 2;
|
DELTA = 0x2;
|
||||||
MERGE = 3;
|
MERGE = 0x3;
|
||||||
};
|
|
||||||
required Kind kind = 1;
|
|
||||||
optional Delta delta = 2;
|
|
||||||
optional Merge merge = 3;
|
|
||||||
}
|
}
|
||||||
|
optional Delta delta = 0x2;
|
||||||
|
optional Merge merge = 0x3;
|
||||||
|
}
|
||||||
|
|
||||||
message RevisionTaggedChangeSet {
|
message RevisionTaggedChangeSet {
|
||||||
required bytes revision = 1;
|
optional bytes revision = 0x1;
|
||||||
required ChangeSet change_set = 2;
|
optional ChangeSet change_set = 0x2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Diff {
|
message Diff {
|
||||||
required bytes from_revision = 1;
|
optional bytes from_revision = 0x1;
|
||||||
repeated Op ops = 2;
|
repeated Op ops = 0x2;
|
||||||
required bytes to_revision = 3;
|
optional bytes to_revision = 0x3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ListDump {
|
message ListDump {
|
||||||
optional bytes latestRevision = 1;
|
optional bytes latestRevision = 0x1;
|
||||||
optional int32 length = 2;
|
optional int32 length = 0x2;
|
||||||
optional ListAttributes attributes = 3;
|
optional ListAttributes attributes = 0x3;
|
||||||
optional ListChecksum checksum = 4;
|
optional ListChecksum checksum = 0x4;
|
||||||
optional ListItems contents = 5;
|
optional ListItems contents = 0x5;
|
||||||
repeated Delta pendingDeltas = 7;
|
repeated Delta pendingDeltas = 0x7;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ListChanges {
|
message ListChanges {
|
||||||
optional bytes baseRevision = 1;
|
optional bytes baseRevision = 0x1;
|
||||||
repeated Delta deltas = 2;
|
repeated Delta deltas = 0x2;
|
||||||
optional bool wantResultingRevisions = 3;
|
optional bool wantResultingRevisions = 0x3;
|
||||||
optional bool wantSyncResult = 4;
|
optional bool wantSyncResult = 0x4;
|
||||||
optional ListDump dump = 5;
|
optional ListDump dump = 0x5;
|
||||||
repeated int32 nonces = 6;
|
repeated int32 nonces = 0x6;
|
||||||
}
|
}
|
||||||
|
|
||||||
message SelectedListContent {
|
message SelectedListContent {
|
||||||
optional bytes revision = 1;
|
optional bytes revision = 0x1;
|
||||||
optional int32 length = 2;
|
optional int32 length = 0x2;
|
||||||
optional ListAttributes attributes = 3;
|
optional ListAttributes attributes = 0x3;
|
||||||
optional ListChecksum checksum = 4;
|
optional ListChecksum checksum = 0x4;
|
||||||
optional ListItems contents = 5;
|
optional ListItems contents = 0x5;
|
||||||
optional Diff diff = 6;
|
optional Diff diff = 0x6;
|
||||||
|
optional Diff syncResult = 0x7;
|
||||||
optional Diff syncResult = 7;
|
repeated bytes resultingRevisions = 0x8;
|
||||||
repeated bytes resultingRevisions = 8;
|
optional bool multipleHeads = 0x9;
|
||||||
|
optional bool upToDate = 0xa;
|
||||||
optional bool multipleHeads = 9;
|
repeated ClientResolveAction resolveAction = 0xc;
|
||||||
|
repeated ClientIssue issues = 0xd;
|
||||||
optional bool upToDate = 10;
|
repeated int32 nonces = 0xe;
|
||||||
|
|
||||||
repeated ClientResolveAction resolveAction = 12;
|
|
||||||
repeated ClientIssue issues = 13;
|
|
||||||
|
|
||||||
repeated int32 nonces = 14;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,30 +2,34 @@ import "playlist4meta.proto";
|
||||||
import "playlist4issues.proto";
|
import "playlist4issues.proto";
|
||||||
|
|
||||||
message Item {
|
message Item {
|
||||||
required string uri = 1;
|
optional string uri = 0x1;
|
||||||
optional ItemAttributes attributes = 2;
|
optional ItemAttributes attributes = 0x2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ListItems {
|
message ListItems {
|
||||||
required int32 pos = 1;
|
optional int32 pos = 0x1;
|
||||||
required bool truncated = 2;
|
optional bool truncated = 0x2;
|
||||||
repeated Item items = 3;
|
repeated Item items = 0x3;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ContentRange {
|
message ContentRange {
|
||||||
required int32 pos = 1;
|
optional int32 pos = 0x1;
|
||||||
optional int32 length = 2;
|
optional int32 length = 0x2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ListContentSelection {
|
message ListContentSelection {
|
||||||
optional bool wantRevision = 1;
|
optional bool wantRevision = 0x1;
|
||||||
optional bool wantLength = 2;
|
optional bool wantLength = 0x2;
|
||||||
optional bool wantAttributes = 3;
|
optional bool wantAttributes = 0x3;
|
||||||
optional bool wantChecksum = 4;
|
optional bool wantChecksum = 0x4;
|
||||||
optional bool wantContent = 5;
|
optional bool wantContent = 0x5;
|
||||||
optional ContentRange contentRange = 6;
|
optional ContentRange contentRange = 0x6;
|
||||||
optional bool wantDiff = 7;
|
optional bool wantDiff = 0x7;
|
||||||
optional bytes baseRevision = 8;
|
optional bytes baseRevision = 0x8;
|
||||||
optional bytes hintRevision = 9;
|
optional bytes hintRevision = 0x9;
|
||||||
optional bool wantNothingIfUpToDate = 10;
|
optional bool wantNothingIfUpToDate = 0xa;
|
||||||
optional bool wantResolveAction = 12;
|
optional bool wantResolveAction = 0xc;
|
||||||
repeated ClientIssue issues = 13;
|
repeated ClientIssue issues = 0xd;
|
||||||
repeated ClientResolveAction resolveAction = 14;
|
repeated ClientResolveAction resolveAction = 0xe;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,40 +1,41 @@
|
||||||
message ClientIssue {
|
message ClientIssue {
|
||||||
|
optional Level level = 0x1;
|
||||||
enum Level {
|
enum Level {
|
||||||
LEVEL_UNKNOWN = 0;
|
LEVEL_UNKNOWN = 0x0;
|
||||||
LEVEL_DEBUG = 1;
|
LEVEL_DEBUG = 0x1;
|
||||||
LEVEL_INFO = 2;
|
LEVEL_INFO = 0x2;
|
||||||
LEVEL_NOTICE = 3;
|
LEVEL_NOTICE = 0x3;
|
||||||
LEVEL_WARNING = 4;
|
LEVEL_WARNING = 0x4;
|
||||||
LEVEL_ERROR = 5;
|
LEVEL_ERROR = 0x5;
|
||||||
}
|
}
|
||||||
|
optional Code code = 0x2;
|
||||||
enum Code {
|
enum Code {
|
||||||
CODE_UNKNOWN = 0;
|
CODE_UNKNOWN = 0x0;
|
||||||
CODE_INDEX_OUT_OF_BOUNDS = 1;
|
CODE_INDEX_OUT_OF_BOUNDS = 0x1;
|
||||||
CODE_VERSION_MISMATCH = 2;
|
CODE_VERSION_MISMATCH = 0x2;
|
||||||
CODE_CACHED_CHANGE = 3;
|
CODE_CACHED_CHANGE = 0x3;
|
||||||
CODE_OFFLINE_CHANGE = 4;
|
CODE_OFFLINE_CHANGE = 0x4;
|
||||||
CODE_CONCURRENT_CHANGE = 5;
|
CODE_CONCURRENT_CHANGE = 0x5;
|
||||||
}
|
}
|
||||||
optional Level level = 1;
|
optional int32 repeatCount = 0x3;
|
||||||
optional Code code = 2;
|
|
||||||
optional int32 repeatCount = 3;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message ClientResolveAction {
|
message ClientResolveAction {
|
||||||
|
optional Code code = 0x1;
|
||||||
enum Code {
|
enum Code {
|
||||||
CODE_UNKNOWN = 0;
|
CODE_UNKNOWN = 0x0;
|
||||||
CODE_NO_ACTION = 1;
|
CODE_NO_ACTION = 0x1;
|
||||||
CODE_RETRY = 2;
|
CODE_RETRY = 0x2;
|
||||||
CODE_RELOAD = 3;
|
CODE_RELOAD = 0x3;
|
||||||
CODE_DISCARD_LOCAL_CHANGES = 4;
|
CODE_DISCARD_LOCAL_CHANGES = 0x4;
|
||||||
CODE_SEND_DUMP = 5;
|
CODE_SEND_DUMP = 0x5;
|
||||||
CODE_DISPLAY_ERROR_MESSAGE = 6;
|
CODE_DISPLAY_ERROR_MESSAGE = 0x6;
|
||||||
}
|
}
|
||||||
|
optional Initiator initiator = 0x2;
|
||||||
enum Initiator {
|
enum Initiator {
|
||||||
INITIATOR_UNKNOWN = 0;
|
INITIATOR_UNKNOWN = 0x0;
|
||||||
INITIATOR_SERVER = 1;
|
INITIATOR_SERVER = 0x1;
|
||||||
INITIATOR_CLIENT = 2;
|
INITIATOR_CLIENT = 0x2;
|
||||||
}
|
}
|
||||||
optional Code code = 1;
|
|
||||||
optional Initiator initiator = 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,58 +1,50 @@
|
||||||
message ListChecksum {
|
message ListChecksum {
|
||||||
required int32 version = 1;
|
optional int32 version = 0x1;
|
||||||
optional bytes sha1 = 4;
|
optional bytes sha1 = 0x4;
|
||||||
}
|
}
|
||||||
|
|
||||||
message DownloadFormat {
|
message DownloadFormat {
|
||||||
|
optional Codec codec = 0x1;
|
||||||
enum Codec {
|
enum Codec {
|
||||||
CODEC_UNKNOWN = 0;
|
CODEC_UNKNOWN = 0x0;
|
||||||
OGG_VORBIS = 1;
|
OGG_VORBIS = 0x1;
|
||||||
FLAC = 2;
|
FLAC = 0x2;
|
||||||
MPEG_1_LAYER_3 = 3;
|
MPEG_1_LAYER_3 = 0x3;
|
||||||
}
|
}
|
||||||
required Codec codec = 1;
|
|
||||||
}
|
|
||||||
enum ListAttributeKind {
|
|
||||||
LIST_UNKNOWN = 0;
|
|
||||||
LIST_NAME = 1;
|
|
||||||
LIST_DESCRIPTION = 2;
|
|
||||||
LIST_PICTURE = 3;
|
|
||||||
LIST_COLLABORATIVE = 4;
|
|
||||||
LIST_PL3_VERSION = 5;
|
|
||||||
LIST_DELETED_BY_OWNER = 6;
|
|
||||||
LIST_RESTRICTED_COLLABORATIVE = 7;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message ListAttributes {
|
message ListAttributes {
|
||||||
optional string name = 1;
|
optional string name = 0x1;
|
||||||
optional string description = 2;
|
optional string description = 0x2;
|
||||||
optional bytes picture = 3;
|
optional bytes picture = 0x3;
|
||||||
optional bool collaborative = 4;
|
optional bool collaborative = 0x4;
|
||||||
optional string pl3_version = 5;
|
optional string pl3_version = 0x5;
|
||||||
optional bool deleted_by_owner = 6;
|
optional bool deleted_by_owner = 0x6;
|
||||||
optional bool restricted_collaborative = 7;
|
optional bool restricted_collaborative = 0x7;
|
||||||
}
|
optional int64 deprecated_client_id = 0x8;
|
||||||
enum ItemAttributeKind {
|
optional bool public_starred = 0x9;
|
||||||
ITEM_UNKNOWN = 0;
|
optional string client_id = 0xa;
|
||||||
ITEM_ADDED_BY = 1;
|
|
||||||
ITEM_TIMESTAMP = 2;
|
|
||||||
ITEM_MESSAGE = 3;
|
|
||||||
ITEM_SEEN = 4;
|
|
||||||
ITEM_DOWNLOAD_COUNT = 5;
|
|
||||||
ITEM_DOWNLOAD_FORMAT = 6;
|
|
||||||
ITEM_SEVENDIGITAL_ID = 7;
|
|
||||||
ITEM_SEVENDIGITAL_LEFT = 8;
|
|
||||||
ITEM_SEEN_AT = 9;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message ItemAttributes {
|
message ItemAttributes {
|
||||||
optional string added_by = 1;
|
optional string added_by = 0x1;
|
||||||
optional string message = 3;
|
optional int64 timestamp = 0x2;
|
||||||
optional bool seen = 4;
|
optional string message = 0x3;
|
||||||
optional DownloadFormat download_format = 6;
|
optional bool seen = 0x4;
|
||||||
optional string sevendigital_id = 7;
|
optional int64 download_count = 0x5;
|
||||||
|
optional DownloadFormat download_format = 0x6;
|
||||||
|
optional string sevendigital_id = 0x7;
|
||||||
|
optional int64 sevendigital_left = 0x8;
|
||||||
|
optional int64 seen_at = 0x9;
|
||||||
|
optional bool public = 0xa;
|
||||||
}
|
}
|
||||||
|
|
||||||
message StringAttribute {
|
message StringAttribute {
|
||||||
required string key = 1;
|
optional string key = 0x1;
|
||||||
required string value = 2;
|
optional string value = 0x2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message StringAttributes {
|
message StringAttributes {
|
||||||
repeated StringAttribute attribute = 1;
|
repeated StringAttribute attribute = 0x1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,68 +1,101 @@
|
||||||
import "playlist4content.proto";
|
|
||||||
import "playlist4meta.proto";
|
import "playlist4meta.proto";
|
||||||
|
import "playlist4content.proto";
|
||||||
|
|
||||||
message Add {
|
message Add {
|
||||||
optional int32 fromIndex = 1;
|
optional int32 fromIndex = 0x1;
|
||||||
repeated Item items = 2;
|
repeated Item items = 0x2;
|
||||||
optional ListChecksum list_checksum = 3;
|
optional ListChecksum list_checksum = 0x3;
|
||||||
optional bool addLast = 4;
|
optional bool addLast = 0x4;
|
||||||
optional bool addFirst = 5;
|
optional bool addFirst = 0x5;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Rem {
|
message Rem {
|
||||||
optional int32 fromIndex = 1;
|
optional int32 fromIndex = 0x1;
|
||||||
optional int32 length = 2;
|
optional int32 length = 0x2;
|
||||||
repeated Item items = 3;
|
repeated Item items = 0x3;
|
||||||
optional ListChecksum list_checksum = 4;
|
optional ListChecksum list_checksum = 0x4;
|
||||||
optional ListChecksum items_checksum = 5;
|
optional ListChecksum items_checksum = 0x5;
|
||||||
optional ListChecksum uris_checksum = 6;
|
optional ListChecksum uris_checksum = 0x6;
|
||||||
optional bool itemsAsKey = 7;
|
optional bool itemsAsKey = 0x7;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Mov {
|
message Mov {
|
||||||
required int32 fromIndex = 1;
|
optional int32 fromIndex = 0x1;
|
||||||
required int32 length = 2;
|
optional int32 length = 0x2;
|
||||||
required int32 toIndex = 3;
|
optional int32 toIndex = 0x3;
|
||||||
optional ListChecksum list_checksum = 4;
|
optional ListChecksum list_checksum = 0x4;
|
||||||
optional ListChecksum items_checksum = 5;
|
optional ListChecksum items_checksum = 0x5;
|
||||||
optional ListChecksum uris_checksum = 6;
|
optional ListChecksum uris_checksum = 0x6;
|
||||||
}
|
}
|
||||||
|
|
||||||
message ItemAttributesPartialState {
|
message ItemAttributesPartialState {
|
||||||
required ItemAttributes values = 1;
|
optional ItemAttributes values = 0x1;
|
||||||
repeated ItemAttributeKind no_value = 2;
|
repeated ItemAttributeKind no_value = 0x2;
|
||||||
|
|
||||||
|
enum ItemAttributeKind {
|
||||||
|
ITEM_UNKNOWN = 0x0;
|
||||||
|
ITEM_ADDED_BY = 0x1;
|
||||||
|
ITEM_TIMESTAMP = 0x2;
|
||||||
|
ITEM_MESSAGE = 0x3;
|
||||||
|
ITEM_SEEN = 0x4;
|
||||||
|
ITEM_DOWNLOAD_COUNT = 0x5;
|
||||||
|
ITEM_DOWNLOAD_FORMAT = 0x6;
|
||||||
|
ITEM_SEVENDIGITAL_ID = 0x7;
|
||||||
|
ITEM_SEVENDIGITAL_LEFT = 0x8;
|
||||||
|
ITEM_SEEN_AT = 0x9;
|
||||||
|
ITEM_PUBLIC = 0xa;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
message ListAttributesPartialState {
|
message ListAttributesPartialState {
|
||||||
required ListAttributes values = 1;
|
optional ListAttributes values = 0x1;
|
||||||
repeated ListAttributeKind no_value = 2;
|
repeated ListAttributeKind no_value = 0x2;
|
||||||
|
|
||||||
|
enum ListAttributeKind {
|
||||||
|
LIST_UNKNOWN = 0x0;
|
||||||
|
LIST_NAME = 0x1;
|
||||||
|
LIST_DESCRIPTION = 0x2;
|
||||||
|
LIST_PICTURE = 0x3;
|
||||||
|
LIST_COLLABORATIVE = 0x4;
|
||||||
|
LIST_PL3_VERSION = 0x5;
|
||||||
|
LIST_DELETED_BY_OWNER = 0x6;
|
||||||
|
LIST_RESTRICTED_COLLABORATIVE = 0x7;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
message UpdateItemAttributes {
|
message UpdateItemAttributes {
|
||||||
required int32 index = 1;
|
optional int32 index = 0x1;
|
||||||
required ItemAttributesPartialState new_attributes = 2;
|
optional ItemAttributesPartialState new_attributes = 0x2;
|
||||||
optional ItemAttributesPartialState old_attributes = 3;
|
optional ItemAttributesPartialState old_attributes = 0x3;
|
||||||
optional ListChecksum list_checksum = 4;
|
optional ListChecksum list_checksum = 0x4;
|
||||||
optional ListChecksum old_attributes_checksum = 5;
|
optional ListChecksum old_attributes_checksum = 0x5;
|
||||||
}
|
}
|
||||||
|
|
||||||
message UpdateListAttributes {
|
message UpdateListAttributes {
|
||||||
required ListAttributesPartialState new_attributes = 1;
|
optional ListAttributesPartialState new_attributes = 0x1;
|
||||||
optional ListAttributesPartialState old_attributes = 2;
|
optional ListAttributesPartialState old_attributes = 0x2;
|
||||||
optional ListChecksum list_checksum = 3;
|
optional ListChecksum list_checksum = 0x3;
|
||||||
optional ListChecksum old_attributes_checksum = 4;
|
optional ListChecksum old_attributes_checksum = 0x4;
|
||||||
}
|
}
|
||||||
|
|
||||||
message Op {
|
message Op {
|
||||||
|
optional Kind kind = 0x1;
|
||||||
enum Kind {
|
enum Kind {
|
||||||
KIND_UNKNOWN = 0;
|
KIND_UNKNOWN = 0x0;
|
||||||
ADD = 2;
|
ADD = 0x2;
|
||||||
REM = 3;
|
REM = 0x3;
|
||||||
MOV = 4;
|
MOV = 0x4;
|
||||||
UPDATE_ITEM_ATTRIBUTES = 5;
|
UPDATE_ITEM_ATTRIBUTES = 0x5;
|
||||||
UPDATE_LIST_ATTRIBUTES = 6;
|
UPDATE_LIST_ATTRIBUTES = 0x6;
|
||||||
};
|
}
|
||||||
required Kind kind = 1;
|
optional Add add = 0x2;
|
||||||
optional Add add = 2;
|
optional Rem rem = 0x3;
|
||||||
optional Rem rem = 3;
|
optional Mov mov = 0x4;
|
||||||
optional Mov mov = 4;
|
optional UpdateItemAttributes update_item_attributes = 0x5;
|
||||||
optional UpdateItemAttributes update_item_attributes = 5;
|
optional UpdateListAttributes update_list_attributes = 0x6;
|
||||||
optional UpdateListAttributes update_list_attributes = 6;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message OpList {
|
message OpList {
|
||||||
repeated Op ops = 1;
|
repeated Op ops = 0x1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,118 +0,0 @@
|
||||||
import "playlist4changes.proto";
|
|
||||||
import "playlist4content.proto";
|
|
||||||
|
|
||||||
message RequestContext {
|
|
||||||
optional bool administrative = 2;
|
|
||||||
optional bool migration = 4;
|
|
||||||
optional string tag = 7;
|
|
||||||
optional bool useStarredView = 8;
|
|
||||||
optional bool syncWithPublished = 9;
|
|
||||||
}
|
|
||||||
message GetCurrentRevisionArgs {
|
|
||||||
optional bytes uri = 1;
|
|
||||||
optional RequestContext context = 2;
|
|
||||||
}
|
|
||||||
message GetChangesInSequenceRangeArgs {
|
|
||||||
optional bytes uri = 1;
|
|
||||||
optional RequestContext context = 2;
|
|
||||||
optional int32 fromSequenceNumber = 3;
|
|
||||||
optional int32 toSequenceNumber = 4;
|
|
||||||
}
|
|
||||||
message GetChangesInSequenceRangeMatchingPl3VersionArgs {
|
|
||||||
optional bytes uri = 1;
|
|
||||||
optional RequestContext context = 2;
|
|
||||||
optional int32 fromSequenceNumber = 3;
|
|
||||||
optional int32 toSequenceNumber = 4;
|
|
||||||
optional string pl3Version = 5;
|
|
||||||
}
|
|
||||||
message GetChangesInSequenceRangeReturn {
|
|
||||||
repeated RevisionTaggedChangeSet result = 1;
|
|
||||||
}
|
|
||||||
message ObliterateListArgs {
|
|
||||||
optional bytes uri = 1;
|
|
||||||
optional RequestContext context = 2;
|
|
||||||
}
|
|
||||||
message UpdatePublishedArgs {
|
|
||||||
optional bytes publishedUri = 1;
|
|
||||||
optional RequestContext context = 2;
|
|
||||||
optional bytes uri = 3;
|
|
||||||
optional bool isPublished = 4;
|
|
||||||
}
|
|
||||||
message SynchronizeArgs {
|
|
||||||
optional bytes uri = 1;
|
|
||||||
optional RequestContext context = 2;
|
|
||||||
optional ListContentSelection selection = 3;
|
|
||||||
optional ListChanges changes = 4;
|
|
||||||
}
|
|
||||||
message GetSnapshotAtRevisionArgs {
|
|
||||||
optional bytes uri = 1;
|
|
||||||
optional RequestContext context = 2;
|
|
||||||
optional bytes revision = 3;
|
|
||||||
}
|
|
||||||
message SubscribeRequest {
|
|
||||||
repeated bytes uris = 1;
|
|
||||||
}
|
|
||||||
message UnsubscribeRequest {
|
|
||||||
repeated bytes uris = 1;
|
|
||||||
}
|
|
||||||
enum Playlist4InboxErrorKind {
|
|
||||||
INBOX_NOT_ALLOWED = 2;
|
|
||||||
INBOX_INVALID_USER = 3;
|
|
||||||
INBOX_INVALID_URI = 4;
|
|
||||||
INBOX_LIST_TOO_LONG = 5;
|
|
||||||
}
|
|
||||||
message Playlist4ServiceException {
|
|
||||||
optional string why = 1;
|
|
||||||
optional string symbol = 2;
|
|
||||||
optional bool permanent = 3;
|
|
||||||
optional string serviceErrorClass = 4;
|
|
||||||
optional Playlist4InboxErrorKind inboxErrorKind = 5;
|
|
||||||
}
|
|
||||||
message SynchronizeReturn {
|
|
||||||
optional SelectedListContent result = 1;
|
|
||||||
optional Playlist4ServiceException exception = 4;
|
|
||||||
}
|
|
||||||
enum Playlist4ServiceMethodKind {
|
|
||||||
METHOD_UNKNOWN = 0;
|
|
||||||
METHOD_GET_CURRENT_REVISION = 2;
|
|
||||||
METHOD_GET_CHANGES_IN_SEQUENCE_RANGE = 3;
|
|
||||||
METHOD_OBLITERATE_LIST = 4;
|
|
||||||
METHOD_SYNCHRONIZE = 5;
|
|
||||||
METHOD_UPDATE_PUBLISHED = 6;
|
|
||||||
METHOD_GET_CHANGES_IN_SEQUENCE_RANGE_MATCHING_PL3_VERSION = 7;
|
|
||||||
METHOD_GET_SNAPSHOT_AT_REVISION = 8;
|
|
||||||
}
|
|
||||||
message Playlist4ServiceCall {
|
|
||||||
optional Playlist4ServiceMethodKind kind = 1;
|
|
||||||
optional GetCurrentRevisionArgs getCurrentRevisionArgs = 2;
|
|
||||||
optional GetChangesInSequenceRangeArgs getChangesInSequenceRangeArgs = 3;
|
|
||||||
optional ObliterateListArgs obliterateListArgs = 4;
|
|
||||||
optional SynchronizeArgs synchronizeArgs = 5;
|
|
||||||
optional UpdatePublishedArgs updatePublishedArgs = 6;
|
|
||||||
optional GetChangesInSequenceRangeMatchingPl3VersionArgs getChangesInSequenceRangeMatchingPl3VersionArgs = 7;
|
|
||||||
optional GetSnapshotAtRevisionArgs getSnapshotAtRevisionArgs = 8;
|
|
||||||
}
|
|
||||||
message Playlist4ServiceReturn {
|
|
||||||
optional Playlist4ServiceMethodKind kind = 1;
|
|
||||||
optional Playlist4ServiceException exception = 2;
|
|
||||||
optional bytes getCurrentRevisionReturn = 3;
|
|
||||||
optional GetChangesInSequenceRangeReturn getChangesInSequenceRangeReturn = 4;
|
|
||||||
optional bool obliterateListReturn = 5;
|
|
||||||
optional SynchronizeReturn synchronizeReturn = 6;
|
|
||||||
optional bool updatePublishedReturn = 7;
|
|
||||||
optional GetChangesInSequenceRangeReturn getChangesInSequenceRangeMatchingPl3VersionReturn = 8;
|
|
||||||
//optional RevisionTaggedListSnapshot getSnapshotAtRevisionReturn = 9;
|
|
||||||
optional bytes getSnapshotAtRevisionReturn = 9;
|
|
||||||
}
|
|
||||||
message CreateListReply {
|
|
||||||
required bytes uri = 1;
|
|
||||||
optional bytes revision = 2;
|
|
||||||
}
|
|
||||||
message ModifyReply {
|
|
||||||
required bytes uri = 1;
|
|
||||||
optional bytes revision = 2;
|
|
||||||
}
|
|
||||||
message PlaylistModificationInfo {
|
|
||||||
optional bytes uri = 1;
|
|
||||||
optional bytes new_revision = 2;
|
|
||||||
}
|
|
11
protocol/proto/popcount.proto
Normal file
11
protocol/proto/popcount.proto
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
message PopcountRequest {
|
||||||
|
}
|
||||||
|
|
||||||
|
message PopcountResult {
|
||||||
|
optional sint64 count = 0x1;
|
||||||
|
optional bool truncated = 0x2;
|
||||||
|
repeated string user = 0x3;
|
||||||
|
repeated sint64 subscriptionTimestamps = 0x4;
|
||||||
|
repeated sint64 insertionTimestamps = 0x5;
|
||||||
|
}
|
||||||
|
|
92
protocol/proto/presence.proto
Normal file
92
protocol/proto/presence.proto
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
message PlaylistPublishedState {
|
||||||
|
optional string uri = 0x1;
|
||||||
|
optional int64 timestamp = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message PlaylistTrackAddedState {
|
||||||
|
optional string playlist_uri = 0x1;
|
||||||
|
optional string track_uri = 0x2;
|
||||||
|
optional int64 timestamp = 0x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message TrackFinishedPlayingState {
|
||||||
|
optional string uri = 0x1;
|
||||||
|
optional string context_uri = 0x2;
|
||||||
|
optional int64 timestamp = 0x3;
|
||||||
|
optional string referrer_uri = 0x4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message FavoriteAppAddedState {
|
||||||
|
optional string app_uri = 0x1;
|
||||||
|
optional int64 timestamp = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message TrackStartedPlayingState {
|
||||||
|
optional string uri = 0x1;
|
||||||
|
optional string context_uri = 0x2;
|
||||||
|
optional int64 timestamp = 0x3;
|
||||||
|
optional string referrer_uri = 0x4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UriSharedState {
|
||||||
|
optional string uri = 0x1;
|
||||||
|
optional string message = 0x2;
|
||||||
|
optional int64 timestamp = 0x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ArtistFollowedState {
|
||||||
|
optional string uri = 0x1;
|
||||||
|
optional string artist_name = 0x2;
|
||||||
|
optional string artist_cover_uri = 0x3;
|
||||||
|
optional int64 timestamp = 0x4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message DeviceInformation {
|
||||||
|
optional string os = 0x1;
|
||||||
|
optional string type = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GenericPresenceState {
|
||||||
|
optional int32 type = 0x1;
|
||||||
|
optional int64 timestamp = 0x2;
|
||||||
|
optional string item_uri = 0x3;
|
||||||
|
optional string item_name = 0x4;
|
||||||
|
optional string item_image = 0x5;
|
||||||
|
optional string context_uri = 0x6;
|
||||||
|
optional string context_name = 0x7;
|
||||||
|
optional string context_image = 0x8;
|
||||||
|
optional string referrer_uri = 0x9;
|
||||||
|
optional string referrer_name = 0xa;
|
||||||
|
optional string referrer_image = 0xb;
|
||||||
|
optional string message = 0xc;
|
||||||
|
optional DeviceInformation device_information = 0xd;
|
||||||
|
}
|
||||||
|
|
||||||
|
message State {
|
||||||
|
optional int64 timestamp = 0x1;
|
||||||
|
optional Type type = 0x2;
|
||||||
|
enum Type {
|
||||||
|
PLAYLIST_PUBLISHED = 0x1;
|
||||||
|
PLAYLIST_TRACK_ADDED = 0x2;
|
||||||
|
TRACK_FINISHED_PLAYING = 0x3;
|
||||||
|
FAVORITE_APP_ADDED = 0x4;
|
||||||
|
TRACK_STARTED_PLAYING = 0x5;
|
||||||
|
URI_SHARED = 0x6;
|
||||||
|
ARTIST_FOLLOWED = 0x7;
|
||||||
|
GENERIC = 0xb;
|
||||||
|
}
|
||||||
|
optional string uri = 0x3;
|
||||||
|
optional PlaylistPublishedState playlist_published = 0x4;
|
||||||
|
optional PlaylistTrackAddedState playlist_track_added = 0x5;
|
||||||
|
optional TrackFinishedPlayingState track_finished_playing = 0x6;
|
||||||
|
optional FavoriteAppAddedState favorite_app_added = 0x7;
|
||||||
|
optional TrackStartedPlayingState track_started_playing = 0x8;
|
||||||
|
optional UriSharedState uri_shared = 0x9;
|
||||||
|
optional ArtistFollowedState artist_followed = 0xa;
|
||||||
|
optional GenericPresenceState generic = 0xb;
|
||||||
|
}
|
||||||
|
|
||||||
|
message StateList {
|
||||||
|
repeated State states = 0x1;
|
||||||
|
}
|
||||||
|
|
6
protocol/proto/pubsub.proto
Normal file
6
protocol/proto/pubsub.proto
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
message Subscription {
|
||||||
|
optional string uri = 0x1;
|
||||||
|
optional int32 expiry = 0x2;
|
||||||
|
optional int32 status_code = 0x3;
|
||||||
|
}
|
||||||
|
|
56
protocol/proto/radio.proto
Normal file
56
protocol/proto/radio.proto
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
message RadioRequest {
|
||||||
|
repeated string uris = 0x1;
|
||||||
|
optional int32 salt = 0x2;
|
||||||
|
optional int32 length = 0x4;
|
||||||
|
optional string stationId = 0x5;
|
||||||
|
repeated string lastTracks = 0x6;
|
||||||
|
}
|
||||||
|
|
||||||
|
message MultiSeedRequest {
|
||||||
|
repeated string uris = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Feedback {
|
||||||
|
optional string uri = 0x1;
|
||||||
|
optional string type = 0x2;
|
||||||
|
optional double timestamp = 0x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Tracks {
|
||||||
|
repeated string gids = 0x1;
|
||||||
|
optional string source = 0x2;
|
||||||
|
optional string identity = 0x3;
|
||||||
|
repeated string tokens = 0x4;
|
||||||
|
repeated Feedback feedback = 0x5;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Station {
|
||||||
|
optional string id = 0x1;
|
||||||
|
optional string title = 0x2;
|
||||||
|
optional string titleUri = 0x3;
|
||||||
|
optional string subtitle = 0x4;
|
||||||
|
optional string subtitleUri = 0x5;
|
||||||
|
optional string imageUri = 0x6;
|
||||||
|
optional double lastListen = 0x7;
|
||||||
|
repeated string seeds = 0x8;
|
||||||
|
optional int32 thumbsUp = 0x9;
|
||||||
|
optional int32 thumbsDown = 0xa;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Rules {
|
||||||
|
optional string js = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message StationResponse {
|
||||||
|
optional Station station = 0x1;
|
||||||
|
repeated Feedback feedback = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message StationList {
|
||||||
|
repeated Station stations = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message LikedPlaylist {
|
||||||
|
optional string uri = 0x1;
|
||||||
|
}
|
||||||
|
|
42
protocol/proto/search.proto
Normal file
42
protocol/proto/search.proto
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
message SearchRequest {
|
||||||
|
optional string query = 0x1;
|
||||||
|
optional Type type = 0x2;
|
||||||
|
enum Type {
|
||||||
|
TRACK = 0x0;
|
||||||
|
ALBUM = 0x1;
|
||||||
|
ARTIST = 0x2;
|
||||||
|
PLAYLIST = 0x3;
|
||||||
|
USER = 0x4;
|
||||||
|
}
|
||||||
|
optional int32 limit = 0x3;
|
||||||
|
optional int32 offset = 0x4;
|
||||||
|
optional bool did_you_mean = 0x5;
|
||||||
|
optional string spotify_uri = 0x2;
|
||||||
|
repeated bytes file_id = 0x3;
|
||||||
|
optional string url = 0x4;
|
||||||
|
optional string slask_id = 0x5;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Playlist {
|
||||||
|
optional string uri = 0x1;
|
||||||
|
optional string name = 0x2;
|
||||||
|
repeated Image image = 0x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message User {
|
||||||
|
optional string username = 0x1;
|
||||||
|
optional string full_name = 0x2;
|
||||||
|
repeated Image image = 0x3;
|
||||||
|
optional sint32 followers = 0x4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message SearchReply {
|
||||||
|
optional sint32 hits = 0x1;
|
||||||
|
repeated Track track = 0x2;
|
||||||
|
repeated Album album = 0x3;
|
||||||
|
repeated Artist artist = 0x4;
|
||||||
|
repeated Playlist playlist = 0x5;
|
||||||
|
optional string did_you_mean = 0x6;
|
||||||
|
repeated User user = 0x7;
|
||||||
|
}
|
||||||
|
|
10
protocol/proto/social.proto
Normal file
10
protocol/proto/social.proto
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
message DecorationData {
|
||||||
|
optional string username = 0x1;
|
||||||
|
optional string full_name = 0x2;
|
||||||
|
optional string image_url = 0x3;
|
||||||
|
optional string large_image_url = 0x5;
|
||||||
|
optional string first_name = 0x6;
|
||||||
|
optional string last_name = 0x7;
|
||||||
|
optional string facebook_uid = 0x8;
|
||||||
|
}
|
||||||
|
|
47
protocol/proto/socialgraph.proto
Normal file
47
protocol/proto/socialgraph.proto
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
message CountReply {
|
||||||
|
repeated int32 counts = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UserListRequest {
|
||||||
|
optional string last_result = 0x1;
|
||||||
|
optional int32 count = 0x2;
|
||||||
|
optional bool include_length = 0x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message UserListReply {
|
||||||
|
repeated User users = 0x1;
|
||||||
|
optional int32 length = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message User {
|
||||||
|
optional string username = 0x1;
|
||||||
|
optional int32 subscriber_count = 0x2;
|
||||||
|
optional int32 subscription_count = 0x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message ArtistListReply {
|
||||||
|
repeated Artist artists = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Artist {
|
||||||
|
optional string artistid = 0x1;
|
||||||
|
optional int32 subscriber_count = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message StringListRequest {
|
||||||
|
repeated string args = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message StringListReply {
|
||||||
|
repeated string reply = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message TopPlaylistsRequest {
|
||||||
|
optional string username = 0x1;
|
||||||
|
optional int32 count = 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message TopPlaylistsReply {
|
||||||
|
repeated string uris = 0x1;
|
||||||
|
}
|
||||||
|
|
|
@ -1,92 +1,118 @@
|
||||||
enum MessageType {
|
|
||||||
kMessageTypeHello = 1;
|
|
||||||
kMessageTypeGoodbye = 2;
|
|
||||||
kMessageTypeNotify = 10;
|
|
||||||
kMessageTypeLoad = 20;
|
|
||||||
kMessageTypePlay = 21;
|
|
||||||
kMessageTypePause = 22;
|
|
||||||
// kMessageTypePlayPause = 23;
|
|
||||||
kMessageTypeSeek = 24;
|
|
||||||
kMessageTypePrev = 25;
|
|
||||||
kMessageTypeNext = 26;
|
|
||||||
kMessageTypeVolume = 27;
|
|
||||||
kMessageTypeShuffle = 28;
|
|
||||||
kMessageTypeRepeat = 29;
|
|
||||||
kMessageTypeQueue = 30;
|
|
||||||
kMessageTypeVolumeDown = 31;
|
|
||||||
kMessageTypeVolumeUp = 32;
|
|
||||||
kMessageTypeAddToQueue = 33;
|
|
||||||
}
|
|
||||||
enum PlayStatus {
|
|
||||||
kPlayStatusStop = 0;
|
|
||||||
kPlayStatusPlay = 1;
|
|
||||||
kPlayStatusPause = 2;
|
|
||||||
kPlayStatusLoading = 3;
|
|
||||||
kPlayStatusError = 4;
|
|
||||||
}
|
|
||||||
message Goodbye {
|
|
||||||
required string reason = 1;
|
|
||||||
}
|
|
||||||
message State {
|
|
||||||
optional string contextURI = 0x2;
|
|
||||||
optional uint32 index = 0x3;
|
|
||||||
optional uint32 position = 0x4;
|
|
||||||
optional PlayStatus status = 0x5;
|
|
||||||
|
|
||||||
optional uint64 timestamp = 0x7;
|
|
||||||
optional string context_name = 0x8;
|
|
||||||
optional uint32 duration = 0x9;
|
|
||||||
optional uint32 data9 = 0xa;
|
|
||||||
repeated uint64 data10 = 0xb;
|
|
||||||
optional bool shuffle = 0xd;
|
|
||||||
optional bool repeat = 0xe;
|
|
||||||
|
|
||||||
optional string data12 = 0x14;
|
|
||||||
optional uint32 data13 = 0x15;
|
|
||||||
optional uint32 data14 = 0x18;
|
|
||||||
optional uint32 data15 = 0x19;
|
|
||||||
optional uint32 data16 = 0x1a;
|
|
||||||
repeated QueuedTrack queued = 0x1b;
|
|
||||||
message QueuedTrack {
|
|
||||||
optional bytes gid = 0x1;
|
|
||||||
optional string local_uri = 0x2;
|
|
||||||
optional uint32 data1 = 0x3;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
message Frame {
|
message Frame {
|
||||||
required uint32 version = 1;
|
optional uint32 version = 0x1;
|
||||||
required string source = 2;
|
optional string ident = 0x2;
|
||||||
required string version_string = 3;
|
optional string protocol_version = 0x3;
|
||||||
required uint32 msgid = 4;
|
optional uint32 seq_nr = 0x4;
|
||||||
required uint32 type = 5;
|
optional MessageType typ = 0x5;
|
||||||
|
optional DeviceState device_state = 0x7;
|
||||||
required DeviceInfo device = 0x7;
|
optional Goodbye goodbye = 0xb;
|
||||||
|
|
||||||
//required Goodbye goodbye = 0xb;
|
|
||||||
optional State state = 0xc;
|
optional State state = 0xc;
|
||||||
|
|
||||||
optional uint32 position = 0xd;
|
optional uint32 position = 0xd;
|
||||||
optional uint32 volume = 0xe;
|
optional uint32 volume = 0xe;
|
||||||
|
optional int64 state_update_id = 0x11;
|
||||||
optional uint64 timestamp = 0x11;
|
repeated string recipient = 0x12;
|
||||||
optional string destination = 0x12;
|
optional bytes context_player_state = 0x13;
|
||||||
|
}
|
||||||
message DeviceInfo {
|
|
||||||
optional string version = 0x1;
|
enum MessageType {
|
||||||
required bool active = 0xa;
|
kMessageTypeHello = 0x1;
|
||||||
required bool foreground = 0xb;
|
kMessageTypeGoodbye = 0x2;
|
||||||
required uint32 volume = 0xc;
|
kMessageTypeProbe = 0x3;
|
||||||
required string name = 0xd;
|
kMessageTypeNotify = 0xa;
|
||||||
optional uint32 data15 = 0xe;
|
kMessageTypeLoad = 0x14;
|
||||||
required uint64 activeTime = 0xf;
|
kMessageTypePlay = 0x15;
|
||||||
repeated Data17 data17 = 0x11;
|
kMessageTypePause = 0x16;
|
||||||
|
kMessageTypePlayPause = 0x17;
|
||||||
message Data17 {
|
kMessageTypeSeek = 0x18;
|
||||||
required uint32 data0 = 0x1;
|
kMessageTypePrev = 0x19;
|
||||||
optional uint32 data1 = 0x2;
|
kMessageTypeNext = 0x1a;
|
||||||
repeated string data2 = 0x3;
|
kMessageTypeVolume = 0x1b;
|
||||||
}
|
kMessageTypeShuffle = 0x1c;
|
||||||
}
|
kMessageTypeRepeat = 0x1d;
|
||||||
|
kMessageTypeVolumeDown = 0x1f;
|
||||||
|
kMessageTypeVolumeUp = 0x20;
|
||||||
|
kMessageTypeReplace = 0x21;
|
||||||
|
kMessageTypeLogout = 0x22;
|
||||||
|
kMessageTypeAction = 0x23;
|
||||||
|
}
|
||||||
|
|
||||||
|
message DeviceState {
|
||||||
|
optional string sw_version = 0x1;
|
||||||
|
optional bool is_active = 0xa;
|
||||||
|
optional bool can_play = 0xb;
|
||||||
|
optional uint32 volume = 0xc;
|
||||||
|
optional string name = 0xd;
|
||||||
|
optional uint32 error_code = 0xe;
|
||||||
|
optional int64 became_active_at = 0xf;
|
||||||
|
optional string error_message = 0x10;
|
||||||
|
repeated Capability capabilities = 0x11;
|
||||||
|
repeated string local_uris = 0x12;
|
||||||
|
repeated int32 enc_key = 0x13;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Capability {
|
||||||
|
optional CapabilityType typ = 0x1;
|
||||||
|
repeated int64 intValue = 0x2;
|
||||||
|
repeated string stringValue = 0x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum CapabilityType {
|
||||||
|
kSupportedContexts = 0x1;
|
||||||
|
kCanBePlayer = 0x2;
|
||||||
|
kRestrictToLocal = 0x3;
|
||||||
|
kDeviceType = 0x4;
|
||||||
|
kGaiaEqConnectId = 0x5;
|
||||||
|
kSupportsLogout = 0x6;
|
||||||
|
kIsObservable = 0x7;
|
||||||
|
kVolumeSteps = 0x8;
|
||||||
|
kSupportedTypes = 0x9;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Goodbye {
|
||||||
|
optional string reason = 0x1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message State {
|
||||||
|
optional string context_uri = 0x2;
|
||||||
|
optional uint32 index = 0x3;
|
||||||
|
optional uint32 position_ms = 0x4;
|
||||||
|
optional PlayStatus status = 0x5;
|
||||||
|
optional uint64 position_measured_at = 0x7;
|
||||||
|
optional string context_description = 0x8;
|
||||||
|
optional bool shuffle = 0xd;
|
||||||
|
optional bool repeat = 0xe;
|
||||||
|
optional string last_command_ident = 0x14;
|
||||||
|
optional uint32 last_command_msgid = 0x15;
|
||||||
|
optional bool playing_from_fallback = 0x18;
|
||||||
|
optional uint32 row = 0x19;
|
||||||
|
optional uint32 playing_track_index = 0x1a;
|
||||||
|
repeated TrackRef track = 0x1b;
|
||||||
|
optional Ad ad = 0x1c;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum PlayStatus {
|
||||||
|
kPlayStatusStop = 0x0;
|
||||||
|
kPlayStatusPlay = 0x1;
|
||||||
|
kPlayStatusPause = 0x2;
|
||||||
|
kPlayStatusLoading = 0x3;
|
||||||
|
}
|
||||||
|
|
||||||
|
message TrackRef {
|
||||||
|
optional bytes gid = 0x1;
|
||||||
|
optional string uri = 0x2;
|
||||||
|
optional bool queued = 0x3;
|
||||||
|
optional string context = 0x4;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Ad {
|
||||||
|
optional int32 next = 0x1;
|
||||||
|
optional bytes ogg_fid = 0x2;
|
||||||
|
optional bytes image_fid = 0x3;
|
||||||
|
optional int32 duration = 0x4;
|
||||||
|
optional string click_url = 0x5;
|
||||||
|
optional string impression_url = 0x6;
|
||||||
|
optional string product = 0x7;
|
||||||
|
optional string advertiser = 0x8;
|
||||||
|
optional bytes gid = 0x9;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
41
protocol/proto/suggest.proto
Normal file
41
protocol/proto/suggest.proto
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
message Track {
|
||||||
|
optional bytes gid = 0x1;
|
||||||
|
optional string name = 0x2;
|
||||||
|
optional bytes image = 0x3;
|
||||||
|
repeated string artist_name = 0x4;
|
||||||
|
repeated bytes artist_gid = 0x5;
|
||||||
|
optional uint32 rank = 0x6;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Artist {
|
||||||
|
optional bytes gid = 0x1;
|
||||||
|
optional string name = 0x2;
|
||||||
|
optional bytes image = 0x3;
|
||||||
|
optional uint32 rank = 0x6;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Album {
|
||||||
|
optional bytes gid = 0x1;
|
||||||
|
optional string name = 0x2;
|
||||||
|
optional bytes image = 0x3;
|
||||||
|
repeated string artist_name = 0x4;
|
||||||
|
repeated bytes artist_gid = 0x5;
|
||||||
|
optional uint32 rank = 0x6;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Playlist {
|
||||||
|
optional string uri = 0x1;
|
||||||
|
optional string name = 0x2;
|
||||||
|
optional string image_uri = 0x3;
|
||||||
|
optional string owner_name = 0x4;
|
||||||
|
optional string owner_uri = 0x5;
|
||||||
|
optional uint32 rank = 0x6;
|
||||||
|
}
|
||||||
|
|
||||||
|
message Suggestions {
|
||||||
|
repeated Track track = 0x1;
|
||||||
|
repeated Album album = 0x2;
|
||||||
|
repeated Artist artist = 0x3;
|
||||||
|
repeated Playlist playlist = 0x4;
|
||||||
|
}
|
||||||
|
|
4
protocol/proto/toplist.proto
Normal file
4
protocol/proto/toplist.proto
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
message Toplist {
|
||||||
|
repeated string items = 0x1;
|
||||||
|
}
|
||||||
|
|
|
@ -7,11 +7,5 @@ mod_path! keyexchange (concat!(env!("OUT_DIR"), "/keyexchange.rs"));
|
||||||
mod_path! authentication (concat!(env!("OUT_DIR"), "/authentication.rs"));
|
mod_path! authentication (concat!(env!("OUT_DIR"), "/authentication.rs"));
|
||||||
mod_path! mercury (concat!(env!("OUT_DIR"), "/mercury.rs"));
|
mod_path! mercury (concat!(env!("OUT_DIR"), "/mercury.rs"));
|
||||||
mod_path! metadata (concat!(env!("OUT_DIR"), "/metadata.rs"));
|
mod_path! metadata (concat!(env!("OUT_DIR"), "/metadata.rs"));
|
||||||
|
mod_path! spirc (concat!(env!("OUT_DIR"), "/spirc.rs"));
|
||||||
mod_path! playlist4changes (concat!(env!("OUT_DIR"), "/playlist4changes.rs"));
|
|
||||||
mod_path! playlist4content (concat!(env!("OUT_DIR"), "/playlist4content.rs"));
|
|
||||||
mod_path! playlist4issues (concat!(env!("OUT_DIR"), "/playlist4issues.rs"));
|
|
||||||
mod_path! playlist4meta (concat!(env!("OUT_DIR"), "/playlist4meta.rs"));
|
|
||||||
mod_path! playlist4ops (concat!(env!("OUT_DIR"), "/playlist4ops.rs"));
|
|
||||||
mod_path! playlist4service (concat!(env!("OUT_DIR"), "/playlist4service.rs"));
|
|
||||||
|
|
||||||
|
|
18
src/main.rs
18
src/main.rs
|
@ -1,6 +1,6 @@
|
||||||
#![crate_name = "librespot"]
|
#![crate_name = "librespot"]
|
||||||
|
|
||||||
#![feature(alloc,plugin,core,collections,std_misc,zero_one)]
|
#![feature(plugin,zero_one,iter_arith,slice_position_elem,slice_bytes,bitset,mpsc_select,arc_weak,append)]
|
||||||
|
|
||||||
#![plugin(protobuf_macros)]
|
#![plugin(protobuf_macros)]
|
||||||
#[macro_use] extern crate lazy_static;
|
#[macro_use] extern crate lazy_static;
|
||||||
|
@ -62,6 +62,16 @@ fn main() {
|
||||||
session.poll();
|
session.poll();
|
||||||
|
|
||||||
let mut cache = MetadataCache::new(session.metadata.clone());
|
let mut cache = MetadataCache::new(session.metadata.clone());
|
||||||
|
|
||||||
|
|
||||||
|
print_track(&mut cache, track_id);
|
||||||
|
|
||||||
|
loop {
|
||||||
|
session.poll();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn print_track(cache: &mut MetadataCache, track_id: SpotifyId) {
|
||||||
let track : TrackRef = cache.get(track_id);
|
let track : TrackRef = cache.get(track_id);
|
||||||
|
|
||||||
let album : AlbumRef = {
|
let album : AlbumRef = {
|
||||||
|
@ -85,11 +95,5 @@ fn main() {
|
||||||
let data = handle.unwrap();
|
let data = handle.unwrap();
|
||||||
eprintln!("{}", data.name);
|
eprintln!("{}", data.name);
|
||||||
}
|
}
|
||||||
|
|
||||||
Player::play(&session, track);
|
|
||||||
|
|
||||||
loop {
|
|
||||||
session.poll();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,23 +12,23 @@ use librespot_protocol as protocol;
|
||||||
use subsystem::Subsystem;
|
use subsystem::Subsystem;
|
||||||
use util::Either::{Left, Right};
|
use util::Either::{Left, Right};
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq, Eq)]
|
||||||
pub enum MercuryMethod {
|
pub enum MercuryMethod {
|
||||||
GET,
|
GET,
|
||||||
GETX,
|
|
||||||
SUB,
|
SUB,
|
||||||
UNSUB,
|
UNSUB,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct MercuryRequest {
|
pub struct MercuryRequest {
|
||||||
pub method: MercuryMethod,
|
pub method: MercuryMethod,
|
||||||
pub url: String,
|
pub uri: String,
|
||||||
pub mime: Option<String>,
|
pub content_type: Option<String>,
|
||||||
pub callback: MercuryCallback
|
pub callback: MercuryCallback
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct MercuryResponse {
|
pub struct MercuryResponse {
|
||||||
pub url: String,
|
pub uri: String,
|
||||||
pub payload: LinkedList<Vec<u8>>
|
pub payload: LinkedList<Vec<u8>>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,7 +53,6 @@ impl fmt::Display for MercuryMethod {
|
||||||
fn fmt(&self, formatter: &mut fmt::Formatter) -> Result<(), fmt::Error> {
|
fn fmt(&self, formatter: &mut fmt::Formatter) -> Result<(), fmt::Error> {
|
||||||
formatter.write_str(match *self {
|
formatter.write_str(match *self {
|
||||||
MercuryMethod::GET => "GET",
|
MercuryMethod::GET => "GET",
|
||||||
MercuryMethod::GETX => "GETX",
|
|
||||||
MercuryMethod::SUB => "SUB",
|
MercuryMethod::SUB => "SUB",
|
||||||
MercuryMethod::UNSUB => "UNSUB"
|
MercuryMethod::UNSUB => "UNSUB"
|
||||||
})
|
})
|
||||||
|
@ -83,8 +82,14 @@ impl MercuryManager {
|
||||||
self.next_seq += 1;
|
self.next_seq += 1;
|
||||||
let data = self.encode_request(&seq, &req);
|
let data = self.encode_request(&seq, &req);
|
||||||
|
|
||||||
|
let cmd = match req.method {
|
||||||
|
MercuryMethod::SUB => 0xb3,
|
||||||
|
MercuryMethod::UNSUB => 0xb4,
|
||||||
|
_ => 0xb2,
|
||||||
|
};
|
||||||
|
|
||||||
self.packet_tx.send(Packet {
|
self.packet_tx.send(Packet {
|
||||||
cmd: 0xb2,
|
cmd: cmd,
|
||||||
data: data
|
data: data
|
||||||
}).unwrap();
|
}).unwrap();
|
||||||
|
|
||||||
|
@ -103,29 +108,24 @@ impl MercuryManager {
|
||||||
buffer
|
buffer
|
||||||
}
|
}
|
||||||
|
|
||||||
fn complete_request(&mut self, seq: &[u8]) {
|
fn complete_request(&mut self, cmd: u8, mut pending: MercuryPending) {
|
||||||
let mut pending = self.pending.remove(seq).unwrap();
|
|
||||||
|
|
||||||
let header_data = match pending.parts.pop_front() {
|
let header_data = match pending.parts.pop_front() {
|
||||||
Some(data) => data,
|
Some(data) => data,
|
||||||
None => panic!("No header part !")
|
None => panic!("No header part !")
|
||||||
};
|
};
|
||||||
|
|
||||||
let header : protocol::mercury::MercuryReply =
|
let header : protocol::mercury::Header =
|
||||||
protobuf::parse_from_bytes(&header_data).unwrap();
|
protobuf::parse_from_bytes(&header_data).unwrap();
|
||||||
|
|
||||||
match pending.callback {
|
if let Some(ref ch) = pending.callback {
|
||||||
Some(ch) => {
|
|
||||||
ch.send(MercuryResponse{
|
ch.send(MercuryResponse{
|
||||||
url: header.get_url().to_string(),
|
uri: header.get_uri().to_string(),
|
||||||
payload: pending.parts
|
payload: pending.parts
|
||||||
}).unwrap();
|
}).unwrap();
|
||||||
}
|
}
|
||||||
None => (),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn handle_packet(&mut self, _cmd: u8, data: Vec<u8>) {
|
fn handle_packet(&mut self, cmd: u8, data: Vec<u8>) {
|
||||||
let mut packet = Cursor::new(data);
|
let mut packet = Cursor::new(data);
|
||||||
|
|
||||||
let seq = {
|
let seq = {
|
||||||
|
@ -137,16 +137,22 @@ impl MercuryManager {
|
||||||
let flags = packet.read_u8().unwrap();
|
let flags = packet.read_u8().unwrap();
|
||||||
let count = packet.read_u16::<BigEndian>().unwrap() as usize;
|
let count = packet.read_u16::<BigEndian>().unwrap() as usize;
|
||||||
|
|
||||||
{
|
let mut pending = if let Some(pending) = self.pending.remove(&seq) {
|
||||||
let pending : &mut MercuryPending = match self.pending.get_mut(&seq) {
|
pending
|
||||||
Some(pending) => pending,
|
} else if cmd == 0xb5 {
|
||||||
None => { return; }
|
MercuryPending {
|
||||||
|
parts: LinkedList::new(),
|
||||||
|
partial: None,
|
||||||
|
callback: None,
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
println!("Ignore seq {:?} cmd {}", seq, cmd);
|
||||||
|
return
|
||||||
};
|
};
|
||||||
|
|
||||||
for i in 0..count {
|
for i in 0..count {
|
||||||
let mut part = Self::parse_part(&mut packet);
|
let mut part = Self::parse_part(&mut packet);
|
||||||
if pending.partial.is_some() {
|
if let Some(mut data) = replace(&mut pending.partial, None) {
|
||||||
let mut data = replace(&mut pending.partial, None).unwrap();
|
|
||||||
data.append(&mut part);
|
data.append(&mut part);
|
||||||
part = data;
|
part = data;
|
||||||
}
|
}
|
||||||
|
@ -157,10 +163,11 @@ impl MercuryManager {
|
||||||
pending.parts.push_back(part);
|
pending.parts.push_back(part);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if flags == 0x1 {
|
if flags == 0x1 {
|
||||||
self.complete_request(&seq);
|
self.complete_request(cmd, pending);
|
||||||
|
} else {
|
||||||
|
self.pending.insert(seq, pending);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,11 +178,13 @@ impl MercuryManager {
|
||||||
packet.write_u8(1).unwrap(); // Flags: FINAL
|
packet.write_u8(1).unwrap(); // Flags: FINAL
|
||||||
packet.write_u16::<BigEndian>(1).unwrap(); // Part count. Only header
|
packet.write_u16::<BigEndian>(1).unwrap(); // Part count. Only header
|
||||||
|
|
||||||
let mut header = protobuf_init!(protocol::mercury::MercuryRequest::new(), {
|
let mut header = protobuf_init!(protocol::mercury::Header::new(), {
|
||||||
url: req.url.clone(),
|
uri: req.uri.clone(),
|
||||||
method: req.method.to_string(),
|
method: req.method.to_string(),
|
||||||
});
|
});
|
||||||
req.mime.clone().map(|mime| header.set_mime(mime));
|
if let Some(ref content_type) = req.content_type {
|
||||||
|
header.set_content_type(content_type.clone());
|
||||||
|
}
|
||||||
|
|
||||||
packet.write_u16::<BigEndian>(header.compute_size() as u16).unwrap();
|
packet.write_u16::<BigEndian>(header.compute_size() as u16).unwrap();
|
||||||
header.write_to_writer(&mut packet).unwrap();
|
header.write_to_writer(&mut packet).unwrap();
|
||||||
|
|
|
@ -34,7 +34,7 @@ impl MetadataTrait for Track {
|
||||||
files: msg.get_file().iter()
|
files: msg.get_file().iter()
|
||||||
.map(|file| {
|
.map(|file| {
|
||||||
let mut dst = [0u8; 20];
|
let mut dst = [0u8; 20];
|
||||||
copy_memory(&file.get_gid(), &mut dst);
|
copy_memory(&file.get_file_id(), &mut dst);
|
||||||
dst
|
dst
|
||||||
})
|
})
|
||||||
.collect(),
|
.collect(),
|
||||||
|
@ -235,8 +235,8 @@ impl MetadataManager {
|
||||||
|
|
||||||
mercury.send(MercuryRequest {
|
mercury.send(MercuryRequest {
|
||||||
method: MercuryMethod::GET,
|
method: MercuryMethod::GET,
|
||||||
url: format!("{}/{}", T::base_url(), object.id.to_base16()),
|
uri: format!("{}/{}", T::base_url(), object.id.to_base16()),
|
||||||
mime: None,
|
content_type: None,
|
||||||
callback: Some(tx)
|
callback: Some(tx)
|
||||||
}).unwrap();
|
}).unwrap();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue