From ba4ca48ba5e797274559cedefed7a16f2f8a8b62 Mon Sep 17 00:00:00 2001 From: Sambhav Kothari Date: Tue, 27 Dec 2016 16:51:09 +0530 Subject: [PATCH] Refactor asf deletion --- picard/formats/asf.py | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/picard/formats/asf.py b/picard/formats/asf.py index 2c87e89d1..bc2343a28 100644 --- a/picard/formats/asf.py +++ b/picard/formats/asf.py @@ -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