Refactor asf deletion

This commit is contained in:
Sambhav Kothari
2016-12-27 16:51:09 +05:30
parent 81ad27a84f
commit ba4ca48ba5

View File

@@ -186,9 +186,10 @@ class ASFFile(File):
def _save(self, filename, metadata):
log.debug("Saving file %r", filename)
file = ASF(encode_filename(filename))
tags = file.tags
if config.setting['clear_existing_tags']:
file.tags.clear()
tags.clear()
cover = []
for image in metadata.images_to_be_saved_to_tags:
tag_data = pack_image(image.mimetype, image.data,
@@ -196,7 +197,7 @@ class ASFFile(File):
image.comment)
cover.append(ASFByteArrayAttribute(tag_data))
if cover:
file.tags['WM/Picture'] = cover
tags['WM/Picture'] = cover
for name, values in metadata.rawitems():
if name.startswith('lyrics:'):
@@ -208,29 +209,34 @@ class ASFFile(File):
if name not in self.__TRANS:
continue
name = self.__TRANS[name]
file.tags[name] = map(unicode, values)
tags[name] = map(unicode, values)
for tag in metadata.deleted_tags:
real_name = self._get_tag_name(tag)
if real_name and real_name in file.tags:
if tag in ('totaldiscs', 'totaltracks'):
metadata_name = tag[5:-1]
file.tags[real_name] = map(unicode, metadata[metadata_name])
else:
del file.tags[real_name]
self._remove_deleted_tags(metadata, tags)
file.save()
def _remove_deleted_tags(self, metadata, tags):
"""Remove the tags from the file that were deleted in the UI"""
for tag in metadata.deleted_tags:
real_name = self._get_tag_name(tag)
if real_name and real_name in tags:
if tag in ('totaldiscs', 'totaltracks'):
metadata_name = tag[5:-1]
tags[real_name] = map(unicode, metadata[metadata_name])
else:
del tags[real_name]
def supports_tag(self, name):
return name in self.__TRANS
def _get_tag_name(self, name):
if name.startswith('lyrics'):
return 'lyrics'
elif name == 'totaldiscs':
return self.__TRANS['discnumber']
elif name == 'totaltracks':
return self.__TRANS['tracknumber']
else:
elif name in self.__TRANS:
return self.__TRANS[name]
else:
return None