Skip to content
Snippets Groups Projects
spa_views.py 1.96 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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,
                }
            )
    
        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