mirror of
https://github.com/librespot-org/librespot.git
synced 2024-12-18 17:11:53 +00:00
Create new librespot-audio crate
This commit is contained in:
parent
2846d3acfd
commit
ec8f80df75
9 changed files with 64 additions and 14 deletions
16
Cargo.lock
generated
16
Cargo.lock
generated
|
@ -253,6 +253,7 @@ dependencies = [
|
||||||
"hyper 0.11.0-a.0 (git+https://github.com/hyperium/hyper)",
|
"hyper 0.11.0-a.0 (git+https://github.com/hyperium/hyper)",
|
||||||
"lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
"lazy_static 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"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-audio 0.1.0",
|
||||||
"librespot-core 0.1.0",
|
"librespot-core 0.1.0",
|
||||||
"librespot-metadata 0.1.0",
|
"librespot-metadata 0.1.0",
|
||||||
"librespot-protocol 0.1.0",
|
"librespot-protocol 0.1.0",
|
||||||
|
@ -283,6 +284,21 @@ dependencies = [
|
||||||
"vorbis 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"vorbis 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "librespot-audio"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"bit-set 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"byteorder 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"futures 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"librespot-core 0.1.0",
|
||||||
|
"log 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"num-bigint 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"num-traits 0.1.37 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"rust-crypto 0.2.36 (git+https://github.com/awmath/rust-crypto.git?branch=avx2)",
|
||||||
|
"tempfile 2.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "librespot-core"
|
name = "librespot-core"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
|
|
@ -20,6 +20,8 @@ name = "librespot"
|
||||||
path = "src/main.rs"
|
path = "src/main.rs"
|
||||||
doc = false
|
doc = false
|
||||||
|
|
||||||
|
[dependencies.librespot-audio]
|
||||||
|
path = "audio"
|
||||||
[dependencies.librespot-core]
|
[dependencies.librespot-core]
|
||||||
path = "core"
|
path = "core"
|
||||||
[dependencies.librespot-metadata]
|
[dependencies.librespot-metadata]
|
||||||
|
|
17
audio/Cargo.toml
Normal file
17
audio/Cargo.toml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
[package]
|
||||||
|
name = "librespot-audio"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Paul Lietar <paul@lietar.net>"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
bit-set = "0.4.0"
|
||||||
|
byteorder = "1.0"
|
||||||
|
rust-crypto = { git = "https://github.com/awmath/rust-crypto.git", branch = "avx2" }
|
||||||
|
futures = "0.1.8"
|
||||||
|
log = "0.3.5"
|
||||||
|
num-bigint = "0.1.35"
|
||||||
|
num-traits = "0.1.36"
|
||||||
|
tempfile = "2.1"
|
||||||
|
|
||||||
|
[dependencies.librespot-core]
|
||||||
|
path = "../core"
|
|
@ -3,7 +3,6 @@ use byteorder::{ByteOrder, BigEndian, WriteBytesExt};
|
||||||
use futures::Stream;
|
use futures::Stream;
|
||||||
use futures::sync::{oneshot, mpsc};
|
use futures::sync::{oneshot, mpsc};
|
||||||
use futures::{Poll, Async, Future};
|
use futures::{Poll, Async, Future};
|
||||||
use futures::future::{self, FutureResult};
|
|
||||||
use std::cmp::min;
|
use std::cmp::min;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
use std::io::{self, Read, Write, Seek, SeekFrom};
|
use std::io::{self, Read, Write, Seek, SeekFrom};
|
||||||
|
@ -22,7 +21,7 @@ pub enum AudioFile {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub enum AudioFileOpen {
|
pub enum AudioFileOpen {
|
||||||
Cached(FutureResult<fs::File, ChannelError>),
|
Cached(Option<fs::File>),
|
||||||
Streaming(AudioFileOpenStreaming),
|
Streaming(AudioFileOpenStreaming),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,8 +96,8 @@ impl Future for AudioFileOpen {
|
||||||
let file = try_ready!(open.poll());
|
let file = try_ready!(open.poll());
|
||||||
Ok(Async::Ready(AudioFile::Streaming(file)))
|
Ok(Async::Ready(AudioFile::Streaming(file)))
|
||||||
}
|
}
|
||||||
AudioFileOpen::Cached(ref mut open) => {
|
AudioFileOpen::Cached(ref mut file) => {
|
||||||
let file = try_ready!(open.poll());
|
let file = file.take().unwrap();
|
||||||
Ok(Async::Ready(AudioFile::Cached(file)))
|
Ok(Async::Ready(AudioFile::Cached(file)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -129,7 +128,7 @@ impl AudioFile {
|
||||||
|
|
||||||
if let Some(file) = cache.as_ref().and_then(|cache| cache.file(file_id)) {
|
if let Some(file) = cache.as_ref().and_then(|cache| cache.file(file_id)) {
|
||||||
debug!("File {} already in cache", file_id);
|
debug!("File {} already in cache", file_id);
|
||||||
return AudioFileOpen::Cached(future::ok(file));
|
return AudioFileOpen::Cached(Some(file));
|
||||||
}
|
}
|
||||||
|
|
||||||
debug!("Downloading file {}", file_id);
|
debug!("Downloading file {}", file_id);
|
||||||
|
@ -247,7 +246,7 @@ impl AudioFileFetch {
|
||||||
let complete_tx = self.complete_tx.take().unwrap();
|
let complete_tx = self.complete_tx.take().unwrap();
|
||||||
|
|
||||||
output.seek(SeekFrom::Start(0)).unwrap();
|
output.seek(SeekFrom::Start(0)).unwrap();
|
||||||
complete_tx.complete(output);
|
let _ = complete_tx.send(output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
17
audio/src/lib.rs
Normal file
17
audio/src/lib.rs
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#[macro_use] extern crate log;
|
||||||
|
#[macro_use] extern crate futures;
|
||||||
|
|
||||||
|
extern crate bit_set;
|
||||||
|
extern crate byteorder;
|
||||||
|
extern crate crypto;
|
||||||
|
extern crate num_traits;
|
||||||
|
extern crate num_bigint;
|
||||||
|
extern crate tempfile;
|
||||||
|
|
||||||
|
extern crate librespot_core as core;
|
||||||
|
|
||||||
|
mod fetch;
|
||||||
|
mod decrypt;
|
||||||
|
|
||||||
|
pub use fetch::{AudioFile, AudioFileOpen};
|
||||||
|
pub use decrypt::AudioDecrypt;
|
|
@ -1,11 +1,11 @@
|
||||||
pub extern crate librespot_core as core;
|
|
||||||
pub extern crate librespot_protocol as protocol;
|
|
||||||
|
|
||||||
extern crate byteorder;
|
extern crate byteorder;
|
||||||
extern crate futures;
|
extern crate futures;
|
||||||
extern crate linear_map;
|
extern crate linear_map;
|
||||||
extern crate protobuf;
|
extern crate protobuf;
|
||||||
|
|
||||||
|
extern crate librespot_core as core;
|
||||||
|
extern crate librespot_protocol as protocol;
|
||||||
|
|
||||||
pub mod cover;
|
pub mod cover;
|
||||||
|
|
||||||
use futures::{Future, BoxFuture};
|
use futures::{Future, BoxFuture};
|
||||||
|
|
|
@ -5,7 +5,6 @@
|
||||||
// TODO: many items from tokio-core::io have been deprecated in favour of tokio-io
|
// TODO: many items from tokio-core::io have been deprecated in favour of tokio-io
|
||||||
#![allow(deprecated)]
|
#![allow(deprecated)]
|
||||||
|
|
||||||
#[macro_use] extern crate futures;
|
|
||||||
#[macro_use] extern crate log;
|
#[macro_use] extern crate log;
|
||||||
#[macro_use] extern crate serde_json;
|
#[macro_use] extern crate serde_json;
|
||||||
#[macro_use] extern crate serde_derive;
|
#[macro_use] extern crate serde_derive;
|
||||||
|
@ -14,6 +13,7 @@ extern crate base64;
|
||||||
extern crate bit_set;
|
extern crate bit_set;
|
||||||
extern crate byteorder;
|
extern crate byteorder;
|
||||||
extern crate crypto;
|
extern crate crypto;
|
||||||
|
extern crate futures;
|
||||||
extern crate getopts;
|
extern crate getopts;
|
||||||
extern crate hyper;
|
extern crate hyper;
|
||||||
extern crate linear_map;
|
extern crate linear_map;
|
||||||
|
@ -32,6 +32,7 @@ extern crate tokio_proto;
|
||||||
extern crate url;
|
extern crate url;
|
||||||
extern crate uuid;
|
extern crate uuid;
|
||||||
|
|
||||||
|
pub extern crate librespot_audio as audio;
|
||||||
pub extern crate librespot_core as core;
|
pub extern crate librespot_core as core;
|
||||||
pub extern crate librespot_protocol as protocol;
|
pub extern crate librespot_protocol as protocol;
|
||||||
pub extern crate librespot_metadata as metadata;
|
pub extern crate librespot_metadata as metadata;
|
||||||
|
@ -51,8 +52,6 @@ extern crate portaudio_rs;
|
||||||
extern crate libpulse_sys;
|
extern crate libpulse_sys;
|
||||||
|
|
||||||
pub mod audio_backend;
|
pub mod audio_backend;
|
||||||
pub mod audio_decrypt;
|
|
||||||
pub mod audio_file;
|
|
||||||
pub mod discovery;
|
pub mod discovery;
|
||||||
pub mod keymaster;
|
pub mod keymaster;
|
||||||
pub mod mixer;
|
pub mod mixer;
|
||||||
|
|
|
@ -13,8 +13,8 @@ use core::session::Session;
|
||||||
use core::util::{self, SpotifyId, Subfile};
|
use core::util::{self, SpotifyId, Subfile};
|
||||||
|
|
||||||
use audio_backend::Sink;
|
use audio_backend::Sink;
|
||||||
use audio_decrypt::AudioDecrypt;
|
use audio::AudioDecrypt;
|
||||||
use audio_file::AudioFile;
|
use audio::AudioFile;
|
||||||
use metadata::{FileFormat, Track, Metadata};
|
use metadata::{FileFormat, Track, Metadata};
|
||||||
use mixer::AudioFilter;
|
use mixer::AudioFilter;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue