From ca7b39c692803c95018f1d801e35560cd8de7227 Mon Sep 17 00:00:00 2001 From: Eliot Berriot <contact@eliotberriot.com> Date: Wed, 27 Mar 2019 12:27:23 +0100 Subject: [PATCH] Fix #740: Do not consider tracks as duplicates during import if they have different positions --- api/funkwhale_api/music/tasks.py | 4 +++- api/tests/music/test_tasks.py | 19 +++++++++++++++++++ changes/changelog.d/740.bugfix | 1 + 3 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 changes/changelog.d/740.bugfix diff --git a/api/funkwhale_api/music/tasks.py b/api/funkwhale_api/music/tasks.py index e9c73273e4..fc4da9cad6 100644 --- a/api/funkwhale_api/music/tasks.py +++ b/api/funkwhale_api/music/tasks.py @@ -503,7 +503,9 @@ def _get_track(data): # get / create track track_title = data["title"] track_number = data.get("track_number", 1) - query = Q(title__iexact=track_title, artist=artist, album=album) + query = Q( + title__iexact=track_title, artist=artist, album=album, position=track_number + ) if track_mbid: query |= Q(mbid=track_mbid) if track_fid: diff --git a/api/tests/music/test_tasks.py b/api/tests/music/test_tasks.py index 76d820cca7..0fc85a0c11 100644 --- a/api/tests/music/test_tasks.py +++ b/api/tests/music/test_tasks.py @@ -156,6 +156,25 @@ def test_can_create_track_from_file_metadata_distinct_release_mbid(factories): assert new_track != track +def test_can_create_track_from_file_metadata_distinct_position(factories): + """Cf https://dev.funkwhale.audio/funkwhale/funkwhale/issues/740""" + artist = factories["music.Artist"]() + album = factories["music.Album"](artist=artist) + track = factories["music.Track"](album=album, artist=artist) + metadata = { + "artist": artist.name, + "album": album.title, + "title": track.title, + "track_number": track.position + 1, + "musicbrainz_artistid": artist.mbid, + "musicbrainz_albumid": album.mbid, + } + + new_track = tasks.get_track_from_import_metadata(metadata) + + assert new_track != track + + def test_can_create_track_from_file_metadata_federation(factories, mocker, r_mock): metadata = { "artist": "Artist", diff --git a/changes/changelog.d/740.bugfix b/changes/changelog.d/740.bugfix new file mode 100644 index 0000000000..5cf04c8269 --- /dev/null +++ b/changes/changelog.d/740.bugfix @@ -0,0 +1 @@ +Do not consider tracks as duplicates during import if they have different positions (#740) -- GitLab