Merge branch 'develop' into issue/1383
[akkoma] / lib / pleroma / user.ex
index 398c91cf39451cda733e0ada761f1ff96c61a8de..5ea36fea32ed1a770307db6814a8681c38df8d23 100644 (file)
@@ -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