mirror of
https://github.com/librespot-org/librespot.git
synced 2024-11-08 16:45:43 +00:00
Fix #173 (a track cannot be played with librespot)
Some tracks might have several `allowed` fields, librespot assumes that all fields must match, otherwise track cannot be played. This change collects all `allowed` and `forbidden` lists, then does the final check on whole lists at once.
This commit is contained in:
parent
6f24e3b731
commit
4a17a15a82
1 changed files with 13 additions and 7 deletions
|
@ -16,13 +16,19 @@ fn countrylist_contains(list: &str, country: &str) -> bool {
|
||||||
fn parse_restrictions<'s, I>(restrictions: I, country: &str, catalogue: &str) -> bool
|
fn parse_restrictions<'s, I>(restrictions: I, country: &str, catalogue: &str) -> bool
|
||||||
where I: IntoIterator<Item = &'s protocol::metadata::Restriction>
|
where I: IntoIterator<Item = &'s protocol::metadata::Restriction>
|
||||||
{
|
{
|
||||||
restrictions.into_iter()
|
let mut forbidden = "".to_string();
|
||||||
.filter(|r| r.get_catalogue_str().contains(&catalogue.to_owned()))
|
let mut allowed = "".to_string();
|
||||||
.all(|r| {
|
let rs = restrictions.into_iter().filter(|r|
|
||||||
!countrylist_contains(r.get_countries_forbidden(), country) &&
|
r.get_catalogue_str().contains(&catalogue.to_owned())
|
||||||
(!r.has_countries_allowed() ||
|
);
|
||||||
countrylist_contains(r.get_countries_allowed(), country))
|
|
||||||
})
|
for r in rs {
|
||||||
|
forbidden.push_str(r.get_countries_forbidden());
|
||||||
|
allowed.push_str(r.get_countries_allowed());
|
||||||
|
}
|
||||||
|
|
||||||
|
(forbidden == "" || !countrylist_contains(forbidden.as_str(), country)) &&
|
||||||
|
(allowed == "" || countrylist_contains(allowed.as_str(), country))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait MetadataTrait : Send + 'static {
|
pub trait MetadataTrait : Send + 'static {
|
||||||
|
|
Loading…
Reference in a new issue