aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2018-02-24 10:51:15 +0100
committerlain <lain@soykaf.club>2018-02-24 10:51:15 +0100
commit541a4cbbb6c075ebdd50023ed99243e9eca2001a (patch)
treea638abb57ba76c72c804d9186a72f6c8595d693f /lib
parent01d5ef65faa8d5e333fdca72c7b779cb0d03c7db (diff)
downloadpleroma-541a4cbbb6c075ebdd50023ed99243e9eca2001a.tar.gz
Oh no! More fixes!
Diffstat (limited to 'lib')
-rw-r--r--lib/mix/tasks/fix_ap_users.ex2
-rw-r--r--lib/pleroma/web/activity_pub/transmogrifier.ex40
2 files changed, 25 insertions, 17 deletions
diff --git a/lib/mix/tasks/fix_ap_users.ex b/lib/mix/tasks/fix_ap_users.ex
index 09a2c0424..a0038d5e8 100644
--- a/lib/mix/tasks/fix_ap_users.ex
+++ b/lib/mix/tasks/fix_ap_users.ex
@@ -14,7 +14,7 @@ defmodule Mix.Tasks.FixApUsers do
Enum.each(users, fn(user) ->
IO.puts("Fetching #{user.nickname}")
- Pleroma.Web.ActivityPub.Transmogrifier.upgrade_user_from_ap_id(user.ap_id)
+ Pleroma.Web.ActivityPub.Transmogrifier.upgrade_user_from_ap_id(user.ap_id, false)
end)
end
end
diff --git a/lib/pleroma/web/activity_pub/transmogrifier.ex b/lib/pleroma/web/activity_pub/transmogrifier.ex
index 62c229050..25c6bad06 100644
--- a/lib/pleroma/web/activity_pub/transmogrifier.ex
+++ b/lib/pleroma/web/activity_pub/transmogrifier.ex
@@ -197,31 +197,39 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
|> Map.put("attachment", attachments)
end
- def upgrade_user_from_ap_id(ap_id) do
+ defp user_upgrade_task(user) do
+ old_follower_address = User.ap_followers(user)
+ q = from u in User,
+ where: ^old_follower_address in u.following,
+ update: [set: [following: fragment("array_replace(?,?,?)", u.following, ^old_follower_address, ^user.follower_address)]]
+ Repo.update_all(q, [])
+
+ # Only do this for recent activties, don't go through the whole db.
+ since = (Repo.aggregate(Activity, :max, :id) || 0) - 100_000
+ q = from a in Activity,
+ where: ^old_follower_address in a.recipients,
+ where: a.id > ^since,
+ update: [set: [recipients: fragment("array_replace(?,?,?)", a.recipients, ^old_follower_address, ^user.follower_address)]]
+ Repo.update_all(q, [])
+ end
+
+ def upgrade_user_from_ap_id(ap_id, async \\ true) do
with %User{} = user <- User.get_by_ap_id(ap_id),
{:ok, data} <- ActivityPub.fetch_and_prepare_user_from_ap_id(ap_id) do
data = data
|> Map.put(:info, Map.merge(user.info, data[:info]))
- old_follower_address = User.ap_followers(user)
{:ok, user} = User.upgrade_changeset(user, data)
|> Repo.update()
# This could potentially take a long time, do it in the background
- Task.start(fn ->
- q = from u in User,
- where: ^old_follower_address in u.following,
- update: [set: [following: fragment("array_replace(?,?,?)", u.following, ^old_follower_address, ^user.follower_address)]]
- Repo.update_all(q, [])
-
- # Only do this for recent activties, don't go through the whole db.
- since = (Repo.aggregate(Activity, :max, :id) || 0) - 100_000
- q = from a in Activity,
- where: ^old_follower_address in a.recipients,
- where: a.id > ^since,
- update: [set: [recipients: fragment("array_replace(?,?,?)", a.recipients, ^old_follower_address, ^user.follower_address)]]
- Repo.update_all(q, [])
- end)
+ if async do
+ Task.start(fn ->
+ user_upgrade_task(user)
+ end)
+ else
+ user_upgrade_task(user)
+ end
{:ok, user}
else