Exposes more metadata in subsonic album endpoint (#623)

This commit is contained in:
Marcos Peña 2021-11-07 22:33:12 +01:00 committed by JuniorJPDJ
parent 2e4354717f
commit 98b3edb06a
2 changed files with 14 additions and 1 deletions

View File

@ -1,6 +1,7 @@
import collections
from django.db.models import Count, functions
from django.db.models import Sum
from rest_framework import serializers
from funkwhale_api.history import models as history_models
@ -147,10 +148,17 @@ def get_album2_data(album):
"name": album.title,
"artist": album.artist.name,
"created": to_subsonic_date(album.creation_date),
"duration": album.tracks.aggregate(d=Sum("uploads__duration"))["d"] or 0,
"playCount": album.tracks.aggregate(c=Sum("downloads_count"))["c"] or 0,
}
if album.attachment_cover_id:
payload["coverArt"] = "al-{}".format(album.id)
if album.tagged_items:
# exposes only first genre since the specification uses singular noun
first_genre = album.tagged_items.first()
payload["genre"] = first_genre.tag.name if first_genre else ""
if album.release_date:
payload["year"] = album.release_date.year
try:
payload["songCount"] = album._tracks_count
except AttributeError:

View File

@ -1,4 +1,6 @@
import datetime
from django.db.models.aggregates import Sum
import pytest
from funkwhale_api.music import models as music_models
@ -181,6 +183,9 @@ def test_get_album_serializer(factories):
"created": serializers.to_subsonic_date(album.creation_date),
"year": album.release_date.year,
"coverArt": "al-{}".format(album.id),
"genre": ", ".join([ti.tag.name for ti in album.tagged_items.all()]),
"duration": album.tracks.aggregate(d=Sum("uploads__duration"))["d"] or 0,
"playCount": album.tracks.aggregate(c=Sum("downloads_count"))["c"] or 0,
"song": [
{
"id": track.pk,