Merge branch 'multiple-hackney-pools' into 'develop'
authorkaniini <nenolod@gmail.com>
Wed, 30 Jan 2019 19:01:57 +0000 (19:01 +0000)
committerkaniini <nenolod@gmail.com>
Wed, 30 Jan 2019 19:01:57 +0000 (19:01 +0000)
Use multiple hackney pools

See merge request pleroma/pleroma!739

docs/config.md
lib/pleroma/user.ex
test/user_test.exs
test/web/activity_pub/activity_pub_test.exs

index a00532d16f41eec1612cc08226fbd339b1bf7aba..4f4a4378c1f0405f5c48b02100291d40e6678b25 100644 (file)
@@ -110,9 +110,9 @@ Frontends can access these settings at `/api/pleroma/frontend_configurations`
 
 To add your own configuration for PleromaFE, use it like this:
 
-`config :pleroma, :frontend_configurations, :pleroma_fe, %{theme: "my-theme", ...}`
+`config :pleroma, :frontend_configurations, pleroma_fe: %{redirectRootNoLogin: "/main/all", ...}`
 
-These settings need to be complete, they will overide the defaults.
+These settings need to be complete, they will override the defaults. See `priv/static/static/config.json` for the available keys.
 
 ## :fe
 __THIS IS DEPRECATED__
index 1468cc133e5b306a84321fde33d333c1ab2f7431..bd797db40fe4b2748e90cde36c78c5481867c4ee 100644 (file)
@@ -309,20 +309,21 @@ defmodule Pleroma.User do
   @doc "A mass follow for local users. Ignores blocks and has no side effects"
   @spec follow_all(User.t(), list(User.t())) :: {atom(), User.t()}
   def follow_all(follower, followeds) do
-    following =
-      (follower.following ++ Enum.map(followeds, fn %{follower_address: fa} -> fa end))
-      |> Enum.uniq()
+    followed_addresses = Enum.map(followeds, fn %{follower_address: fa} -> fa end)
 
-    {:ok, follower} =
-      follower
-      |> follow_changeset(%{following: following})
-      |> update_and_set_cache
+    q =
+      from(u in User,
+        where: u.id == ^follower.id,
+        update: [set: [following: fragment("array_cat(?, ?)", u.following, ^followed_addresses)]]
+      )
+
+    {1, [follower]} = Repo.update_all(q, [], returning: true)
 
     Enum.each(followeds, fn followed ->
       update_follower_count(followed)
     end)
 
-    {:ok, follower}
+    set_cache(follower)
   end
 
   def follow(%User{} = follower, %User{info: info} = followed) do
@@ -343,18 +344,17 @@ defmodule Pleroma.User do
           Websub.subscribe(follower, followed)
         end
 
-        following =
-          [ap_followers | follower.following]
-          |> Enum.uniq()
+        q =
+          from(u in User,
+            where: u.id == ^follower.id,
+            update: [push: [following: ^ap_followers]]
+          )
 
-        follower =
-          follower
-          |> follow_changeset(%{following: following})
-          |> update_and_set_cache
+        {1, [follower]} = Repo.update_all(q, [], returning: true)
 
         {:ok, _} = update_follower_count(followed)
 
-        follower
+        set_cache(follower)
     end
   end
 
@@ -362,17 +362,18 @@ defmodule Pleroma.User do
     ap_followers = followed.follower_address
 
     if following?(follower, followed) and follower.ap_id != followed.ap_id do
-      following =
-        follower.following
-        |> List.delete(ap_followers)
+      q =
+        from(u in User,
+          where: u.id == ^follower.id,
+          update: [pull: [following: ^ap_followers]]
+        )
 
-      {:ok, follower} =
-        follower
-        |> follow_changeset(%{following: following})
-        |> update_and_set_cache
+      {1, [follower]} = Repo.update_all(q, [], returning: true)
 
       {:ok, followed} = update_follower_count(followed)
 
+      set_cache(follower)
+
       {:ok, follower, Utils.fetch_latest_follow(follower, followed)}
     else
       {:error, "Not subscribed!"}
@@ -423,12 +424,16 @@ defmodule Pleroma.User do
     get_by_nickname(nickname)
   end
 
+  def set_cache(user) do
+    Cachex.put(:user_cache, "ap_id:#{user.ap_id}", user)
+    Cachex.put(:user_cache, "nickname:#{user.nickname}", user)
+    Cachex.put(:user_cache, "user_info:#{user.id}", user_info(user))
+    {:ok, user}
+  end
+
   def update_and_set_cache(changeset) do
     with {:ok, user} <- Repo.update(changeset) do
-      Cachex.put(:user_cache, "ap_id:#{user.ap_id}", user)
-      Cachex.put(:user_cache, "nickname:#{user.nickname}", user)
-      Cachex.put(:user_cache, "user_info:#{user.id}", user_info(user))
-      {:ok, user}
+      set_cache(user)
     else
       e -> e
     end
index a0657c7b63736d6d047fc18c17b1f0f84f76ead6..cd202e360e909f7927a8ef5f6d2eef5b30c22dcb 100644 (file)
@@ -50,13 +50,19 @@ defmodule Pleroma.UserTest do
 
   test "follow_all follows mutliple users" do
     user = insert(:user)
+    followed_zero = insert(:user)
     followed_one = insert(:user)
     followed_two = insert(:user)
+    not_followed = insert(:user)
+
+    {:ok, user} = User.follow(user, followed_zero)
 
     {:ok, user} = User.follow_all(user, [followed_one, followed_two])
 
     assert User.following?(user, followed_one)
     assert User.following?(user, followed_two)
+    assert User.following?(user, followed_zero)
+    refute User.following?(user, not_followed)
   end
 
   test "follow takes a user and another user" do
index 7895cf21d1882f73a74d7948292ca58a87413b43..b826f5a1baa9fd64fd2b9cd0f3a600197c224ef1 100644 (file)
@@ -623,8 +623,6 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
           "in_reply_to_status_id" => private_activity_2.id
         })
 
-      assert user1.following == [user3.ap_id <> "/followers", user1.ap_id]
-
       activities = ActivityPub.fetch_activities([user1.ap_id | user1.following])
 
       assert [public_activity, private_activity_1, private_activity_3] == activities