From c8cd00fd7e99f556c651aa4781fc650193c52285 Mon Sep 17 00:00:00 2001 From: Philipp Wolfer Date: Tue, 13 Nov 2018 17:53:21 +0100 Subject: [PATCH] PICARD-1412: Consider deleted tags as changed --- picard/file.py | 2 +- picard/metadata.py | 4 +++- test/test_metadata.py | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/picard/file.py b/picard/file.py index 484b3a7b1..66359e1d8 100644 --- a/picard/file.py +++ b/picard/file.py @@ -501,7 +501,7 @@ class File(QtCore.QObject, Item): for name in names: if not name.startswith('~') and self.supports_tag(name): new_values = new_metadata.getall(name) - if not (new_values or clear_existing_tags): + if not (new_values or clear_existing_tags or new_metadata.deleted_tags): continue orig_values = self.orig_metadata.getall(name) if orig_values != new_values: diff --git a/picard/metadata.py b/picard/metadata.py index f19481fdb..378207713 100644 --- a/picard/metadata.py +++ b/picard/metadata.py @@ -126,7 +126,9 @@ class Metadata(dict): else: score = similarity2(a, b) parts.append((score, weight)) - + elif (a and name in other.deleted_tags + or b and name in self.deleted_tags): + parts.append((0, weight)) return linear_combination_of_weights(parts) def compare_to_release(self, release, weights): diff --git a/test/test_metadata.py b/test/test_metadata.py index ba45b0d5b..0bf509145 100644 --- a/test/test_metadata.py +++ b/test/test_metadata.py @@ -152,3 +152,38 @@ class MetadataTest(PicardTestCase): actual = Metadata.length_score(a, b) self.assertAlmostEqual(expected, actual, msg="a={a}, b={b}".format(a=a, b=b)) + + def test_compare_is_equal(self): + m1 = Metadata() + m1["title"] = "title1" + m1["tracknumber"] = "2" + m1.length = 360 + m2 = Metadata() + m2["title"] = "title1" + m2["tracknumber"] = "2" + m2.length = 360 + self.assertEqual(m1.compare(m2), m2.compare(m1)) + self.assertEqual(m1.compare(m2), 1) + + def test_compare_lengths(self): + m1 = Metadata() + m1.length = 360 + m2 = Metadata() + m2.length = 300 + self.assertAlmostEqual(m1.compare(m2), 0.998) + + def test_compare_tracknumber_difference(self): + m1 = Metadata() + m1["tracknumber"] = "1" + m2 = Metadata() + m2["tracknumber"] = "2" + self.assertEqual(m1.compare(m2), 0) + + def test_compare_deleted(self): + m1 = Metadata() + m1["artist"] = "TheArtist" + m1["title"] = "title1" + m2 = Metadata() + m2["artist"] = "TheArtist" + m2.delete("title") + self.assertTrue(m1.compare(m2) < 1)