75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
import urllib.parse
|
|
|
|
from django.conf import settings
|
|
from django.urls import reverse
|
|
|
|
from funkwhale_api.common import preferences
|
|
from funkwhale_api.common import utils
|
|
from funkwhale_api.music import spa_views
|
|
|
|
from . import models
|
|
|
|
|
|
def channel_detail(request, uuid):
|
|
queryset = models.Channel.objects.filter(uuid=uuid).select_related(
|
|
"artist__attachment_cover", "actor", "library"
|
|
)
|
|
try:
|
|
obj = queryset.get()
|
|
except models.Channel.DoesNotExist:
|
|
return []
|
|
obj_url = utils.join_url(
|
|
settings.FUNKWHALE_URL,
|
|
utils.spa_reverse("channel_detail", kwargs={"uuid": obj.uuid}),
|
|
)
|
|
metas = [
|
|
{"tag": "meta", "property": "og:url", "content": obj_url},
|
|
{"tag": "meta", "property": "og:title", "content": obj.artist.name},
|
|
{"tag": "meta", "property": "og:type", "content": "profile"},
|
|
]
|
|
|
|
if obj.artist.attachment_cover:
|
|
metas.append(
|
|
{
|
|
"tag": "meta",
|
|
"property": "og:image",
|
|
"content": obj.artist.attachment_cover.download_url_medium_square_crop,
|
|
}
|
|
)
|
|
|
|
if preferences.get("federation__enabled"):
|
|
metas.append(
|
|
{
|
|
"tag": "link",
|
|
"rel": "alternate",
|
|
"type": "application/activity+json",
|
|
"href": obj.actor.fid,
|
|
}
|
|
)
|
|
|
|
metas.append(
|
|
{
|
|
"tag": "link",
|
|
"rel": "alternate",
|
|
"type": "application/rss+xml",
|
|
"href": obj.get_rss_url(),
|
|
"title": "{} - RSS Podcast Feed".format(obj.artist.name),
|
|
},
|
|
)
|
|
|
|
if obj.library.uploads.all().playable_by(None).exists():
|
|
metas.append(
|
|
{
|
|
"tag": "link",
|
|
"rel": "alternate",
|
|
"type": "application/json+oembed",
|
|
"href": (
|
|
utils.join_url(settings.FUNKWHALE_URL, reverse("api:v1:oembed"))
|
|
+ "?format=json&url={}".format(urllib.parse.quote_plus(obj_url))
|
|
),
|
|
}
|
|
)
|
|
# twitter player is also supported in various software
|
|
metas += spa_views.get_twitter_card_metas(type="channel", id=obj.uuid)
|
|
return metas
|