Skip to content
This repository has been archived by the owner on Dec 7, 2020. It is now read-only.

Commit

Permalink
Merge 338f18a into 4fb9c8f
Browse files Browse the repository at this point in the history
  • Loading branch information
belak committed Jul 2, 2016
2 parents 4fb9c8f + 338f18a commit e46670c
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 60 deletions.
78 changes: 18 additions & 60 deletions mopidy_gmusic/library.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
from __future__ import unicode_literals

import hashlib
import logging

from mopidy import backend
from mopidy.models import Album, Artist, Ref, SearchResult, Track

from mopidy_gmusic.lru_cache import LruCache
from mopidy_gmusic.utils import album_to_ref, artist_to_ref, track_to_ref
from mopidy_gmusic.utils import create_id, get_images


logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -49,27 +51,27 @@ def set_all_access(self, all_access):
def _browse_albums(self):
refs = []
for album in self.albums.values():
refs.append(self._album_to_ref(album))
refs.append(album_to_ref(album))
refs.sort(key=lambda ref: ref.name)
return refs

def _browse_album(self, uri):
refs = []
for track in self._lookup_album(uri):
refs.append(self._track_to_ref(track, True))
refs.append(track_to_ref(track, True))
return refs

def _browse_artists(self):
refs = []
for artist in self.artists.values():
refs.append(self._artist_to_ref(artist))
refs.append(artist_to_ref(artist))
refs.sort(key=lambda ref: ref.name)
return refs

def _browse_artist(self, uri):
refs = []
for album in self._get_artist_albums(uri):
refs.append(self._album_to_ref(album))
refs.append(album_to_ref(album))
refs.sort(key=lambda ref: ref.name)
if len(refs) > 0:
refs.insert(0, Ref.directory(uri=uri + ':all', name='All Tracks'))
Expand All @@ -83,7 +85,7 @@ def _browse_artist_all_tracks(self, uri):
refs = []
tracks = self._lookup_artist(artist_uri, True)
for track in tracks:
refs.append(self._track_to_ref(track))
refs.append(track_to_ref(track))
return refs

def browse(self, uri):
Expand Down Expand Up @@ -463,8 +465,8 @@ def _to_mopidy_album(self, song):
name = song.get('album', '')
artist = self._to_mopidy_album_artist(song)
date = unicode(song.get('year', 0))
uri = 'gmusic:album:' + self._create_id(artist.name + name + date)
images = self._get_images(song)
uri = 'gmusic:album:' + create_id(artist.name + name + date)
images = get_images(song)
album = Album(
uri=uri,
name=name,
Expand All @@ -479,7 +481,7 @@ def _to_mopidy_album(self, song):

def _to_mopidy_artist(self, song):
name = song.get('artist', '')
uri = 'gmusic:artist:' + self._create_id(name)
uri = 'gmusic:artist:' + create_id(name)

# First try to process the artist as an aa artist
# (Difference being that non aa artists don't have artistId)
Expand All @@ -498,7 +500,7 @@ def _to_mopidy_album_artist(self, song):
name = song.get('albumArtist', '')
if name.strip() == '':
name = song.get('artist', '')
uri = 'gmusic:artist:' + self._create_id(name)
uri = 'gmusic:artist:' + create_id(name)
artist = Artist(
uri=uri,
name=name)
Expand Down Expand Up @@ -527,7 +529,7 @@ def _aa_to_mopidy_album(self, song):
name = song['album']
artist = self._aa_to_mopidy_album_artist(song)
date = unicode(song.get('year', 0))
images = self._get_images(song)
images = get_images(song)
return Album(
uri=uri,
name=name,
Expand All @@ -537,7 +539,7 @@ def _aa_to_mopidy_album(self, song):

def _aa_to_mopidy_artist(self, song):
name = song.get('artist', '')
artist_id = self._create_id(name)
artist_id = create_id(name)
uri = 'gmusic:artist:' + artist_id
self.aa_artists[artist_id] = song['artistId'][0]
return Artist(
Expand All @@ -548,15 +550,15 @@ def _aa_to_mopidy_album_artist(self, song):
name = song.get('albumArtist', '')
if name.strip() == '':
name = song['artist']
uri = 'gmusic:artist:' + self._create_id(name)
uri = 'gmusic:artist:' + create_id(name)
return Artist(
uri=uri,
name=name)

def _aa_search_track_to_mopidy_track(self, search_track):
track = search_track['track']

aa_artist_id = self._create_id(track['artist'])
aa_artist_id = create_id(track['artist'])
if 'artistId' in track:
self.aa_artists[aa_artist_id] = track['artistId'][0]
else:
Expand Down Expand Up @@ -585,7 +587,7 @@ def _aa_search_track_to_mopidy_track(self, search_track):

def _aa_search_artist_to_mopidy_artist(self, search_artist):
artist = search_artist['artist']
artist_id = self._create_id(artist['name'])
artist_id = create_id(artist['name'])
uri = 'gmusic:artist:' + artist_id
self.aa_artists[artist_id] = artist['artistId']
return Artist(
Expand All @@ -608,55 +610,11 @@ def _aa_search_artist_album_to_mopidy_artist_album(self, album):
name = album.get('albumArtist', '')
if name.strip() == '':
name = album.get('artist', '')
uri = 'gmusic:artist:' + self._create_id(name)
uri = 'gmusic:artist:' + create_id(name)
return Artist(
uri=uri,
name=name)

def _album_to_ref(self, album):
name = ''
for artist in album.artists:
if len(name) > 0:
name += ', '
name += artist.name
if (len(name)) > 0:
name += ' - '
if album.name:
name += album.name
else:
name += 'Unknown Album'
return Ref.directory(uri=album.uri, name=name)

def _artist_to_ref(self, artist):
if artist.name:
name = artist.name
else:
name = 'Unknown artist'
return Ref.directory(uri=artist.uri, name=name)

def _track_to_ref(self, track, with_track_no=False):
if with_track_no and track.track_no > 0:
name = '%d - ' % track.track_no
else:
name = ''
for artist in track.artists:
if len(name) > 0:
name += ', '
name += artist.name
if (len(name)) > 0:
name += ' - '
name += track.name
return Ref.track(uri=track.uri, name=name)

def _get_images(self, song):
if 'albumArtRef' in song:
return [art_ref['url']
for art_ref in song['albumArtRef']
if 'url' in art_ref]

def _create_id(self, u):
return hashlib.md5(u.encode('utf-8')).hexdigest()

def _convert_to_int(self, string):
try:
return int(string)
Expand Down
59 changes: 59 additions & 0 deletions mopidy_gmusic/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
from __future__ import unicode_literals

import hashlib

from mopidy.models import Ref


def album_to_ref(album):
"""Convert a mopidy album to a mopidy ref."""
name = ''
for artist in album.artists:
if len(name) > 0:
name += ', '
name += artist.name
if (len(name)) > 0:
name += ' - '
if album.name:
name += album.name
else:
name += 'Unknown Album'
return Ref.directory(uri=album.uri, name=name)


def artist_to_ref(artist):
"""Convert a mopidy artist to a mopidy ref."""
if artist.name:
name = artist.name
else:
name = 'Unknown artist'
return Ref.directory(uri=artist.uri, name=name)


def track_to_ref(track, with_track_no=False):
"""Convert a mopidy track to a mopidy ref."""
if with_track_no and track.track_no > 0:
name = '%d - ' % track.track_no
else:
name = ''
for artist in track.artists:
if len(name) > 0:
name += ', '
name += artist.name
if (len(name)) > 0:
name += ' - '
name += track.name
return Ref.track(uri=track.uri, name=name)


def get_images(song):
if 'albumArtRef' in song:
return [art_ref['url']
for art_ref in song['albumArtRef']
if 'url' in art_ref]

return []


def create_id(u):
return hashlib.md5(u.encode('utf-8')).hexdigest()

0 comments on commit e46670c

Please sign in to comment.