aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Pitcock <nenolod@dereferenced.org>2018-09-19 06:13:18 +0000
committerkaniini <nenolod@gmail.com>2018-09-20 23:50:56 +0000
commitc9f6eb9a419b4c693cdb95c9f9e0fae724d4e415 (patch)
treeb1e2ed484761feb9d9a30b82b225fc6ecea0d4e0
parentf2727e23eeb66c8f53d06013c28fef313a5527de (diff)
downloadpleroma-c9f6eb9a419b4c693cdb95c9f9e0fae724d4e415.tar.gz
user: implement dynamic refresh of profiles (gets rid of need for fix_ap_users task)
-rw-r--r--lib/pleroma/user.ex21
-rw-r--r--priv/repo/migrations/20180919060348_users_add_last_refreshed_at.exs9
2 files changed, 28 insertions, 2 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 1dad30e87..e3e6aa0d8 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -22,6 +22,7 @@ defmodule Pleroma.User do
field(:info, :map, default: %{})
field(:follower_address, :string)
field(:search_distance, :float, virtual: true)
+ field(:last_refreshed_at, :naive_datetime)
has_many(:notifications, Notification)
timestamps()
@@ -112,8 +113,12 @@ defmodule Pleroma.User do
end
def upgrade_changeset(struct, params \\ %{}) do
+ params =
+ params
+ |> Map.put(:last_refreshed_at, NaiveDateTime.utc_now())
+
struct
- |> cast(params, [:bio, :name, :info, :follower_address, :avatar])
+ |> cast(params, [:bio, :name, :info, :follower_address, :avatar, :last_refreshed_at])
|> unique_constraint(:nickname)
|> validate_format(:nickname, ~r/^[a-zA-Z\d]+$/)
|> validate_length(:bio, max: 5000)
@@ -169,6 +174,16 @@ defmodule Pleroma.User do
end
end
+ def needs_update?(%User{local: true}), do: false
+
+ def needs_update?(%User{local: false, last_refreshed_at: nil}), do: true
+
+ def needs_update?(%User{local: false} = user) do
+ NaiveDateTime.diff(NaiveDateTime.utc_now(), user.last_refreshed_at) >= 86400
+ end
+
+ def needs_update?(_), do: true
+
def maybe_direct_follow(%User{} = follower, %User{info: info} = followed) do
user_config = Application.get_env(:pleroma, :user)
deny_follow_blocked = Keyword.get(user_config, :deny_follow_blocked)
@@ -655,7 +670,9 @@ defmodule Pleroma.User do
end
def get_or_fetch_by_ap_id(ap_id) do
- if user = get_by_ap_id(ap_id) do
+ user = get_by_ap_id(ap_id)
+
+ if !is_nil(user) and !User.needs_update?(user) do
user
else
ap_try = ActivityPub.make_user_from_ap_id(ap_id)
diff --git a/priv/repo/migrations/20180919060348_users_add_last_refreshed_at.exs b/priv/repo/migrations/20180919060348_users_add_last_refreshed_at.exs
new file mode 100644
index 000000000..1942e4e9c
--- /dev/null
+++ b/priv/repo/migrations/20180919060348_users_add_last_refreshed_at.exs
@@ -0,0 +1,9 @@
+defmodule Pleroma.Repo.Migrations.UsersAddLastRefreshedAt do
+ use Ecto.Migration
+
+ def change do
+ alter table(:users) do
+ add :last_refreshed_at, :naive_datetime
+ end
+ end
+end