mirror of
https://github.com/fergalmoran/picard.git
synced 2026-01-03 23:23:59 +00:00
Move cover art images from metadata["~artwork"] to metadata.images.
This commit is contained in:
@@ -193,7 +193,7 @@ class File(LockableObject, Item):
|
||||
|
||||
def save_images(self):
|
||||
"""Save the cover images to disk."""
|
||||
if not "~artwork" in self.metadata:
|
||||
if not self.metadata.images:
|
||||
return
|
||||
settings = self.config.setting
|
||||
filename = self.__script_to_filename(self.config.setting["cover_image_filename"], settings)
|
||||
@@ -203,9 +203,8 @@ class File(LockableObject, Item):
|
||||
if settings['windows_compatible_filenames'] or sys.platform == 'win32':
|
||||
filename = filename.replace('./', '_/').replace('.\\', '_\\')
|
||||
filename = encode_filename(filename)
|
||||
images = self.metadata.getall("~artwork")
|
||||
i = 0
|
||||
for mime, data in images:
|
||||
for mime, data in self.metadata.images:
|
||||
image_filename = filename
|
||||
ext = ".jpg" # TODO
|
||||
if i > 0:
|
||||
|
||||
@@ -172,7 +172,7 @@ class ID3File(File):
|
||||
else:
|
||||
metadata['discnumber'] = value[0]
|
||||
elif frameid == 'APIC':
|
||||
metadata.add('~artwork', (frame.mime, frame.data))
|
||||
metadata.add_image(frame.mime, frame.data)
|
||||
|
||||
if 'date' in metadata:
|
||||
metadata['date'] = sanitize_date(metadata.getall('date')[0])
|
||||
@@ -214,8 +214,7 @@ class ID3File(File):
|
||||
tags.add(id3.TPOS(encoding=0, text=text))
|
||||
|
||||
if self.config.setting['save_images_to_tags']:
|
||||
images = self.metadata.getall('~artwork')
|
||||
for mime, data in images:
|
||||
for mime, data in self.metadata.images:
|
||||
tags.add(id3.APIC(encoding=0, mime=mime, type=3, desc='', data=data))
|
||||
|
||||
tmcl = mutagen.id3.TMCL(encoding=encoding, people=[])
|
||||
|
||||
@@ -93,7 +93,10 @@ class MP4File(File):
|
||||
metadata["totaldiscs"] = str(values[0][1])
|
||||
elif name == "covr":
|
||||
for value in values:
|
||||
metadata.add("~artwork", (None, value))
|
||||
if value.format == value.FORMAT_JPEG:
|
||||
metadata.add_image("image/jpeg", value)
|
||||
else:
|
||||
metadata.add_image("image/png", value)
|
||||
|
||||
self.metadata.update(metadata)
|
||||
self._info(file)
|
||||
@@ -127,6 +130,8 @@ class MP4File(File):
|
||||
else:
|
||||
file.tags["disk"] = [(int(self.metadata["discnumber"]), 0)]
|
||||
|
||||
# TODO save embedded images
|
||||
|
||||
file.save()
|
||||
|
||||
def supports_tag(self, name):
|
||||
|
||||
@@ -40,6 +40,10 @@ class Metadata(LockableObject):
|
||||
LockableObject.__init__(self)
|
||||
self._items = {}
|
||||
self.changed = False
|
||||
self.images = []
|
||||
|
||||
def add_image(self, mime, data):
|
||||
self.images.append((mime, data))
|
||||
|
||||
@needs_read_lock
|
||||
def __repr__(self):
|
||||
@@ -70,6 +74,7 @@ class Metadata(LockableObject):
|
||||
self._items = {}
|
||||
for key, values in other.rawitems():
|
||||
self._items[key] = values[:]
|
||||
self.images = other.images[:]
|
||||
|
||||
@needs_write_lock
|
||||
def update(self, other):
|
||||
@@ -80,12 +85,7 @@ class Metadata(LockableObject):
|
||||
def clear(self):
|
||||
self._items = {}
|
||||
|
||||
def is_readable(self, name):
|
||||
return name not in ['~artwork']
|
||||
|
||||
def __get(self, name, default=None):
|
||||
if not self.is_readable(name):
|
||||
return default
|
||||
values = self._items.get(name, None)
|
||||
if values:
|
||||
if len(values) > 1:
|
||||
|
||||
@@ -83,8 +83,8 @@ class CoverArtBox(QtGui.QGroupBox):
|
||||
|
||||
def set_metadata(self, metadata):
|
||||
data = None
|
||||
if metadata and "~artwork" in metadata:
|
||||
data = metadata.getall("~artwork")[0]
|
||||
if metadata and metadata.images:
|
||||
data = metadata.images[0]
|
||||
self.__set_data(data)
|
||||
if metadata:
|
||||
asin = metadata.get("asin", None)
|
||||
|
||||
@@ -135,6 +135,15 @@ class TagEditor(QtGui.QDialog):
|
||||
item.setData(0, QtCore.Qt.UserRole, QtCore.QVariant(name))
|
||||
item.setText(1, value)
|
||||
|
||||
if len(self.files) == 1:
|
||||
for mime, data in self.files[0].metadata.images:
|
||||
item = QtGui.QListWidgetItem()
|
||||
pixmap = QtGui.QPixmap()
|
||||
pixmap.loadFromData(data)
|
||||
icon = QtGui.QIcon(pixmap)
|
||||
item.setIcon(icon)
|
||||
self.ui.artwork_list.addItem(item)
|
||||
|
||||
def save(self):
|
||||
metadata = Metadata()
|
||||
for i in range(self.ui.tags.topLevelItemCount()):
|
||||
|
||||
@@ -40,10 +40,9 @@ def _coverart_downloaded(album, metadata, release, try_list, data, http, error):
|
||||
album.log.error(str(http.errorString()))
|
||||
coverart(album, metadata, release, try_list)
|
||||
else:
|
||||
image = ("image/jpeg", data)
|
||||
metadata.add("~artwork", image)
|
||||
metadata.add_image("image/jpeg", data)
|
||||
for track in album._new_tracks:
|
||||
track.metadata.add("~artwork", image)
|
||||
track.metadata.add_image("image/jpeg", data)
|
||||
finally:
|
||||
album._requests -= 1
|
||||
album._finalize_loading(None)
|
||||
|
||||
Reference in New Issue
Block a user