Display html links correctly for remote activies.
This commit is contained in:
parent
c3dfa1970f
commit
558ab6e74e
|
@ -24,6 +24,29 @@ defp get_mentions(to) do
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp get_links(%{local: true, data: data}) do
|
||||||
|
h = fn(str) -> [to_charlist(str)] end
|
||||||
|
[
|
||||||
|
{:link, [type: ['application/atom+xml'], href: h.(data["object"]["id"]), rel: 'self'], []},
|
||||||
|
{:link, [type: ['text/html'], href: h.(data["object"]["id"]), rel: 'alternate'], []}
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
|
defp get_links(%{local: false,
|
||||||
|
data: %{
|
||||||
|
"object" => %{
|
||||||
|
"external_url" => external_url
|
||||||
|
}
|
||||||
|
}}) do
|
||||||
|
|
||||||
|
h = fn(str) -> [to_charlist(str)] end
|
||||||
|
[
|
||||||
|
{:link, [type: ['text/html'], href: h.(external_url), rel: 'alternate'], []}
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
|
defp get_links(_activity), do: []
|
||||||
|
|
||||||
def to_simple_form(activity, user, with_author \\ false)
|
def to_simple_form(activity, user, with_author \\ false)
|
||||||
def to_simple_form(%{data: %{"object" => %{"type" => "Note"}}} = activity, user, with_author) do
|
def to_simple_form(%{data: %{"object" => %{"type" => "Note"}}} = activity, user, with_author) do
|
||||||
h = fn(str) -> [to_charlist(str)] end
|
h = fn(str) -> [to_charlist(str)] end
|
||||||
|
@ -53,9 +76,7 @@ def to_simple_form(%{data: %{"object" => %{"type" => "Note"}}} = activity, user,
|
||||||
{:updated, h.(updated_at)},
|
{:updated, h.(updated_at)},
|
||||||
{:"ostatus:conversation", [], h.(activity.data["context"])},
|
{:"ostatus:conversation", [], h.(activity.data["context"])},
|
||||||
{:link, [ref: h.(activity.data["context"]), rel: 'ostatus:conversation'], []},
|
{:link, [ref: h.(activity.data["context"]), rel: 'ostatus:conversation'], []},
|
||||||
{:link, [type: ['application/atom+xml'], href: h.(activity.data["object"]["id"]), rel: 'self'], []},
|
] ++ get_links(activity) ++ categories ++ attachments ++ in_reply_to ++ author ++ mentions
|
||||||
{:link, [type: ['text/html'], href: h.(activity.data["object"]["id"]), rel: 'alternate'], []}
|
|
||||||
] ++ categories ++ attachments ++ in_reply_to ++ author ++ mentions
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_simple_form(%{data: %{"type" => "Like"}} = activity, user, with_author) do
|
def to_simple_form(%{data: %{"type" => "Like"}} = activity, user, with_author) do
|
||||||
|
|
|
@ -4,9 +4,23 @@ defmodule Pleroma.Web.OStatus.ActivityRepresenterTest do
|
||||||
alias Pleroma.Web.OStatus.ActivityRepresenter
|
alias Pleroma.Web.OStatus.ActivityRepresenter
|
||||||
alias Pleroma.{User, Activity, Object}
|
alias Pleroma.{User, Activity, Object}
|
||||||
alias Pleroma.Web.ActivityPub.ActivityPub
|
alias Pleroma.Web.ActivityPub.ActivityPub
|
||||||
|
alias Pleroma.Web.OStatus
|
||||||
|
|
||||||
import Pleroma.Factory
|
import Pleroma.Factory
|
||||||
|
|
||||||
|
test "an external note activity" do
|
||||||
|
incoming = File.read!("test/fixtures/mastodon-note-cw.xml")
|
||||||
|
{:ok, [activity]} = OStatus.handle_incoming(incoming)
|
||||||
|
|
||||||
|
user = User.get_cached_by_ap_id(activity.data["actor"])
|
||||||
|
|
||||||
|
tuple = ActivityRepresenter.to_simple_form(activity, user)
|
||||||
|
|
||||||
|
res = :xmerl.export_simple_content(tuple, :xmerl_xml) |> IO.iodata_to_binary
|
||||||
|
|
||||||
|
assert String.contains?(res, ~s{<link type="text/html" href="https://mastodon.social/users/lambadalambda/updates/2314748" rel="alternate"/>})
|
||||||
|
end
|
||||||
|
|
||||||
test "a note activity" do
|
test "a note activity" do
|
||||||
note_activity = insert(:note_activity)
|
note_activity = insert(:note_activity)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue