Transmogrify outgoing hashtags.

This commit is contained in:
lain 2018-02-18 13:51:03 +01:00
parent 6046f10431
commit 6ab0aba50a
2 changed files with 17 additions and 2 deletions

View file

@ -100,6 +100,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
""" """
def prepare_outgoing(%{"type" => "Create", "object" => %{"type" => "Note"} = object} = data) do def prepare_outgoing(%{"type" => "Create", "object" => %{"type" => "Note"} = object} = data) do
object = object object = object
|> add_hashtags
|> add_mention_tags |> add_mention_tags
|> add_attributed_to |> add_attributed_to
|> prepare_attachments |> prepare_attachments
@ -118,6 +119,14 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
{:ok, data} {:ok, data}
end end
def add_hashtags(object) do
tags = (object["tag"] || [])
|> Enum.map fn (tag) -> %{"href" => Pleroma.Web.Endpoint.url() <> "/tags/#{tag}", "name" => "##{tag}", "type" => "Hashtag"} end
object
|> Map.put("tag", tags)
end
def add_mention_tags(object) do def add_mention_tags(object) do
mentions = object["to"] mentions = object["to"]
|> Enum.map(fn (ap_id) -> User.get_cached_by_ap_id(ap_id) end) |> Enum.map(fn (ap_id) -> User.get_cached_by_ap_id(ap_id) end)

View file

@ -100,18 +100,24 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
user = insert(:user) user = insert(:user)
other_user = insert(:user) other_user = insert(:user)
{:ok, activity} = CommonAPI.post(user, %{"status" => "hey, @#{other_user.nickname}, how are ya?"}) {:ok, activity} = CommonAPI.post(user, %{"status" => "hey, @#{other_user.nickname}, how are ya? #2hu"})
{:ok, modified} = Transmogrifier.prepare_outgoing(activity.data) {:ok, modified} = Transmogrifier.prepare_outgoing(activity.data)
object = modified["object"] object = modified["object"]
expected_tag = %{ expected_mention = %{
"href" => other_user.ap_id, "href" => other_user.ap_id,
"name" => "@#{other_user.nickname}", "name" => "@#{other_user.nickname}",
"type" => "Mention" "type" => "Mention"
} }
expected_tag = %{
"href" => Pleroma.Web.Endpoint.url <> "/tags/2hu",
"type" => "Hashtag",
"name" => "#2hu"
}
assert Enum.member?(object["tag"], expected_tag) assert Enum.member?(object["tag"], expected_tag)
assert Enum.member?(object["tag"], expected_mention)
end end
test "it adds the json-ld context" do test "it adds the json-ld context" do