1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- use util::SpotifyId;
- use session::Session;
- use metadata::{MetadataRef, Album, Artist, Track};
- #[derive(Debug,Clone)]
- pub enum Link {
- Track {
- id: SpotifyId,
- offset: u32,
- },
- Album {
- id: SpotifyId,
- },
- Artist {
- id: SpotifyId,
- },
- /*
- Search,
- Playlist,
- Profile,
- Starred,
- LocalTrack,
- Image,
- */
- }
- impl Link {
- pub fn from_str(uri: &str) -> Result<Link, ()> {
- let mut parts = uri.split(':');
- if parts.next() != Some("spotify") {
- return Err(())
- }
- match parts.next() {
- Some("track") => parts.next()
- .map(SpotifyId::from_base62)
- .map(|id| Link::Track {
- id: id,
- offset: 0,
- })
- .ok_or(()),
- Some("album") => parts.next()
- .map(SpotifyId::from_base62)
- .map(|id| Link::Album {
- id: id,
- })
- .ok_or(()),
- Some("artist") => parts.next()
- .map(SpotifyId::from_base62)
- .map(|id| Link::Artist {
- id: id,
- })
- .ok_or(()),
- _ => Err(())
- }
- }
- pub fn as_track(&self, session: &Session) -> Option<MetadataRef<Track>> {
- match *self {
- Link::Track { id, .. } => Some(session.metadata::<Track>(id)),
- _ => None,
- }
- }
- pub fn as_album(&self, session: &Session) -> Option<MetadataRef<Album>> {
- match *self {
- Link::Album { id, .. } => Some(session.metadata::<Album>(id)),
- _ => None,
- }
- }
- pub fn as_artist(&self, session: &Session) -> Option<MetadataRef<Artist>> {
- match *self {
- Link::Artist { id, .. } => Some(session.metadata::<Artist>(id)),
- _ => None,
- }
- }
- }
|