Merge branch 'cancel-follow-request' into 'develop'
Add support for cancellation of a follow request Closes #1522 See merge request pleroma/pleroma!2175
This commit is contained in:
commit
1262357ddb
7 changed files with 115 additions and 11 deletions
|
|
@ -58,8 +58,8 @@ defmodule Pleroma.FollowingRelationship do
|
|||
|
||||
def unfollow(%User{} = follower, %User{} = following) do
|
||||
case get(follower, following) do
|
||||
nil -> {:ok, nil}
|
||||
%__MODULE__{} = following_relationship -> Repo.delete(following_relationship)
|
||||
_ -> {:ok, nil}
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -647,25 +647,48 @@ defmodule Pleroma.User do
|
|||
end
|
||||
end
|
||||
|
||||
def unfollow(%User{ap_id: ap_id}, %User{ap_id: ap_id}) do
|
||||
{:error, "Not subscribed!"}
|
||||
end
|
||||
|
||||
def unfollow(%User{} = follower, %User{} = followed) do
|
||||
if following?(follower, followed) and follower.ap_id != followed.ap_id do
|
||||
FollowingRelationship.unfollow(follower, followed)
|
||||
case get_follow_state(follower, followed) do
|
||||
state when state in ["accept", "pending"] ->
|
||||
FollowingRelationship.unfollow(follower, followed)
|
||||
{:ok, followed} = update_follower_count(followed)
|
||||
|
||||
{:ok, followed} = update_follower_count(followed)
|
||||
{:ok, follower} =
|
||||
follower
|
||||
|> update_following_count()
|
||||
|> set_cache()
|
||||
|
||||
{:ok, follower} =
|
||||
follower
|
||||
|> update_following_count()
|
||||
|> set_cache()
|
||||
{:ok, follower, Utils.fetch_latest_follow(follower, followed)}
|
||||
|
||||
{:ok, follower, Utils.fetch_latest_follow(follower, followed)}
|
||||
else
|
||||
{:error, "Not subscribed!"}
|
||||
nil ->
|
||||
{:error, "Not subscribed!"}
|
||||
end
|
||||
end
|
||||
|
||||
defdelegate following?(follower, followed), to: FollowingRelationship
|
||||
|
||||
def get_follow_state(%User{} = follower, %User{} = following) do
|
||||
following_relationship = FollowingRelationship.get(follower, following)
|
||||
|
||||
case {following_relationship, following.local} do
|
||||
{nil, false} ->
|
||||
case Utils.fetch_latest_follow(follower, following) do
|
||||
%{data: %{"state" => state}} when state in ["pending", "accept"] -> state
|
||||
_ -> nil
|
||||
end
|
||||
|
||||
{%{state: state}, _} ->
|
||||
state
|
||||
|
||||
{nil, _} ->
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
||||
def locked?(%User{} = user) do
|
||||
user.locked || false
|
||||
end
|
||||
|
|
|
|||
|
|
@ -490,6 +490,15 @@ defmodule Pleroma.Web.ActivityPub.Utils do
|
|||
|> Repo.one()
|
||||
end
|
||||
|
||||
def fetch_latest_undo(%User{ap_id: ap_id}) do
|
||||
"Undo"
|
||||
|> Activity.Queries.by_type()
|
||||
|> where(actor: ^ap_id)
|
||||
|> order_by([activity], fragment("? desc nulls last", activity.id))
|
||||
|> limit(1)
|
||||
|> Repo.one()
|
||||
end
|
||||
|
||||
def get_latest_reaction(internal_activity_id, %{ap_id: ap_id}, emoji) do
|
||||
%{data: %{"object" => object_ap_id}} = Activity.get_by_id(internal_activity_id)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue