Only use fallback for videos and only add this metadata for images if we really have it.

This commit is contained in:
Mark Felder 2021-06-08 16:31:12 -05:00
parent d4ac9445cd
commit aa8cc4e86e

View File

@ -55,9 +55,6 @@ defmodule Pleroma.Web.Metadata.Providers.TwitterCard do
Enum.reduce(attachments, [], fn attachment, acc -> Enum.reduce(attachments, [], fn attachment, acc ->
rendered_tags = rendered_tags =
Enum.reduce(attachment["url"], [], fn url, acc -> Enum.reduce(attachment["url"], [], fn url, acc ->
height = url["height"] || 480
width = url["width"] || 480
case Utils.fetch_media_type(@media_types, url["mediaType"]) do case Utils.fetch_media_type(@media_types, url["mediaType"]) do
"audio" -> "audio" ->
[ [
@ -75,13 +72,16 @@ defmodule Pleroma.Web.Metadata.Providers.TwitterCard do
[ [
property: "twitter:player", property: "twitter:player",
content: Utils.attachment_url(url["href"]) content: Utils.attachment_url(url["href"])
], []}, ], []}
{:meta, [property: "twitter:player:width", content: "#{width}"], []},
{:meta, [property: "twitter:player:height", content: "#{height}"], []}
| acc | acc
] ]
|> maybe_add_dimensions(url)
"video" -> "video" ->
# fallback to old placeholder values
height = url["height"] || 480
width = url["width"] || 480
[ [
{:meta, [property: "twitter:card", content: "player"], []}, {:meta, [property: "twitter:card", content: "player"], []},
{:meta, [property: "twitter:player", content: player_url(id)], []}, {:meta, [property: "twitter:player", content: player_url(id)], []},
@ -107,4 +107,20 @@ defmodule Pleroma.Web.Metadata.Providers.TwitterCard do
defp player_url(id) do defp player_url(id) do
Pleroma.Web.Router.Helpers.o_status_url(Pleroma.Web.Endpoint, :notice_player, id) Pleroma.Web.Router.Helpers.o_status_url(Pleroma.Web.Endpoint, :notice_player, id)
end end
# Videos have problems without dimensions, but we used to not provide WxH for images.
# A default (read: incorrect) fallback for images is likely to cause rendering bugs.
defp maybe_add_dimensions(metadata, url) do
cond do
!is_nil(url["height"]) && !is_nil(url["width"]) ->
metadata ++
[
{:meta, [property: "twitter:player:width", content: "#{url["width"]}"], []},
{:meta, [property: "twitter:player:height", content: "#{url["height"]}"], []}
]
true ->
metadata
end
end
end end