From dcaa0f67321d585690314284cfbeaaa88b845ae8 Mon Sep 17 00:00:00 2001 From: Thomas Adamcik Date: Sun, 14 Dec 2014 23:15:40 +0100 Subject: [PATCH] local: Move musicbrainz cover art helper to translator --- mopidy/audio/scan.py | 13 ------------- mopidy/local/commands.py | 2 +- mopidy/local/translator.py | 9 +++++++++ tests/audio/test_scan.py | 11 ----------- tests/local/test_translator.py | 15 ++++++++++++++- 5 files changed, 24 insertions(+), 26 deletions(-) diff --git a/mopidy/audio/scan.py b/mopidy/audio/scan.py index 95152c75..55798f79 100644 --- a/mopidy/audio/scan.py +++ b/mopidy/audio/scan.py @@ -133,19 +133,6 @@ def _artists(tags, artist_name, artist_id=None): 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): """Convert taglist data + our extras to a track.""" tags = data['tags'] diff --git a/mopidy/local/commands.py b/mopidy/local/commands.py index de0990ef..60f8fc4f 100644 --- a/mopidy/local/commands.py +++ b/mopidy/local/commands.py @@ -128,7 +128,7 @@ class ScanCommand(commands.Command): relpath = translator.local_track_uri_to_path(uri, media_dir) file_uri = path.path_to_uri(os.path.join(media_dir, relpath)) 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) library.add(track) logger.debug('Added %s', track.uri) diff --git a/mopidy/local/translator.py b/mopidy/local/translator.py index 7d7f0601..3cbe2066 100644 --- a/mopidy/local/translator.py +++ b/mopidy/local/translator.py @@ -13,10 +13,19 @@ from mopidy.utils.path import path_to_uri, uri_to_path M3U_EXTINF_RE = re.compile(r'#EXTINF:(-1|\d+),(.*)') +COVERART_BASE = 'http://coverartarchive.org/release/%s/front' 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): return path_to_uri(local_track_uri_to_path(uri, media_dir)) diff --git a/tests/audio/test_scan.py b/tests/audio/test_scan.py index 99bfb2c4..ccf2dc5e 100644 --- a/tests/audio/test_scan.py +++ b/tests/audio/test_scan.py @@ -65,11 +65,6 @@ class TranslatorTest(unittest.TestCase): actual = scan.audio_data_to_track(self.data) 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): self.check(self.track) @@ -200,12 +195,6 @@ class TranslatorTest(unittest.TestCase): self.data['tags']['musicbrainz-albumid'].append('id') 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): del self.data['tags']['track-count'] album = self.track.album.copy(num_tracks=None) diff --git a/tests/local/test_translator.py b/tests/local/test_translator.py index d3ba9e68..b238c909 100644 --- a/tests/local/test_translator.py +++ b/tests/local/test_translator.py @@ -7,7 +7,7 @@ import tempfile import unittest from mopidy.local import translator -from mopidy.models import Track +from mopidy.models import Album, Track from mopidy.utils import path from tests import path_to_data_dir @@ -118,3 +118,16 @@ class M3UToUriTest(unittest.TestCase): class URItoM3UTest(unittest.TestCase): 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))