Переглянути джерело

Add User.get_follow_state/2

floki-fast_html-2-electric-boogalo
Egor Kislitsyn 4 роки тому
джерело
коміт
bc2e98b200
Не вдалося знайти GPG ключ що відповідає даному підпису Ідентифікатор GPG ключа: 1B49CB15B71E7805
3 змінених файлів з 27 додано та 28 видалено
  1. +3
    -18
      lib/pleroma/following_relationship.ex
  2. +20
    -2
      lib/pleroma/user.ex
  3. +4
    -8
      test/web/common_api/common_api_test.exs

+ 3
- 18
lib/pleroma/following_relationship.ex Переглянути файл

@@ -30,24 +30,9 @@ defmodule Pleroma.FollowingRelationship do
end

def get(%User{} = follower, %User{} = following) do
following_relationship =
__MODULE__
|> where(follower_id: ^follower.id, following_id: ^following.id)
|> 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
__MODULE__
|> where(follower_id: ^follower.id, following_id: ^following.id)
|> Repo.one()
end

def update(follower, following, "reject"), do: unfollow(follower, following)


+ 20
- 2
lib/pleroma/user.ex Переглянути файл

@@ -652,8 +652,8 @@ defmodule Pleroma.User do
end

def unfollow(%User{} = follower, %User{} = followed) do
case FollowingRelationship.get(follower, followed) do
%{state: state} when state in ["accept", "pending"] ->
case get_follow_state(follower, followed) do
state when state in ["accept", "pending"] ->
FollowingRelationship.unfollow(follower, followed)
{:ok, followed} = update_follower_count(followed)

@@ -671,6 +671,24 @@ defmodule Pleroma.User do

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


+ 4
- 8
test/web/common_api/common_api_test.exs Переглянути файл

@@ -544,11 +544,9 @@ defmodule Pleroma.Web.CommonAPITest do
assert {:ok, follower, followed, %{id: activity_id, data: %{"state" => "pending"}}} =
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 Pleroma.FollowingRelationship.get(follower, followed) == nil
assert User.get_follow_state(follower, followed) == nil

assert %{id: ^activity_id, data: %{"state" => "cancelled"}} =
Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(follower, followed)
@@ -568,11 +566,9 @@ defmodule Pleroma.Web.CommonAPITest do
assert {:ok, follower, followed, %{id: activity_id, data: %{"state" => "pending"}}} =
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 Pleroma.FollowingRelationship.get(follower, followed) == nil
assert User.get_follow_state(follower, followed) == nil

assert %{id: ^activity_id, data: %{"state" => "cancelled"}} =
Pleroma.Web.ActivityPub.Utils.fetch_latest_follow(follower, followed)


Завантаження…
Відмінити
Зберегти