diff --git a/api/funkwhale_api/music/tasks.py b/api/funkwhale_api/music/tasks.py index 722a9eefb..de2d00315 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 96ba451aa..989382d79 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 000000000..0b52c0e6e --- /dev/null +++ b/changes/changelog.d/1011.bugfix @@ -0,0 +1 @@ +Ensure tracks linked to skipped upload can be pruned (#1011)