MastoAPI: Add repeats to statusview.
authorRoger Braun <roger@rogerbraun.net>
Sun, 17 Sep 2017 11:54:14 +0000 (13:54 +0200)
committerRoger Braun <roger@rogerbraun.net>
Sun, 17 Sep 2017 11:54:14 +0000 (13:54 +0200)
lib/pleroma/web/mastodon_api/views/status_view.ex
test/web/mastodon_api/status_view_test.exs

index 11a435ca08628fa3325cfe61ce5c3017633ca4a7..66557cbca7aac5a467c121c44611f8036d035eed 100644 (file)
@@ -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"])
 
index 870a205f110c5d30d663370aebcdb0fc52d0539b..1575b1d6e07c8865238afa23aa50f97a16eb8d3b 100644 (file)
@@ -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