Only use fallback for videos and only add this metadata for images if we really have it.
authorMark Felder <feld@feld.me>
Tue, 8 Jun 2021 21:31:12 +0000 (16:31 -0500)
committerMark Felder <feld@feld.me>
Tue, 8 Jun 2021 21:31:12 +0000 (16:31 -0500)
lib/pleroma/web/metadata/providers/twitter_card.ex

index bf6d4bcbeefd1744c237b5278e84c278bd5971b9..dfe477a8afe73e4591cc31864977881b17a31e19 100644 (file)
@@ -55,9 +55,6 @@ defmodule Pleroma.Web.Metadata.Providers.TwitterCard do
     Enum.reduce(attachments, [], fn attachment, acc ->
       rendered_tags =
         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
             "audio" ->
               [
@@ -75,13 +72,16 @@ defmodule Pleroma.Web.Metadata.Providers.TwitterCard do
                  [
                    property: "twitter:player",
                    content: Utils.attachment_url(url["href"])
-                 ], []},
-                {:meta, [property: "twitter:player:width", content: "#{width}"], []},
-                {:meta, [property: "twitter:player:height", content: "#{height}"], []}
+                 ], []}
                 | acc
               ]
+              |> maybe_add_dimensions(url)
 
             "video" ->
+              # fallback to old placeholder values
+              height = url["height"] || 480
+              width = url["width"] || 480
+
               [
                 {:meta, [property: "twitter:card", content: "player"], []},
                 {:meta, [property: "twitter:player", content: player_url(id)], []},
@@ -107,4 +107,20 @@ defmodule Pleroma.Web.Metadata.Providers.TwitterCard do
   defp player_url(id) do
     Pleroma.Web.Router.Helpers.o_status_url(Pleroma.Web.Endpoint, :notice_player, id)
   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