diff options
author | Mark Felder <feld@feld.me> | 2024-06-16 16:26:24 -0400 |
---|---|---|
committer | Mark Felder <feld@feld.me> | 2024-06-16 17:39:35 -0400 |
commit | e37845cd351d0d9cbdae469b75a532edbaa3c0ed (patch) | |
tree | edb07ddcee5ab9c9f71af80278b834fcf77c387c /lib | |
parent | 38e6166d93b26b34d2efe38cc65d0217ad994527 (diff) | |
download | pleroma-e37845cd351d0d9cbdae469b75a532edbaa3c0ed.tar.gz pleroma-e37845cd351d0d9cbdae469b75a532edbaa3c0ed.zip |
Stale user refreshing should be done async to prevent blocking of rendering activities
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/user.ex | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index 884c1f302..440dc9210 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -2154,20 +2154,23 @@ defmodule Pleroma.User do def fetch_by_ap_id(ap_id), do: ActivityPub.make_user_from_ap_id(ap_id) + @spec get_or_fetch_by_ap_id(String.t()) :: {:ok, User.t()} | {:error, any()} def get_or_fetch_by_ap_id(ap_id) do - cached_user = get_cached_by_ap_id(ap_id) - - maybe_fetched_user = needs_update?(cached_user) && fetch_by_ap_id(ap_id) - - case {cached_user, maybe_fetched_user} do - {_, {:ok, %User{} = user}} -> - {:ok, user} + with cached_user = %User{} <- get_cached_by_ap_id(ap_id), + _ <- maybe_refresh(cached_user) do + {:ok, cached_user} + else + _ -> fetch_by_ap_id(ap_id) + end + end - {%User{} = user, _} -> - {:ok, user} + defp maybe_refresh(user) do + fun = fn -> needs_update?(user) && fetch_by_ap_id(user.ap_id) end - _ -> - {:error, :not_found} + if Config.get([__MODULE__, :sync_refreshing], false) do + fun.() + else + Task.start(fun) end end |