X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fpleroma%2Fweb%2Fmetadata%2Ftwitter_card.ex;h=5d08ce422ea11b8e59a83b162c2fd3af3eb09ffe;hb=bfec45bf740f9fcfcea92bbded6bd2c146dc64c1;hp=0365e464752978f60180420cde00db6c4c9a19ce;hpb=ac7ef0999d70145ed5217258a4908eba609d68de;p=akkoma
diff --git a/lib/pleroma/web/metadata/twitter_card.ex b/lib/pleroma/web/metadata/twitter_card.ex
index 0365e4647..5d08ce422 100644
--- a/lib/pleroma/web/metadata/twitter_card.ex
+++ b/lib/pleroma/web/metadata/twitter_card.ex
@@ -1,5 +1,6 @@
# Pleroma: A lightweight social networking server
-# Copyright © 2017-2019 Pleroma Authors
+
+# Copyright © 2017-2020 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Web.Metadata.Providers.TwitterCard do
@@ -9,13 +10,11 @@ defmodule Pleroma.Web.Metadata.Providers.TwitterCard do
alias Pleroma.Web.Metadata.Utils
@behaviour Provider
+ @media_types ["image", "audio", "video"]
@impl Provider
- def build_tags(%{
- object: object,
- user: user
- }) do
- attachments = build_attachments(object)
+ def build_tags(%{activity_id: id, object: object, user: user}) do
+ attachments = build_attachments(id, object)
scrubbed_content = Utils.scrub_html_and_truncate(object)
# Zero width space
content =
@@ -26,22 +25,13 @@ defmodule Pleroma.Web.Metadata.Providers.TwitterCard do
end
[
- {:meta,
- [
- property: "twitter:title",
- content: Utils.user_name_string(user)
- ], []},
- {:meta,
- [
- property: "twitter:description",
- content: content
- ], []}
+ title_tag(user),
+ {:meta, [property: "twitter:description", content: content], []}
] ++
if attachments == [] or Metadata.activity_nsfw?(object) do
[
- {:meta,
- [property: "twitter:image", content: Utils.attachment_url(User.avatar_url(user))], []},
- {:meta, [property: "twitter:card", content: "summary_large_image"], []}
+ image_tag(user),
+ {:meta, [property: "twitter:card", content: "summary"], []}
]
else
attachments
@@ -52,37 +42,34 @@ defmodule Pleroma.Web.Metadata.Providers.TwitterCard do
def build_tags(%{user: user}) do
with truncated_bio = Utils.scrub_html_and_truncate(user.bio || "") do
[
- {:meta,
- [
- property: "twitter:title",
- content: Utils.user_name_string(user)
- ], []},
+ title_tag(user),
{:meta, [property: "twitter:description", content: truncated_bio], []},
- {:meta, [property: "twitter:image", content: Utils.attachment_url(User.avatar_url(user))],
- []},
+ image_tag(user),
{:meta, [property: "twitter:card", content: "summary"], []}
]
end
end
- defp build_attachments(%{data: %{"attachment" => attachments}}) do
+ defp title_tag(user) do
+ {:meta, [property: "twitter:title", content: Utils.user_name_string(user)], []}
+ end
+
+ def image_tag(user) do
+ {:meta, [property: "twitter:image", content: Utils.attachment_url(User.avatar_url(user))], []}
+ end
+
+ defp build_attachments(id, %{data: %{"attachment" => attachments}}) do
Enum.reduce(attachments, [], fn attachment, acc ->
rendered_tags =
Enum.reduce(attachment["url"], [], fn url, acc ->
- content_type = url["mediaType"]
-
- media_type =
- Enum.find(["image", "audio", "video"], fn media_type ->
- String.starts_with?(url["mediaType"], media_type)
- end)
-
# TODO: Add additional properties to objects when we have the data available.
- case media_type do
+ case Utils.fetch_media_type(@media_types, url["mediaType"]) do
"audio" ->
[
{:meta, [property: "twitter:card", content: "player"], []},
- {:meta, [property: "twitter:player", content: Utils.attachment_url(url["href"])],
- []}
+ {:meta, [property: "twitter:player:width", content: "480"], []},
+ {:meta, [property: "twitter:player:height", content: "80"], []},
+ {:meta, [property: "twitter:player", content: player_url(id)], []}
| acc
]
@@ -92,22 +79,19 @@ defmodule Pleroma.Web.Metadata.Providers.TwitterCard do
{:meta,
[
property: "twitter:player",
- content:
- Utils.attachment_url(
- Pleroma.Uploaders.Uploader.preview_url(content_type, url["href"])
- )
+ content: Utils.attachment_url(url["href"])
], []}
| acc
]
- # TODO: Need the true width and height values here or Twitter renders an iFrame with a bad aspect ratio
+ # TODO: Need the true width and height values here or Twitter renders an iFrame with
+ # a bad aspect ratio
"video" ->
[
{:meta, [property: "twitter:card", content: "player"], []},
- {:meta, [property: "twitter:player", content: Utils.attachment_url(url["href"])],
- []},
- {:meta, [property: "twitter:player:width", content: "1280"], []},
- {:meta, [property: "twitter:player:height", content: "720"], []}
+ {:meta, [property: "twitter:player", content: player_url(id)], []},
+ {:meta, [property: "twitter:player:width", content: "480"], []},
+ {:meta, [property: "twitter:player:height", content: "480"], []}
| acc
]
@@ -119,4 +103,10 @@ defmodule Pleroma.Web.Metadata.Providers.TwitterCard do
acc ++ rendered_tags
end)
end
+
+ defp build_attachments(_id, _object), do: []
+
+ defp player_url(id) do
+ Pleroma.Web.Router.Helpers.o_status_url(Pleroma.Web.Endpoint, :notice_player, id)
+ end
end