ChatMessageReferenceView: Display preview cards.

This commit is contained in:
lain 2020-07-30 19:57:26 +02:00
parent 873ff5ce14
commit 781b270863
3 changed files with 32 additions and 7 deletions

View file

@ -14,7 +14,7 @@ def render(
%{ %{
chat_message_reference: %{ chat_message_reference: %{
id: id, id: id,
object: %{data: chat_message}, object: %{data: chat_message} = object,
chat_id: chat_id, chat_id: chat_id,
unread: unread unread: unread
} }
@ -30,7 +30,12 @@ def render(
attachment: attachment:
chat_message["attachment"] && chat_message["attachment"] &&
StatusView.render("attachment.json", attachment: chat_message["attachment"]), StatusView.render("attachment.json", attachment: chat_message["attachment"]),
unread: unread unread: unread,
card:
StatusView.render(
"card.json",
Pleroma.Web.RichMedia.Helpers.fetch_data_for_object(object)
)
} }
end end

View file

@ -49,11 +49,11 @@ defp get_tld(host) do
|> hd |> hd
end end
def fetch_data_for_activity(%Activity{data: %{"type" => "Create"}} = activity) do def fetch_data_for_object(object) do
with true <- Config.get([:rich_media, :enabled]), with true <- Config.get([:rich_media, :enabled]),
%Object{} = object <- Object.normalize(activity),
false <- object.data["sensitive"] || false, false <- object.data["sensitive"] || false,
{:ok, page_url} <- HTML.extract_first_external_url(object, object.data["content"]), {:ok, page_url} <-
HTML.extract_first_external_url(object, object.data["content"]),
:ok <- validate_page_url(page_url), :ok <- validate_page_url(page_url),
{:ok, rich_media} <- Parser.parse(page_url) do {:ok, rich_media} <- Parser.parse(page_url) do
%{page_url: page_url, rich_media: rich_media} %{page_url: page_url, rich_media: rich_media}
@ -62,6 +62,15 @@ def fetch_data_for_activity(%Activity{data: %{"type" => "Create"}} = activity) d
end end
end end
def fetch_data_for_activity(%Activity{data: %{"type" => "Create"}} = activity) do
with true <- Config.get([:rich_media, :enabled]),
%Object{} = object <- Object.normalize(activity) do
fetch_data_for_object(object)
else
_ -> %{}
end
end
def fetch_data_for_activity(_), do: %{} def fetch_data_for_activity(_), do: %{}
def perform(:fetch, %Activity{} = activity) do def perform(:fetch, %Activity{} = activity) do

View file

@ -43,7 +43,17 @@ test "it displays a chat message" do
assert chat_message[:unread] == false assert chat_message[:unread] == false
assert match?([%{shortcode: "firefox"}], chat_message[:emojis]) assert match?([%{shortcode: "firefox"}], chat_message[:emojis])
{:ok, activity} = CommonAPI.post_chat_message(recipient, user, "gkgkgk", media_id: upload.id) clear_config([:rich_media, :enabled], true)
Tesla.Mock.mock(fn
%{url: "https://example.com/ogp"} ->
%Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/ogp.html")}
end)
{:ok, activity} =
CommonAPI.post_chat_message(recipient, user, "gkgkgk https://example.com/ogp",
media_id: upload.id
)
object = Object.normalize(activity) object = Object.normalize(activity)
@ -52,10 +62,11 @@ test "it displays a chat message" do
chat_message_two = MessageReferenceView.render("show.json", chat_message_reference: cm_ref) chat_message_two = MessageReferenceView.render("show.json", chat_message_reference: cm_ref)
assert chat_message_two[:id] == cm_ref.id assert chat_message_two[:id] == cm_ref.id
assert chat_message_two[:content] == "gkgkgk" assert chat_message_two[:content] == object.data["content"]
assert chat_message_two[:account_id] == recipient.id assert chat_message_two[:account_id] == recipient.id
assert chat_message_two[:chat_id] == chat_message[:chat_id] assert chat_message_two[:chat_id] == chat_message[:chat_id]
assert chat_message_two[:attachment] assert chat_message_two[:attachment]
assert chat_message_two[:unread] == true assert chat_message_two[:unread] == true
assert chat_message_two[:card]
end end
end end