aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/object.ex
diff options
context:
space:
mode:
authorrinpatch <rinpatch@sdf.org>2019-09-18 18:13:21 +0300
committerAriadne Conill <ariadne@dereferenced.org>2019-10-06 14:53:11 +0000
commiteae9a6d34d88698ba19ba2461374cb60b1c4a33f (patch)
treee22d426a941c3602d79a78f367aa821dbbb09b29 /lib/pleroma/object.ex
parent294e08cb65940ff193d6920e576f56718a5623f4 (diff)
downloadpleroma-eae9a6d34d88698ba19ba2461374cb60b1c4a33f.tar.gz
Initial poll refresh support
Implement refreshing the object with an interval and call the function when getting the poll.
Diffstat (limited to 'lib/pleroma/object.ex')
-rw-r--r--lib/pleroma/object.ex18
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex
index 5033798ae..640e068e5 100644
--- a/lib/pleroma/object.ex
+++ b/lib/pleroma/object.ex
@@ -38,6 +38,24 @@ defmodule Pleroma.Object do
def get_by_id(nil), do: nil
def get_by_id(id), do: Repo.get(Object, id)
+ def get_by_id_and_maybe_refetch(id, opts \\ []) do
+ %{updated_at: updated_at} = object = get_by_id(id)
+
+ if opts[:interval] &&
+ NaiveDateTime.diff(updated_at, NaiveDateTime.utc_now()) > opts[:interval] do
+ case Fetcher.refetch_object(object) do
+ {:ok, %Object{} = object} ->
+ object
+
+ e ->
+ Logger.error("Couldn't refresh #{object.data["id"]}:\n#{inspect(e)}")
+ object
+ end
+ else
+ object
+ end
+ end
+
def get_by_ap_id(nil), do: nil
def get_by_ap_id(ap_id) do