diff --git a/api/funkwhale_api/music/tasks.py b/api/funkwhale_api/music/tasks.py index 722a9eefb29bbb94a9d01df23c654dc83d20bd79..de2d00315441f9f7c3f62c18ce79c532f811026e 100644 --- a/api/funkwhale_api/music/tasks.py +++ b/api/funkwhale_api/music/tasks.py @@ -817,9 +817,15 @@ def get_prunable_tracks( Returns a list of tracks with no associated uploads, excluding the one that were listened/favorited/included in playlists. """ - + purgeable_tracks_with_upload = ( + models.Upload.objects.exclude(track=None) + .filter(import_status="skipped") + .values("track") + ) queryset = models.Track.objects.all() - queryset = queryset.filter(uploads__isnull=True) + queryset = queryset.filter( + Q(uploads__isnull=True) | Q(pk__in=purgeable_tracks_with_upload) + ) if exclude_favorites: queryset = queryset.filter(track_favorites__isnull=True) if exclude_playlists: diff --git a/api/tests/music/test_tasks.py b/api/tests/music/test_tasks.py index 96ba451aae6b2eca4da5dd5c24d726effbdc21a6..989382d79dfe092a7cd5061883d6dfaaf8a1696e 100644 --- a/api/tests/music/test_tasks.py +++ b/api/tests/music/test_tasks.py @@ -867,6 +867,8 @@ def test_clean_transcoding_cache(preferences, now, factories): def test_get_prunable_tracks(factories): prunable_track = factories["music.Track"]() + # track is still prunable if it has a skipped upload linked to it + factories["music.Upload"](import_status="skipped", track=prunable_track) # non prunable tracks factories["music.Upload"]() factories["favorites.TrackFavorite"]() diff --git a/changes/changelog.d/1011.bugfix b/changes/changelog.d/1011.bugfix new file mode 100644 index 0000000000000000000000000000000000000000..0b52c0e6e8a96225db56141d55ebc198c592caf3 --- /dev/null +++ b/changes/changelog.d/1011.bugfix @@ -0,0 +1 @@ +Ensure tracks linked to skipped upload can be pruned (#1011)