local: Move musicbrainz cover art helper to translator
This commit is contained in:
parent
90fdd46109
commit
dcaa0f6732
@ -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']
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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))
|
||||||
|
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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))
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user