local: Move musicbrainz cover art helper to translator

This commit is contained in:
Thomas Adamcik 2014-12-14 23:15:40 +01:00
parent 90fdd46109
commit dcaa0f6732
5 changed files with 24 additions and 26 deletions

View File

@ -133,19 +133,6 @@ def _artists(tags, artist_name, artist_id=None):
return [Artist(name=name) for name in tags[artist_name]] return [Artist(name=name) for name in tags[artist_name]]
# TODO: this doesn't belong in audio, if anything it should be moved to local.
def add_musicbrainz_cover_art(track):
if track.album and track.album.musicbrainz_id:
base = "http://coverartarchive.org/release"
images = frozenset(
["{}/{}/front".format(
base,
track.album.musicbrainz_id)])
album = track.album.copy(images=images)
track = track.copy(album=album)
return track
def audio_data_to_track(data): def audio_data_to_track(data):
"""Convert taglist data + our extras to a track.""" """Convert taglist data + our extras to a track."""
tags = data['tags'] tags = data['tags']

View File

@ -128,7 +128,7 @@ class ScanCommand(commands.Command):
relpath = translator.local_track_uri_to_path(uri, media_dir) relpath = translator.local_track_uri_to_path(uri, media_dir)
file_uri = path.path_to_uri(os.path.join(media_dir, relpath)) file_uri = path.path_to_uri(os.path.join(media_dir, relpath))
data = scanner.scan(file_uri) data = scanner.scan(file_uri)
track = scan.add_musicbrainz_cover_art( track = translator.add_musicbrainz_coverart_to_track(
scan.audio_data_to_track(data).copy(uri=uri)).copy(uri=uri) scan.audio_data_to_track(data).copy(uri=uri)).copy(uri=uri)
library.add(track) library.add(track)
logger.debug('Added %s', track.uri) logger.debug('Added %s', track.uri)

View File

@ -13,10 +13,19 @@ from mopidy.utils.path import path_to_uri, uri_to_path
M3U_EXTINF_RE = re.compile(r'#EXTINF:(-1|\d+),(.*)') M3U_EXTINF_RE = re.compile(r'#EXTINF:(-1|\d+),(.*)')
COVERART_BASE = 'http://coverartarchive.org/release/%s/front'
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def add_musicbrainz_coverart_to_track(track):
if track.album and track.album.musicbrainz_id:
images = [COVERART_BASE % track.album.musicbrainz_id]
album = track.album.copy(images=images)
track = track.copy(album=album)
return track
def local_track_uri_to_file_uri(uri, media_dir): def local_track_uri_to_file_uri(uri, media_dir):
return path_to_uri(local_track_uri_to_path(uri, media_dir)) return path_to_uri(local_track_uri_to_path(uri, media_dir))

View File

@ -65,11 +65,6 @@ class TranslatorTest(unittest.TestCase):
actual = scan.audio_data_to_track(self.data) actual = scan.audio_data_to_track(self.data)
self.assertEqual(expected, actual) self.assertEqual(expected, actual)
def check_local(self, expected):
actual = scan.add_musicbrainz_cover_art(
scan.audio_data_to_track(self.data))
self.assertEqual(expected, actual)
def test_track(self): def test_track(self):
self.check(self.track) self.check(self.track)
@ -200,12 +195,6 @@ class TranslatorTest(unittest.TestCase):
self.data['tags']['musicbrainz-albumid'].append('id') self.data['tags']['musicbrainz-albumid'].append('id')
self.check(self.track) self.check(self.track)
def test_album_musicbrainz_id_cover(self):
album = self.track.album.copy(
images=frozenset(
['http://coverartarchive.org/release/albumid/front']))
self.check_local(self.track.copy(album=album))
def test_missing_album_num_tracks(self): def test_missing_album_num_tracks(self):
del self.data['tags']['track-count'] del self.data['tags']['track-count']
album = self.track.album.copy(num_tracks=None) album = self.track.album.copy(num_tracks=None)

View File

@ -7,7 +7,7 @@ import tempfile
import unittest import unittest
from mopidy.local import translator from mopidy.local import translator
from mopidy.models import Track from mopidy.models import Album, Track
from mopidy.utils import path from mopidy.utils import path
from tests import path_to_data_dir from tests import path_to_data_dir
@ -118,3 +118,16 @@ class M3UToUriTest(unittest.TestCase):
class URItoM3UTest(unittest.TestCase): class URItoM3UTest(unittest.TestCase):
pass pass
class AddMusicbrainzCoverartTest(unittest.TestCase):
def test_add_cover_for_album(self):
album = Album(musicbrainz_id='someid')
track = Track(album=album)
expected = album.copy(
images=['http://coverartarchive.org/release/someid/front'])
self.assertEqual(
track.copy(album=expected),
translator.add_musicbrainz_coverart_to_track(track))