diff options
5 files changed, 31 insertions, 37 deletions
diff --git a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex index d1a58d5e1..3be805fa2 100644 --- a/lib/pleroma/web/mastodon_api/controllers/status_controller.ex +++ b/lib/pleroma/web/mastodon_api/controllers/status_controller.ex @@ -312,7 +312,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusController do with %Activity{} = activity <- Activity.get_by_id(status_id), true <- Visibility.visible_for_user?(activity, user) do data = Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) - render(conn, "card.json", data) + render(conn, "card.json", %{embed: data}) else _ -> render_error(conn, :not_found, "Record not found") end diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index 427476695..9605c8329 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -271,7 +271,10 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do summary = object.data["summary"] || "" - card = render("card.json", Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity)) + card = + render("card.json", %{ + embed: Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity) + }) url = if user.local do @@ -369,7 +372,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do nil end - def render("card.json", %Embed{url: _, meta: _} = embed) do + def render("card.json", %{embed: %Embed{} = embed}) do with {:ok, %Card{} = card} <- Card.parse(embed) do Card.to_map(card) else @@ -377,7 +380,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do end end - def render("card.json", %Card{} = card), do: Card.to_map(card) + def render("card.json", %{embed: %Card{} = card}), do: Card.to_map(card) def render("card.json", _), do: nil def render("attachment.json", %{attachment: attachment}) do diff --git a/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex b/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex index 2e4355992..32fe0b229 100644 --- a/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex +++ b/lib/pleroma/web/pleroma_api/views/chat/message_reference_view.ex @@ -37,7 +37,7 @@ defmodule Pleroma.Web.PleromaAPI.Chat.MessageReferenceView do card: StatusView.render( "card.json", - Pleroma.Web.RichMedia.Helpers.fetch_data_for_object(object) + %{embed: Pleroma.Web.RichMedia.Helpers.fetch_data_for_object(object)} ) } |> put_idempotency_key() diff --git a/lib/pleroma/web/rich_media/parser/card.ex b/lib/pleroma/web/rich_media/parser/card.ex index 1eb3ddbdd..f6193728a 100644 --- a/lib/pleroma/web/rich_media/parser/card.ex +++ b/lib/pleroma/web/rich_media/parser/card.ex @@ -33,7 +33,7 @@ defmodule Pleroma.Web.RichMedia.Parser.Card do type: oembed["type"], author_name: oembed["author_name"], author_url: oembed["author_url"], - provider_name: oembed["provider_name"], + provider_name: oembed["provider_name"] || URI.parse(url).host, provider_url: oembed["provider_url"], html: oembed["html"], width: oembed["width"], @@ -50,6 +50,7 @@ defmodule Pleroma.Web.RichMedia.Parser.Card do title: get_title(embed), description: get_description(embed), type: "link", + provider_name: URI.parse(url).host, image: get_image(embed) |> proxy() } |> validate() diff --git a/test/pleroma/web/mastodon_api/views/status_view_test.exs b/test/pleroma/web/mastodon_api/views/status_view_test.exs index 2de3afc4f..12fa4ed3e 100644 --- a/test/pleroma/web/mastodon_api/views/status_view_test.exs +++ b/test/pleroma/web/mastodon_api/views/status_view_test.exs @@ -17,6 +17,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do alias Pleroma.Web.CommonAPI.Utils alias Pleroma.Web.MastodonAPI.AccountView alias Pleroma.Web.MastodonAPI.StatusView + alias Pleroma.Web.RichMedia.Parser.Embed import Pleroma.Factory import Tesla.Mock @@ -591,56 +592,45 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do describe "rich media cards" do test "a rich media card without a site name renders correctly" do - page_url = "http://example.com" - - card = %{ - url: page_url, - image: page_url <> "/example.jpg", - title: "Example website" + embed = %Embed{ + url: "http://example.com", + title: "Example website", + meta: %{"twitter:image" => "http://example.com/example.jpg"} } - %{provider_name: "example.com"} = - StatusView.render("card.json", %{page_url: page_url, rich_media: card}) + %{"provider_name" => "example.com"} = StatusView.render("card.json", %{embed: embed}) end test "a rich media card without a site name or image renders correctly" do - page_url = "http://example.com" - - card = %{ - url: page_url, + embed = %Embed{ + url: "http://example.com", title: "Example website" } - %{provider_name: "example.com"} = - StatusView.render("card.json", %{page_url: page_url, rich_media: card}) + %{"provider_name" => "example.com"} = StatusView.render("card.json", %{embed: embed}) end test "a rich media card without an image renders correctly" do - page_url = "http://example.com" - - card = %{ - url: page_url, - site_name: "Example site name", - title: "Example website" + embed = %Embed{ + url: "http://example.com", + title: "Example website", + meta: %{"twitter:title" => "Example site name"} } - %{provider_name: "example.com"} = - StatusView.render("card.json", %{page_url: page_url, rich_media: card}) + %{"provider_name" => "example.com"} = StatusView.render("card.json", %{embed: embed}) end test "a rich media card with all relevant data renders correctly" do - page_url = "http://example.com" - - card = %{ - url: page_url, - site_name: "Example site name", + embed = %Embed{ + url: "http://example.com", title: "Example website", - image: page_url <> "/example.jpg", - description: "Example description" + meta: %{ + "twitter:title" => "Example site name", + "twitter:image" => "http://example.com/example.jpg" + } } - %{provider_name: "example.com"} = - StatusView.render("card.json", %{page_url: page_url, rich_media: card}) + %{"provider_name" => "example.com"} = StatusView.render("card.json", %{embed: embed}) end end |