mirror of
https://github.com/librespot-org/librespot.git
synced 2024-12-18 17:11:53 +00:00
Merge commit 'b0ea636179c771eaecfd52a02b3ad754f598c397'
This commit is contained in:
commit
2a5fd26998
11 changed files with 40 additions and 13 deletions
11
Cargo.lock
generated
11
Cargo.lock
generated
|
@ -6,6 +6,7 @@ dependencies = [
|
||||||
"byteorder 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"byteorder 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"clippy 0.0.63 (registry+https://github.com/rust-lang/crates.io-index)",
|
"clippy 0.0.63 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"dns-sd 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
"dns-sd 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"env_logger 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"eventual 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"eventual 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"getopts 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
"getopts 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"hyper 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"hyper 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
@ -14,6 +15,7 @@ dependencies = [
|
||||||
"libpulse-sys 0.0.0 (git+https://github.com/astro/libpulse-sys)",
|
"libpulse-sys 0.0.0 (git+https://github.com/astro/libpulse-sys)",
|
||||||
"librespot-protocol 0.1.0",
|
"librespot-protocol 0.1.0",
|
||||||
"lmdb-rs 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"lmdb-rs 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
|
"num 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"openssl 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
"openssl 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"portaudio 0.2.0 (git+https://github.com/mvdnes/portaudio-rs)",
|
"portaudio 0.2.0 (git+https://github.com/mvdnes/portaudio-rs)",
|
||||||
|
@ -124,6 +126,15 @@ dependencies = [
|
||||||
"pkg-config 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"pkg-config 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "env_logger"
|
||||||
|
version = "0.3.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
dependencies = [
|
||||||
|
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"regex 0.1.67 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "eventual"
|
name = "eventual"
|
||||||
version = "0.1.6"
|
version = "0.1.6"
|
||||||
|
|
|
@ -33,6 +33,8 @@ rustc-serialize = "~0.3.16"
|
||||||
tempfile = "~2.0.0"
|
tempfile = "~2.0.0"
|
||||||
time = "~0.1.34"
|
time = "~0.1.34"
|
||||||
url = "~0.5.2"
|
url = "~0.5.2"
|
||||||
|
log = "0.3.5"
|
||||||
|
env_logger = "0.3.2"
|
||||||
shannon = { git = "https://github.com/plietar/rust-shannon" }
|
shannon = { git = "https://github.com/plietar/rust-shannon" }
|
||||||
|
|
||||||
vorbis = "~0.0.14"
|
vorbis = "~0.0.14"
|
||||||
|
@ -41,7 +43,7 @@ tremor = { git = "https://github.com/plietar/rust-tremor", optional = t
|
||||||
dns-sd = { version = "~0.1.1", optional = true }
|
dns-sd = { version = "~0.1.1", optional = true }
|
||||||
|
|
||||||
portaudio = { git = "https://github.com/mvdnes/portaudio-rs", optional = true }
|
portaudio = { git = "https://github.com/mvdnes/portaudio-rs", optional = true }
|
||||||
libpulse-sys = { git = "https://github.com/astro/libpulse-sys", optional = true }
|
libpulse-sys = { git = "https://github.com/astro/libpulse-sys", optional = true }
|
||||||
|
|
||||||
json_macros = { git = "https://github.com/plietar/json_macros" }
|
json_macros = { git = "https://github.com/plietar/json_macros" }
|
||||||
protobuf_macros = { git = "https://github.com/plietar/rust-protobuf-macros" }
|
protobuf_macros = { git = "https://github.com/plietar/rust-protobuf-macros" }
|
||||||
|
|
|
@ -30,7 +30,7 @@ impl <'a> Sink for PortAudioSink<'a> {
|
||||||
fn write(&self, data: &[i16]) -> io::Result<()> {
|
fn write(&self, data: &[i16]) -> io::Result<()> {
|
||||||
match self.0.write(&data) {
|
match self.0.write(&data) {
|
||||||
Ok(_) => (),
|
Ok(_) => (),
|
||||||
Err(portaudio::PaError::OutputUnderflowed) => eprintln!("Underflow"),
|
Err(portaudio::PaError::OutputUnderflowed) => error!("PortAudio write underflow"),
|
||||||
Err(e) => panic!("PA Error {}", e),
|
Err(e) => panic!("PA Error {}", e),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@ pub struct PulseAudioSink(*mut pa_simple);
|
||||||
|
|
||||||
impl Open for PulseAudioSink {
|
impl Open for PulseAudioSink {
|
||||||
fn open() -> PulseAudioSink {
|
fn open() -> PulseAudioSink {
|
||||||
println!("Using PulseAudioSink");
|
info!("Using PulseAudioSink");
|
||||||
|
|
||||||
let ss = pa_sample_spec {
|
let ss = pa_sample_spec {
|
||||||
format: PA_SAMPLE_S16LE,
|
format: PA_SAMPLE_S16LE,
|
||||||
|
|
|
@ -122,7 +122,7 @@ impl AudioFile {
|
||||||
(index * CHUNK_SIZE / 4) as u32,
|
(index * CHUNK_SIZE / 4) as u32,
|
||||||
(CHUNK_SIZE / 4) as u32);
|
(CHUNK_SIZE / 4) as u32);
|
||||||
|
|
||||||
println!("Chunk {}", index);
|
trace!("Chunk {}", index);
|
||||||
|
|
||||||
write_file.seek(SeekFrom::Start((index * CHUNK_SIZE) as u64)).unwrap();
|
write_file.seek(SeekFrom::Start((index * CHUNK_SIZE) as u64)).unwrap();
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,9 @@ extern crate time;
|
||||||
extern crate tempfile;
|
extern crate tempfile;
|
||||||
extern crate url;
|
extern crate url;
|
||||||
|
|
||||||
|
#[macro_use]
|
||||||
|
extern crate log;
|
||||||
|
|
||||||
#[cfg(not(feature = "with-tremor"))]
|
#[cfg(not(feature = "with-tremor"))]
|
||||||
extern crate vorbis;
|
extern crate vorbis;
|
||||||
#[cfg(feature = "with-tremor")]
|
#[cfg(feature = "with-tremor")]
|
||||||
|
|
15
src/main.rs
15
src/main.rs
|
@ -1,6 +1,9 @@
|
||||||
extern crate getopts;
|
extern crate getopts;
|
||||||
extern crate librespot;
|
extern crate librespot;
|
||||||
extern crate rpassword;
|
extern crate rpassword;
|
||||||
|
extern crate env_logger;
|
||||||
|
#[macro_use]
|
||||||
|
extern crate log;
|
||||||
|
|
||||||
use rpassword::read_password;
|
use rpassword::read_password;
|
||||||
use std::clone::Clone;
|
use std::clone::Clone;
|
||||||
|
@ -8,6 +11,7 @@ use std::fs::File;
|
||||||
use std::io::{stdout, Read, Write};
|
use std::io::{stdout, Read, Write};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::thread;
|
use std::thread;
|
||||||
|
use std::env;
|
||||||
|
|
||||||
use librespot::audio_backend::BACKENDS;
|
use librespot::audio_backend::BACKENDS;
|
||||||
use librespot::authentication::{Credentials, facebook_login, discovery_login};
|
use librespot::authentication::{Credentials, facebook_login, discovery_login};
|
||||||
|
@ -30,7 +34,14 @@ static APPKEY: Option<&'static [u8]> = Some(include_bytes!(concat!(env!("CARGO_M
|
||||||
static APPKEY: Option<&'static [u8]> = None;
|
static APPKEY: Option<&'static [u8]> = None;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
println!("librespot {} ({}). Built on {}.",
|
let rust_log = "RUST_LOG";
|
||||||
|
if let Err(_) = env::var(rust_log) {
|
||||||
|
env::set_var(rust_log, "debug")
|
||||||
|
}
|
||||||
|
|
||||||
|
env_logger::init().unwrap();
|
||||||
|
|
||||||
|
info!("librespot {} ({}). Built on {}.",
|
||||||
version::short_sha(),
|
version::short_sha(),
|
||||||
version::commit_date(),
|
version::commit_date(),
|
||||||
version::short_now());
|
version::short_now());
|
||||||
|
@ -141,7 +152,7 @@ fn main() {
|
||||||
}).or(stored_credentials)
|
}).or(stored_credentials)
|
||||||
.or_else(|| {
|
.or_else(|| {
|
||||||
if cfg!(feature = "discovery") {
|
if cfg!(feature = "discovery") {
|
||||||
println!("No username provided and no stored credentials, starting discovery ...");
|
info!("No username provided and no stored credentials, starting discovery ...");
|
||||||
Some(discovery_login(&session.config().device_name,
|
Some(discovery_login(&session.config().device_name,
|
||||||
session.device_id()).unwrap())
|
session.device_id()).unwrap())
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -207,7 +207,7 @@ impl PacketHandler for MercuryManager {
|
||||||
callback: MercuryCallback::Channel,
|
callback: MercuryCallback::Channel,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
println!("Ignore seq {:?} cmd {}", seq, cmd);
|
warn!("Ignore seq {:?} cmd {}", seq, cmd);
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -224,7 +224,7 @@ impl PlayerInternal {
|
||||||
|
|
||||||
true
|
true
|
||||||
});
|
});
|
||||||
println!("Load Done");
|
info!("Load Done");
|
||||||
}
|
}
|
||||||
Some(PlayerCommand::Seek(position)) => {
|
Some(PlayerCommand::Seek(position)) => {
|
||||||
vorbis_time_seek_ms(decoder.as_mut().unwrap(), position as i64).unwrap();
|
vorbis_time_seek_ms(decoder.as_mut().unwrap(), position as i64).unwrap();
|
||||||
|
|
|
@ -95,7 +95,7 @@ impl Session {
|
||||||
let aps = apresolve().unwrap();
|
let aps = apresolve().unwrap();
|
||||||
let ap = thread_rng().choose(&aps).expect("No APs found");
|
let ap = thread_rng().choose(&aps).expect("No APs found");
|
||||||
|
|
||||||
println!("Connecting to AP {}", ap);
|
info!("Connecting to AP {}", ap);
|
||||||
let mut connection = PlainConnection::connect(ap).unwrap();
|
let mut connection = PlainConnection::connect(ap).unwrap();
|
||||||
|
|
||||||
let request = protobuf_init!(protocol::keyexchange::ClientHello::new(), {
|
let request = protobuf_init!(protocol::keyexchange::ClientHello::new(), {
|
||||||
|
@ -217,7 +217,7 @@ impl Session {
|
||||||
*self.0.rx_connection.lock().unwrap() = Some(connection.clone());
|
*self.0.rx_connection.lock().unwrap() = Some(connection.clone());
|
||||||
*self.0.tx_connection.lock().unwrap() = Some(connection);
|
*self.0.tx_connection.lock().unwrap() = Some(connection);
|
||||||
|
|
||||||
eprintln!("Authenticated !");
|
info!("Authenticated !");
|
||||||
|
|
||||||
let reusable_credentials = Credentials {
|
let reusable_credentials = Credentials {
|
||||||
username: username,
|
username: username,
|
||||||
|
@ -231,11 +231,11 @@ impl Session {
|
||||||
0xad => {
|
0xad => {
|
||||||
let msg: protocol::keyexchange::APLoginFailed =
|
let msg: protocol::keyexchange::APLoginFailed =
|
||||||
protobuf::parse_from_bytes(&data).unwrap();
|
protobuf::parse_from_bytes(&data).unwrap();
|
||||||
eprintln!("Authentication failed, {:?}", msg);
|
error!("Authentication failed, {:?}", msg);
|
||||||
Err(())
|
Err(())
|
||||||
}
|
}
|
||||||
_ => {
|
_ => {
|
||||||
println!("Unexpected message {:x}", cmd);
|
error!("Unexpected message {:x}", cmd);
|
||||||
Err(())
|
Err(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -100,7 +100,7 @@ impl SpircManager {
|
||||||
let data = pkt.payload.first().unwrap();
|
let data = pkt.payload.first().unwrap();
|
||||||
let frame = protobuf::parse_from_bytes::<protocol::spirc::Frame>(data).unwrap();
|
let frame = protobuf::parse_from_bytes::<protocol::spirc::Frame>(data).unwrap();
|
||||||
|
|
||||||
println!("{:?} {} {} {} {}",
|
debug!("{:?} {} {} {} {}",
|
||||||
frame.get_typ(),
|
frame.get_typ(),
|
||||||
frame.get_device_state().get_name(),
|
frame.get_device_state().get_name(),
|
||||||
frame.get_ident(),
|
frame.get_ident(),
|
||||||
|
|
Loading…
Reference in a new issue