Add User.get_follow_state/2
This commit is contained in:
parent
2cc4fbab96
commit
bc2e98b200
|
@ -30,24 +30,9 @@ def changeset(%__MODULE__{} = following_relationship, attrs) do
|
||||||
end
|
end
|
||||||
|
|
||||||
def get(%User{} = follower, %User{} = following) do
|
def get(%User{} = follower, %User{} = following) do
|
||||||
following_relationship =
|
|
||||||
__MODULE__
|
__MODULE__
|
||||||
|> where(follower_id: ^follower.id, following_id: ^following.id)
|
|> where(follower_id: ^follower.id, following_id: ^following.id)
|
||||||
|> Repo.one()
|
|> Repo.one()
|
||||||
|
|
||||||
case {following_relationship, following.local} do
|
|
||||||
{nil, false} ->
|
|
||||||
case Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(follower, following) do
|
|
||||||
%{data: %{"state" => state}} when state in ["pending", "accept"] ->
|
|
||||||
%{state: state}
|
|
||||||
|
|
||||||
_ ->
|
|
||||||
nil
|
|
||||||
end
|
|
||||||
|
|
||||||
{following_relationship, _} ->
|
|
||||||
following_relationship
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def update(follower, following, "reject"), do: unfollow(follower, following)
|
def update(follower, following, "reject"), do: unfollow(follower, following)
|
||||||
|
|
|
@ -652,8 +652,8 @@ def unfollow(%User{ap_id: ap_id}, %User{ap_id: ap_id}) do
|
||||||
end
|
end
|
||||||
|
|
||||||
def unfollow(%User{} = follower, %User{} = followed) do
|
def unfollow(%User{} = follower, %User{} = followed) do
|
||||||
case FollowingRelationship.get(follower, followed) do
|
case get_follow_state(follower, followed) do
|
||||||
%{state: state} when state in ["accept", "pending"] ->
|
state when state in ["accept", "pending"] ->
|
||||||
FollowingRelationship.unfollow(follower, followed)
|
FollowingRelationship.unfollow(follower, followed)
|
||||||
{:ok, followed} = update_follower_count(followed)
|
{:ok, followed} = update_follower_count(followed)
|
||||||
|
|
||||||
|
@ -671,6 +671,24 @@ def unfollow(%User{} = follower, %User{} = followed) do
|
||||||
|
|
||||||
defdelegate following?(follower, followed), to: FollowingRelationship
|
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
|
def locked?(%User{} = user) do
|
||||||
user.locked || false
|
user.locked || false
|
||||||
end
|
end
|
||||||
|
|
|
@ -544,11 +544,9 @@ test "cancels a pending follow for a local user" do
|
||||||
assert {:ok, follower, followed, %{id: activity_id, data: %{"state" => "pending"}}} =
|
assert {:ok, follower, followed, %{id: activity_id, data: %{"state" => "pending"}}} =
|
||||||
CommonAPI.follow(follower, followed)
|
CommonAPI.follow(follower, followed)
|
||||||
|
|
||||||
assert %{state: "pending"} = Pleroma.FollowingRelationship.get(follower, followed)
|
assert User.get_follow_state(follower, followed) == "pending"
|
||||||
|
|
||||||
assert {:ok, follower} = CommonAPI.unfollow(follower, followed)
|
assert {:ok, follower} = CommonAPI.unfollow(follower, followed)
|
||||||
|
assert User.get_follow_state(follower, followed) == nil
|
||||||
assert Pleroma.FollowingRelationship.get(follower, followed) == nil
|
|
||||||
|
|
||||||
assert %{id: ^activity_id, data: %{"state" => "cancelled"}} =
|
assert %{id: ^activity_id, data: %{"state" => "cancelled"}} =
|
||||||
Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(follower, followed)
|
Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(follower, followed)
|
||||||
|
@ -568,11 +566,9 @@ test "cancels a pending follow for a remote user" do
|
||||||
assert {:ok, follower, followed, %{id: activity_id, data: %{"state" => "pending"}}} =
|
assert {:ok, follower, followed, %{id: activity_id, data: %{"state" => "pending"}}} =
|
||||||
CommonAPI.follow(follower, followed)
|
CommonAPI.follow(follower, followed)
|
||||||
|
|
||||||
assert %{state: "pending"} = Pleroma.FollowingRelationship.get(follower, followed)
|
assert User.get_follow_state(follower, followed) == "pending"
|
||||||
|
|
||||||
assert {:ok, follower} = CommonAPI.unfollow(follower, followed)
|
assert {:ok, follower} = CommonAPI.unfollow(follower, followed)
|
||||||
|
assert User.get_follow_state(follower, followed) == nil
|
||||||
assert Pleroma.FollowingRelationship.get(follower, followed) == nil
|
|
||||||
|
|
||||||
assert %{id: ^activity_id, data: %{"state" => "cancelled"}} =
|
assert %{id: ^activity_id, data: %{"state" => "cancelled"}} =
|
||||||
Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(follower, followed)
|
Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(follower, followed)
|
||||||
|
|
Loading…
Reference in New Issue