Implement saved tracks, albums, and artists
This commit is contained in:
27
src/track.rs
27
src/track.rs
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user