Implement saved tracks, albums, and artists

This commit is contained in:
KoffeinFlummi
2019-04-16 19:52:22 +02:00
parent dd69a8c6f2
commit 210c7d9f4e
14 changed files with 688 additions and 391 deletions

View File

@@ -1,8 +1,9 @@
use std::fmt;
use std::sync::Arc;
use chrono::{DateTime, Utc};
use rspotify::spotify::model::album::FullAlbum;
use rspotify::spotify::model::track::{FullTrack, SimplifiedTrack};
use rspotify::spotify::model::track::{FullTrack, SavedTrack, SimplifiedTrack};
use queue::Queue;
use traits::ListItem;
@@ -15,10 +16,12 @@ pub struct Track {
pub disc_number: i32,
pub duration: u32,
pub artists: Vec<String>,
pub artist_ids: Vec<String>,
pub album: String,
pub album_artists: Vec<String>,
pub cover_url: String,
pub url: String,
pub added_at: Option<DateTime<Utc>>
}
impl Track {
@@ -28,6 +31,11 @@ impl Track {
.iter()
.map(|ref artist| artist.name.clone())
.collect::<Vec<String>>();
let artist_ids = track
.artists
.iter()
.map(|ref artist| artist.id.clone())
.collect::<Vec<String>>();
let album_artists = album
.artists
.iter()
@@ -46,10 +54,12 @@ impl Track {
disc_number: track.disc_number,
duration: track.duration_ms,
artists,
artist_ids,
album: album.name.clone(),
album_artists,
cover_url,
url: track.uri.clone(),
added_at: None,
}
}
@@ -67,6 +77,11 @@ impl From<&FullTrack> for Track {
.iter()
.map(|ref artist| artist.name.clone())
.collect::<Vec<String>>();
let artist_ids = track
.artists
.iter()
.map(|ref artist| artist.id.clone())
.collect::<Vec<String>>();
let album_artists = track
.album
.artists
@@ -86,14 +101,24 @@ impl From<&FullTrack> for Track {
disc_number: track.disc_number,
duration: track.duration_ms,
artists,
artist_ids,
album: track.album.name.clone(),
album_artists,
cover_url,
url: track.uri.clone(),
added_at: None,
}
}
}
impl From<&SavedTrack> for Track {
fn from(st: &SavedTrack) -> Self {
let mut track: Self = (&st.track).into();
track.added_at = Some(st.added_at);
track
}
}
impl fmt::Display for Track {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{} - {}", self.artists.join(", "), self.title)