MastoAPI: Add favourited_by/reblogged_by.
authorRoger Braun <roger@rogerbraun.net>
Thu, 14 Sep 2017 07:50:49 +0000 (09:50 +0200)
committerRoger Braun <roger@rogerbraun.net>
Thu, 14 Sep 2017 07:50:49 +0000 (09:50 +0200)
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
lib/pleroma/web/mastodon_api/views/account_view.ex
lib/pleroma/web/router.ex

index b537bcf71760525e0d4675b4508ceac6d7aeef10..0f7674f5dbe2c9ce1ec09629ce5a5cba5ca846ef 100644 (file)
@@ -208,6 +208,28 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
     end
   end
 
+  def favourited_by(conn, %{"id" => id}) do
+    with %Activity{data: %{"object" => %{"likes" => likes} = data}} <- Repo.get(Activity, id) do
+      q = from u in User,
+        where: u.ap_id in ^likes
+      users = Repo.all(q)
+      render conn, AccountView, "accounts.json", %{users: users, as: :user}
+    else
+      _ -> json(conn, [])
+    end
+  end
+
+  def reblogged_by(conn, %{"id" => id}) do
+    with %Activity{data: %{"object" => %{"announcements" => announces}}} <- Repo.get(Activity, id) do
+      q = from u in User,
+        where: u.ap_id in ^announces
+      users = Repo.all(q)
+      render conn, AccountView, "accounts.json", %{users: users, as: :user}
+    else
+      _ -> json(conn, [])
+    end
+  end
+
   def empty_array(conn, _) do
     Logger.debug("Unimplemented, returning an empty array")
     json(conn, [])
index 22a7dddf85aa895bdb80982a92ec994f53e7b903..f2fa49cb519a9edcab26c621133597ed1b8e9bcc 100644 (file)
@@ -6,6 +6,10 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
   defp image_url(%{"url" => [ %{ "href" => href } | t ]}), do: href
   defp image_url(_), do: nil
 
+  def render("accounts.json", %{users: users} = opts) do
+    render_many(users, AccountView, "account.json", opts)
+  end
+
   def render("account.json", %{user: user}) do
     image = User.avatar_url(user)
     user_info = User.user_info(user)
index 93b31aba5a93466c7a0887f8c7a483afcc05c478..05d1e54b56a812d297484d9f2f3fe891fbf7400d 100644 (file)
@@ -68,6 +68,8 @@ defmodule Pleroma.Web.Router do
 
     get "/statuses/:id", MastodonAPIController, :get_status
     get "/statuses/:id/context", MastodonAPIController, :get_context
+    get "/statuses/:id/favourited_by", MastodonAPIController, :favourited_by
+    get "/statuses/:id/reblogged_by", MastodonAPIController, :reblogged_by
 
     get "/accounts/:id/statuses", MastodonAPIController, :user_statuses
     get "/accounts/:id", MastodonAPIController, :user