aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/pleroma/web/mastodon_api/views/status_view.ex41
-rw-r--r--test/web/mastodon_api/status_view_test.exs13
2 files changed, 54 insertions, 0 deletions
diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex
index 11a435ca0..66557cbca 100644
--- a/lib/pleroma/web/mastodon_api/views/status_view.ex
+++ b/lib/pleroma/web/mastodon_api/views/status_view.ex
@@ -8,6 +8,47 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
render_many(opts.activities, StatusView, "status.json", opts)
end
+ def render("status.json", %{activity: %{data: %{"type" => "Announce", "object" => object}} = activity} = opts) do
+ user = User.get_cached_by_ap_id(activity.data["actor"])
+ created_at = Utils.to_masto_date(activity.data["published"])
+
+ reblogged = Activity.get_create_activity_by_object_ap_id(object)
+ reblogged = render("status.json", Map.put(opts, :activity, reblogged))
+
+ mentions = activity.data["to"]
+ |> Enum.map(fn (ap_id) -> User.get_cached_by_ap_id(ap_id) end)
+ |> Enum.filter(&(&1))
+ |> Enum.map(fn (user) -> AccountView.render("mention.json", %{user: user}) end)
+
+ %{
+ id: activity.id,
+ uri: object,
+ url: nil,
+ account: AccountView.render("account.json", %{user: user}),
+ in_reply_to_id: nil,
+ in_reply_to_account_id: nil,
+ reblog: reblogged,
+ content: reblogged[:content],
+ created_at: created_at,
+ reblogs_count: 0,
+ favourites_count: 0,
+ reblogged: 0,
+ favourited: 0,
+ muted: false,
+ sensitive: false,
+ spoiler_text: "",
+ visibility: "public",
+ media_attachments: [],
+ mentions: mentions,
+ tags: [],
+ application: %{
+ name: "Web",
+ website: nil
+ },
+ language: nil
+ }
+ end
+
def render("status.json", %{activity: %{data: %{"object" => object}} = activity} = opts) do
user = User.get_cached_by_ap_id(activity.data["actor"])
diff --git a/test/web/mastodon_api/status_view_test.exs b/test/web/mastodon_api/status_view_test.exs
index 870a205f1..1575b1d6e 100644
--- a/test/web/mastodon_api/status_view_test.exs
+++ b/test/web/mastodon_api/status_view_test.exs
@@ -4,6 +4,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
alias Pleroma.Web.MastodonAPI.{StatusView, AccountView}
alias Pleroma.User
alias Pleroma.Web.OStatus
+ alias Pleroma.Web.CommonAPI
import Pleroma.Factory
test "a note activity" do
@@ -84,4 +85,16 @@ defmodule Pleroma.Web.MastodonAPI.StatusViewTest do
object = Map.put(object, "id", 2)
assert %{id: 2} = StatusView.render("attachment.json", %{attachment: object})
end
+
+ test "a reblog" do
+ user = insert(:user)
+ activity = insert(:note_activity)
+
+ {:ok, reblog, _} = CommonAPI.repeat(activity.id, user)
+
+ represented = StatusView.render("status.json", %{for: user, activity: reblog})
+
+ assert represented[:id] == reblog.id
+ assert represented[:reblog][:id] == activity.id
+ end
end