diff options
author | Roger Braun <roger@rogerbraun.net> | 2017-05-10 18:44:06 +0200 |
---|---|---|
committer | Roger Braun <roger@rogerbraun.net> | 2017-05-10 18:44:06 +0200 |
commit | 2e753e8cd740d540eae7badf5c48197d3914b5f5 (patch) | |
tree | ae995208d4e9ee6304b9d26f5343c8974340dd7f /lib | |
parent | fca7390c698fc82a41eb820bc5490fb09ddc4ea2 (diff) | |
download | pleroma-2e753e8cd740d540eae7badf5c48197d3914b5f5.tar.gz |
Refresh subscriptions.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/web/federator/federator.ex | 17 | ||||
-rw-r--r-- | lib/pleroma/web/websub/websub.ex | 15 |
2 files changed, 30 insertions, 2 deletions
diff --git a/lib/pleroma/web/federator/federator.ex b/lib/pleroma/web/federator/federator.ex index ab3313de1..fbf6ea6be 100644 --- a/lib/pleroma/web/federator/federator.ex +++ b/lib/pleroma/web/federator/federator.ex @@ -1,7 +1,7 @@ defmodule Pleroma.Web.Federator do use GenServer alias Pleroma.User - alias Pleroma.Web.WebFinger + alias Pleroma.Web.{WebFinger, Websub} require Logger @websub Application.get_env(:pleroma, :websub) @@ -9,14 +9,27 @@ defmodule Pleroma.Web.Federator do @max_jobs 10 def start_link do + spawn(fn -> + Process.sleep(1000 * 60 * 1) # 10 minutes + enqueue(:refresh_subscriptions, nil) + end) GenServer.start_link(__MODULE__, {:sets.new(), :queue.new()}, name: __MODULE__) end + def handle(:refresh_subscriptions, _) do + Logger.debug("Federator running refresh subscriptions") + Websub.refresh_subscriptions() + spawn(fn -> + Process.sleep(1000 * 60 * 60) # 60 minutes + enqueue(:refresh_subscriptions, nil) + end) + end + def handle(:publish, activity) do Logger.debug(fn -> "Running publish for #{activity.data["id"]}" end) with actor when not is_nil(actor) <- User.get_cached_by_ap_id(activity.data["actor"]) do Logger.debug(fn -> "Sending #{activity.data["id"]} out via websub" end) - Pleroma.Web.Websub.publish(Pleroma.Web.OStatus.feed_path(actor), actor, activity) + Websub.publish(Pleroma.Web.OStatus.feed_path(actor), actor, activity) {:ok, actor} = WebFinger.ensure_keys_present(actor) Logger.debug(fn -> "Sending #{activity.data["id"]} out via salmon" end) diff --git a/lib/pleroma/web/websub/websub.ex b/lib/pleroma/web/websub/websub.ex index 7c8efa917..5468758fd 100644 --- a/lib/pleroma/web/websub/websub.ex +++ b/lib/pleroma/web/websub/websub.ex @@ -204,4 +204,19 @@ defmodule Pleroma.Web.Websub do {:error, websub} end end + + def refresh_subscriptions(delta \\ 60 * 60 * 24) do + Logger.debug("Refreshing subscriptions") + + cut_off = NaiveDateTime.add(NaiveDateTime.utc_now, delta) + + query = from sub in WebsubClientSubscription, + where: sub.valid_until < ^cut_off and sub.state == "active" + + subs = Repo.all(query) + + Enum.map(subs, fn (sub) -> + request_subscription(sub) + end) + end end |