Move cover art images from metadata["~artwork"] to metadata.images.

This commit is contained in:
Lukáš Lalinský
2007-06-03 14:12:37 +02:00
parent 7f6f5c7462
commit 0c14ebd5c1
7 changed files with 28 additions and 17 deletions

View File

@@ -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:

View File

@@ -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=[])

View File

@@ -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):

View File

@@ -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:

View File

@@ -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)

View File

@@ -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()):

View File

@@ -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)