]> kaliko git repositories - mpd-sima.git/commitdiff
Changed tracks equality test track_equality
authorkaliko <kaliko@azylum.org>
Sat, 8 Oct 2016 10:26:52 +0000 (12:26 +0200)
committerkaliko <kaliko@azylum.org>
Tue, 8 May 2018 10:34:12 +0000 (12:34 +0200)
Equality is not anymore based on file attribute only.
Now it compares artist/title between tracks

doc/Changelog
sima/lib/track.py
tests/test_track.py

index d5106edc05965989b85d11232579d02bb126513d..a8f1e141df7c5f6ee870dcc30d458abfc2e34922 100644 (file)
@@ -5,6 +5,9 @@ MPD_sima v0.15.0
  * Add option to prevent single & repeat mode to disable queuing (Closes #19)
  * Honor MPC password/host format on command line option 'host'
  * Fixed fuzzy search for short artist names
+ * Changed tracks equality test
+   Equality is not anymore based on file attribute only.
+   Now it compares artist/title between tracks
 
 -- kaliko jack <kaliko@azylum.org> UNRELEASED
 
index e4740bfa56b441ca0dd3e63a545695762e76a644..f6385d38a6b613fe7b2cd45257b40f164a105c5c 100644 (file)
@@ -34,7 +34,8 @@ class Track:
     :param int time: duration in second, defaults to 0
     :param int pos: position in queue, defaults to -1
     :param str title|artist|album: defaults to ""
-    :param str musicbrainz_artistid|musicbrainz_albumartistid: MusicBrainz IDs, defaults to ``None``
+    :param str musicbrainz_artistid: MusicBrainz IDs, defaults to ``None``
+    :param str musicbrainz_albumartistid: MusicBrainz IDs, defaults to ``None``
     """
 
     def __init__(self, file=None, time=0, pos=-1, **kwargs):
@@ -93,6 +94,10 @@ class Track:
         return Track(time=self.time - other.time)
 
     def __hash__(self):
+        if self.musicbrainz_artistid and self.title:
+            return hash(self.musicbrainz_artistid + self.title)
+        if self.artist and self.title:
+            return hash(self.artist + self.title)
         if self.file:
             return hash(self.file)
         else:
index 62eb30617f5761c8a0369513cd3aaf591d14a936..37ab3b0d8bb6877789fb1880b29fdae2b090db19 100644 (file)
@@ -42,4 +42,22 @@ class TestTrackObject(unittest.TestCase):
         trk = Track(artist='track_artist')
         self.assertEqual(trk.Artist.name, 'track_artist')
 
+class TestTrackObjectEquality(unittest.TestCase):
+
+    def test_identity(self):
+        trk0 = Track(file='/foo/bar',
+                     musicbrainz_artistid='d8e7e3e2-49ab-4f7c-b148-fc946d521f99',
+                     title='Crazy')
+        trk1 = Track(file='/foo/bar/baz',
+                     musicbrainz_artistid='d8e7e3e2-49ab-4f7c-b148-fc946d521f99',
+                     title='Crazy')
+        self.assertTrue(trk1 == trk0, 'different files same artist/title should be equal')
+        trk0 = Track(file='/foo/bar',
+                     musicbrainz_artistid='d8e7e3e2-49ab-4f7c-b148-fc946d521f88',
+                     title='Crazy')
+        trk1 = Track(file='/foo/bar/baz',
+                     musicbrainz_artistid='d8e7e3e2-49ab-4f7c-b148-fc946d521f99',
+                     title='Crazy')
+        self.assertTrue(trk1 != trk0, 'different files same title different artist should not be equal')
+
 # vim: ai ts=4 sw=4 sts=4 expandtab