mirror of
https://github.com/librespot-org/librespot.git
synced 2024-12-18 17:11:53 +00:00
track: Use a linear map to store files by format.
This commit is contained in:
parent
c76b7b472f
commit
ed14c3469b
5 changed files with 13 additions and 4 deletions
6
Cargo.lock
generated
6
Cargo.lock
generated
|
@ -14,6 +14,7 @@ dependencies = [
|
|||
"lazy_static 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libpulse-sys 0.0.0 (git+https://github.com/astro/libpulse-sys)",
|
||||
"librespot-protocol 0.1.0",
|
||||
"linear-map 1.0.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)",
|
||||
|
@ -275,6 +276,11 @@ dependencies = [
|
|||
"pnacl-build-helper 1.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "linear-map"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "lmdb-rs"
|
||||
version = "0.7.0"
|
||||
|
|
|
@ -23,6 +23,7 @@ getopts = "~0.2.14"
|
|||
hyper = { version = "0.9.1", default-features = false }
|
||||
#json_macros = "~0.3.0"
|
||||
lazy_static = "~0.2.0"
|
||||
linear-map = "1.0"
|
||||
lmdb-rs = "0.7.0"
|
||||
num = "~0.1.30"
|
||||
protobuf = "~1.0.15"
|
||||
|
|
|
@ -16,6 +16,7 @@ extern crate crypto;
|
|||
extern crate eventual;
|
||||
extern crate getopts;
|
||||
extern crate hyper;
|
||||
extern crate linear_map;
|
||||
extern crate lmdb_rs;
|
||||
extern crate num;
|
||||
extern crate protobuf;
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
use eventual::{Async, Future};
|
||||
use linear_map::LinearMap;
|
||||
use protobuf;
|
||||
|
||||
use protocol;
|
||||
|
@ -37,7 +38,7 @@ pub struct Track {
|
|||
pub name: String,
|
||||
pub album: SpotifyId,
|
||||
pub artists: Vec<SpotifyId>,
|
||||
pub files: Vec<(FileId, FileFormat)>,
|
||||
pub files: LinearMap<FileFormat, FileId>,
|
||||
pub alternatives: Vec<SpotifyId>,
|
||||
pub available: bool,
|
||||
}
|
||||
|
@ -85,7 +86,7 @@ impl MetadataTrait for Track {
|
|||
.map(|file| {
|
||||
let mut dst = [0u8; 20];
|
||||
dst.clone_from_slice(&file.get_file_id());
|
||||
(FileId(dst), file.get_format())
|
||||
(file.get_format(), FileId(dst))
|
||||
})
|
||||
.collect();
|
||||
|
||||
|
|
|
@ -196,8 +196,8 @@ fn load_track(session: &Session, track_id: SpotifyId) -> Option<vorbis::Decoder<
|
|||
|
||||
|
||||
|
||||
let file_id = match track.files.iter().find(|&&(_, f)| f == format) {
|
||||
Some(&(file_id, _)) => file_id,
|
||||
let file_id = match track.files.get(&format) {
|
||||
Some(&file_id) => file_id,
|
||||
None => {
|
||||
warn!("Track \"{}\" is not available in format {:?}", track.name, format);
|
||||
return None;
|
||||
|
|
Loading…
Reference in a new issue