From 51b6c46fcdabd0d614c3615dbb985d14f051f6b5 Mon Sep 17 00:00:00 2001 From: Roderick van Domburg Date: Sat, 11 Dec 2021 16:43:34 +0100 Subject: [PATCH] Receive autoplay and other attributes --- core/src/connection/handshake.rs | 9 +++++++-- core/src/http_client.rs | 10 ++++------ core/src/version.rs | 6 ++++++ 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/core/src/connection/handshake.rs b/core/src/connection/handshake.rs index 3659ab82..8acc0d01 100644 --- a/core/src/connection/handshake.rs +++ b/core/src/connection/handshake.rs @@ -14,6 +14,7 @@ use crate::protocol; use crate::protocol::keyexchange::{ APResponseMessage, ClientHello, ClientResponsePlaintext, Platform, ProductFlags, }; +use crate::version; pub async fn handshake( mut connection: T, @@ -84,13 +85,17 @@ where let mut packet = ClientHello::new(); packet .mut_build_info() - .set_product(protocol::keyexchange::Product::PRODUCT_LIBSPOTIFY); + // ProductInfo won't push autoplay and perhaps other settings + // when set to anything else than PRODUCT_CLIENT + .set_product(protocol::keyexchange::Product::PRODUCT_CLIENT); packet .mut_build_info() .mut_product_flags() .push(PRODUCT_FLAGS); packet.mut_build_info().set_platform(platform); - packet.mut_build_info().set_version(999999999); + packet + .mut_build_info() + .set_version(version::SPOTIFY_VERSION); packet .mut_cryptosuites_supported() .push(protocol::keyexchange::Cryptosuite::CRYPTO_SUITE_SHANNON); diff --git a/core/src/http_client.rs b/core/src/http_client.rs index 157fbaef..7b8aad72 100644 --- a/core/src/http_client.rs +++ b/core/src/http_client.rs @@ -9,7 +9,7 @@ use std::env::consts::OS; use thiserror::Error; use url::Url; -use crate::version; +use crate::version::{SPOTIFY_MOBILE_VERSION, SPOTIFY_VERSION, VERSION_STRING}; pub struct HttpClient { proxy: Option, @@ -54,8 +54,8 @@ impl HttpClient { let connector = HttpsConnector::with_native_roots(); let spotify_version = match OS { - "android" | "ios" => "8.6.84", - _ => "117300517", + "android" | "ios" => SPOTIFY_MOBILE_VERSION.to_owned(), + _ => SPOTIFY_VERSION.to_string(), }; let spotify_platform = match OS { @@ -72,9 +72,7 @@ impl HttpClient { // Some features like lyrics are version-gated and require an official version string. HeaderValue::from_str(&format!( "Spotify/{} {} ({})", - spotify_version, - spotify_platform, - version::VERSION_STRING + spotify_version, spotify_platform, VERSION_STRING ))?, ); diff --git a/core/src/version.rs b/core/src/version.rs index ef553463..a7e3acd9 100644 --- a/core/src/version.rs +++ b/core/src/version.rs @@ -15,3 +15,9 @@ pub const SEMVER: &str = env!("CARGO_PKG_VERSION"); /// A random build id. pub const BUILD_ID: &str = env!("LIBRESPOT_BUILD_ID"); + +/// The protocol version of the Spotify desktop client. +pub const SPOTIFY_VERSION: u64 = 117300517; + +/// The protocol version of the Spotify mobile app. +pub const SPOTIFY_MOBILE_VERSION: &str = "8.6.84";