Skip to content

Commit

Permalink
Added sets
Browse files Browse the repository at this point in the history
  • Loading branch information
Janez Troha committed Mar 14, 2013
1 parent 10eb425 commit ab98e35
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 4 deletions.
11 changes: 9 additions & 2 deletions mopidy/backends/soundcloud/playlists.py
Expand Up @@ -36,8 +36,15 @@ def refresh(self):
)
playlists.append(playlist)

# TODO Sets, User stream

# TODO User stream? is it even possible?
for (name, uri, tracks) in self.backend.sc_api.get_sets():
scset = Playlist(
uri='soundcloud:%s' % uri,
name=name,
tracks=tracks
)
playlists.append(scset)

self._playlists = playlists
listener.BackendListener.send('playlists_loaded')

Expand Down
20 changes: 18 additions & 2 deletions mopidy/backends/soundcloud/soundcloud.py
Expand Up @@ -49,6 +49,7 @@ class SoundcloudClient(object):

CLIENT_ID = '93e33e327fd8a9b77becd179652272e2'
CLIENT_SECRET = 'f1a2e1ff740f3e1e340e6993ceb18583'
BRAND = u'☁'

def __init__(self, username):
super(SoundcloudClient, self).__init__()
Expand All @@ -73,6 +74,20 @@ def get_favorites(self):
def get_track(self, id, streamable=False):
return self.parse_track(self._get('tracks/%s.json' % id), streamable)

@cache()
def get_sets(self):
playlists = self._get('users/%s/playlists.json' % self.user_id)
tplaylists = []
for playlist in playlists:

name = '%s %s' % (playlist.get('title'), self.BRAND)
uri = playlist.get('permalink')
tracks = self.parse_results(playlist.get('tracks'), True)
logger.info('Fetched set %s with id %s' % (name, uri))
logger.debug(tracks)
tplaylists.append((name, uri, tracks))
return tplaylists

@cache()
def search(self, query):
'SoundCloud API only supports basic query no artist,'
Expand Down Expand Up @@ -144,7 +159,7 @@ def parse_track(self, data, remote_url=False, is_search=False):
artist_kwargs[b'name'] = data.get('user').get('username')
else:
## NOTE mpdroid removes ☁ from track name
track_kwargs[b'name'] = u'☁ ' + name
track_kwargs[b'name'] = '%s %s' % (self.BRAND, name)

if 'date' in data:
track_kwargs[b'date'] = data['date']
Expand All @@ -158,7 +173,8 @@ def parse_track(self, data, remote_url=False, is_search=False):
track_kwargs[b'length'] = int(data.get('duration', 0))

if artist_kwargs:
artist_kwargs[b'name'] = u'☁ ' + artist_kwargs[b'name']
artist_kwargs[b'name'] = '%s %s' % (
self.BRAND, artist_kwargs[b'name'])
artist = Artist(**artist_kwargs)
track_kwargs[b'artists'] = [artist]

Expand Down

0 comments on commit ab98e35

Please sign in to comment.