소스 검색

Set the correct height/width if the data is available when generating opengraph metadata

warnings-as-errors
Mark Felder 3 년 전
부모
커밋
d70db63084
2개의 변경된 파일37개의 추가작업 그리고 5개의 파일을 삭제
  1. +20
    -2
      lib/pleroma/web/metadata/providers/open_graph.ex
  2. +17
    -3
      test/pleroma/web/metadata/providers/open_graph_test.exs

+ 20
- 2
lib/pleroma/web/metadata/providers/open_graph.ex 파일 보기

@@ -69,8 +69,7 @@ defmodule Pleroma.Web.Metadata.Providers.OpenGraph 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 ->
# TODO: Add additional properties to objects when we have the data available.
# Also, Whatsapp only wants JPEG or PNGs. It seems that if we add a second og:image
# TODO: Whatsapp only wants JPEG or PNGs. It seems that if we add a second og:image
# object when a Video or GIF is attached it will display that in Whatsapp Rich Preview. # object when a Video or GIF is attached it will display that in Whatsapp Rich Preview.
case Utils.fetch_media_type(@media_types, url["mediaType"]) do case Utils.fetch_media_type(@media_types, url["mediaType"]) do
"audio" -> "audio" ->
@@ -85,12 +84,14 @@ defmodule Pleroma.Web.Metadata.Providers.OpenGraph do
{:meta, [property: "og:image:alt", content: attachment["name"]], []} {:meta, [property: "og:image:alt", content: attachment["name"]], []}
| acc | acc
] ]
|> maybe_add_dimensions(url)


"video" -> "video" ->
[ [
{:meta, [property: "og:video", content: Utils.attachment_url(url["href"])], []} {:meta, [property: "og:video", content: Utils.attachment_url(url["href"])], []}
| acc | acc
] ]
|> maybe_add_dimensions(url)


_ -> _ ->
acc acc
@@ -102,4 +103,21 @@ defmodule Pleroma.Web.Metadata.Providers.OpenGraph do
end end


defp build_attachments(_), do: [] defp build_attachments(_), do: []

# We can use url["mediaType"] to dynamically fill the metadata
defp maybe_add_dimensions(metadata, url) do
type = url["mediaType"] |> String.split("/") |> List.first()

cond do
!is_nil(url["height"]) && !is_nil(url["width"]) ->
metadata ++
[
{:meta, [property: "og:#{type}:width", content: "#{url["width"]}"], []},
{:meta, [property: "og:#{type}:height", content: "#{url["height"]}"], []}
]

true ->
metadata
end
end
end end

+ 17
- 3
test/pleroma/web/metadata/providers/open_graph_test.exs 파일 보기

@@ -22,7 +22,12 @@ defmodule Pleroma.Web.Metadata.Providers.OpenGraphTest do
"attachment" => [ "attachment" => [
%{ %{
"url" => [ "url" => [
%{"mediaType" => "image/png", "href" => "https://pleroma.gov/tenshi.png"}
%{
"mediaType" => "image/png",
"href" => "https://pleroma.gov/tenshi.png",
"height" => 1024,
"width" => 1280
}
] ]
}, },
%{ %{
@@ -35,7 +40,12 @@ defmodule Pleroma.Web.Metadata.Providers.OpenGraphTest do
}, },
%{ %{
"url" => [ "url" => [
%{"mediaType" => "video/webm", "href" => "https://pleroma.gov/about/juche.webm"}
%{
"mediaType" => "video/webm",
"href" => "https://pleroma.gov/about/juche.webm",
"height" => 600,
"width" => 800
}
] ]
}, },
%{ %{
@@ -55,11 +65,15 @@ defmodule Pleroma.Web.Metadata.Providers.OpenGraphTest do
assert Enum.all?( assert Enum.all?(
[ [
{:meta, [property: "og:image", content: "https://pleroma.gov/tenshi.png"], []}, {:meta, [property: "og:image", content: "https://pleroma.gov/tenshi.png"], []},
{:meta, [property: "og:image:width", content: "1280"], []},
{:meta, [property: "og:image:height", content: "1024"], []},
{:meta, {:meta,
[property: "og:audio", content: "http://www.gnu.org/music/free-software-song.au"], [property: "og:audio", content: "http://www.gnu.org/music/free-software-song.au"],
[]}, []},
{:meta, [property: "og:video", content: "https://pleroma.gov/about/juche.webm"], {:meta, [property: "og:video", content: "https://pleroma.gov/about/juche.webm"],
[]}
[]},
{:meta, [property: "og:video:width", content: "800"], []},
{:meta, [property: "og:video:height", content: "600"], []}
], ],
fn element -> element in result end fn element -> element in result end
) )


불러오는 중...
취소
저장