X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Fmastodon_api%2Fviews%2Faccount_view.ex;h=f2dc2a9bda47f367bf315f473839ea222a729e3c;hb=ea9c57b26ed463622e4489736fcddb8fca1b3341;hp=2fe46158b305d1e8dce2922aca2134f61705fd04;hpb=86f2fbc81e5f3df6c16e05127e9e39c8fca0cde9;p=akkoma
diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex
index 2fe46158b..f2dc2a9bd 100644
--- a/lib/pleroma/web/mastodon_api/views/account_view.ex
+++ b/lib/pleroma/web/mastodon_api/views/account_view.ex
@@ -5,19 +5,28 @@
defmodule Pleroma.Web.MastodonAPI.AccountView do
use Pleroma.Web, :view
+ alias Pleroma.FollowingRelationship
alias Pleroma.User
alias Pleroma.UserRelationship
alias Pleroma.Web.CommonAPI.Utils
alias Pleroma.Web.MastodonAPI.AccountView
alias Pleroma.Web.MediaProxy
- defp find_following_rel(following_relationships, follower, following) do
- Enum.find(following_relationships, fn
- fr -> fr.follower_id == follower.id and fr.following_id == following.id
- end)
- end
-
def render("index.json", %{users: users} = opts) do
+ relationships_opt =
+ cond do
+ Map.has_key?(opts, :relationships) ->
+ opts[:relationships]
+
+ is_nil(opts[:for]) ->
+ UserRelationship.view_relationships_option(nil, [])
+
+ true ->
+ UserRelationship.view_relationships_option(opts[:for], users)
+ end
+
+ opts = Map.put(opts, :relationships, relationships_opt)
+
users
|> render_many(AccountView, "show.json", opts)
|> Enum.filter(&Enum.any?/1)
@@ -46,13 +55,13 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
"relationship.json",
%{user: %User{} = reading_user, target: %User{} = target} = opts
) do
- user_relationships = Map.get(opts, :user_relationships)
- following_relationships = opts[:following_relationships]
+ user_relationships = get_in(opts, [:relationships, :user_relationships])
+ following_relationships = get_in(opts, [:relationships, :following_relationships])
follow_state =
if following_relationships do
user_to_target_following_relation =
- find_following_rel(following_relationships, reading_user, target)
+ FollowingRelationship.find(following_relationships, reading_user, target)
User.get_follow_state(reading_user, target, user_to_target_following_relation)
else
@@ -61,20 +70,18 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
followed_by =
if following_relationships do
- with %{state: "accept"} <-
- find_following_rel(following_relationships, target, reading_user) do
- true
- else
+ case FollowingRelationship.find(following_relationships, target, reading_user) do
+ %{state: :follow_accept} -> true
_ -> false
end
else
User.following?(target, reading_user)
end
- # TODO: add a note on adjusting StatusView.user_relationships_opt/1 re: preloading of user relations
+ # NOTE: adjust UserRelationship.view_relationships_option/2 on new relation-related flags
%{
id: to_string(target.id),
- following: follow_state == "accept",
+ following: follow_state == :follow_accept,
followed_by: followed_by,
blocking:
UserRelationship.exists?(
@@ -116,7 +123,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
reading_user,
&User.subscribed_to?(&2, &1)
),
- requested: follow_state == "pending",
+ requested: follow_state == :follow_pending,
domain_blocking: User.blocks_domain?(reading_user, target),
showing_reblogs:
not UserRelationship.exists?(
@@ -130,8 +137,21 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
}
end
- def render("relationships.json", %{user: user, targets: targets}) do
- render_many(targets, AccountView, "relationship.json", user: user, as: :target)
+ def render("relationships.json", %{user: user, targets: targets} = opts) do
+ relationships_opt =
+ cond do
+ Map.has_key?(opts, :relationships) ->
+ opts[:relationships]
+
+ is_nil(opts[:for]) ->
+ UserRelationship.view_relationships_option(nil, [])
+
+ true ->
+ UserRelationship.view_relationships_option(user, targets)
+ end
+
+ render_opts = %{as: :target, user: user, relationships: relationships_opt}
+ render_many(targets, AccountView, "relationship.json", render_opts)
end
defp do_render("show.json", %{user: user} = opts) do
@@ -173,8 +193,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
render("relationship.json", %{
user: opts[:for],
target: user,
- user_relationships: opts[:user_relationships],
- following_relationships: opts[:following_relationships]
+ relationships: opts[:relationships]
})
%{
@@ -197,7 +216,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do
fields: user.fields,
bot: bot,
source: %{
- note: Pleroma.HTML.strip_tags((user.bio || "") |> String.replace("
", "\n")),
+ note: (user.bio || "") |> String.replace(~r(
), "\n") |> Pleroma.HTML.strip_tags(),
sensitive: false,
fields: user.raw_fields,
pleroma: %{