diff options
author | lambda <lain@soykaf.club> | 2019-05-22 11:04:30 +0000 |
---|---|---|
committer | lambda <lain@soykaf.club> | 2019-05-22 11:04:30 +0000 |
commit | 714d8d4ef9c5e059e0ca7f1f55b48e343ced85f8 (patch) | |
tree | cc802031efd82f507488e7a688b095f7ab3342bf /lib/pleroma | |
parent | ad535ae55b045c93054ab95ae89a70b767ef8bdd (diff) | |
parent | a023ca004cbd90e330cab35e4dfda16346d08668 (diff) | |
download | pleroma-714d8d4ef9c5e059e0ca7f1f55b48e343ced85f8.tar.gz |
Merge branch 'feature/object-pruning' into 'develop'
Object pruning
See merge request pleroma/pleroma!1181
Diffstat (limited to 'lib/pleroma')
-rw-r--r-- | lib/pleroma/object.ex | 7 | ||||
-rw-r--r-- | lib/pleroma/object/fetcher.ex | 22 |
2 files changed, 27 insertions, 2 deletions
diff --git a/lib/pleroma/object.ex b/lib/pleroma/object.ex index 740d687a3..cc6fc9c5d 100644 --- a/lib/pleroma/object.ex +++ b/lib/pleroma/object.ex @@ -130,6 +130,13 @@ defmodule Pleroma.Object do end end + def prune(%Object{data: %{"id" => id}} = object) do + with {:ok, object} <- Repo.delete(object), + {:ok, true} <- Cachex.del(:object_cache, "object:#{id}") do + {:ok, object} + end + end + def set_cache(%Object{data: %{"id" => ap_id}} = object) do Cachex.put(:object_cache, "object:#{ap_id}", object) {:ok, object} diff --git a/lib/pleroma/object/fetcher.ex b/lib/pleroma/object/fetcher.ex index 8d4bcc95e..bb9388d4f 100644 --- a/lib/pleroma/object/fetcher.ex +++ b/lib/pleroma/object/fetcher.ex @@ -8,6 +8,19 @@ defmodule Pleroma.Object.Fetcher do @httpoison Application.get_env(:pleroma, :httpoison) + defp reinject_object(data) do + Logger.debug("Reinjecting object #{data["id"]}") + + with data <- Transmogrifier.fix_object(data), + {:ok, object} <- Object.create(data) do + {:ok, object} + else + e -> + Logger.error("Error while processing object: #{inspect(e)}") + {:error, e} + end + end + # TODO: # This will create a Create activity, which we need internally at the moment. def fetch_object_from_id(id) do @@ -26,12 +39,17 @@ defmodule Pleroma.Object.Fetcher do "object" => data }, :ok <- Containment.contain_origin(id, params), - {:ok, activity} <- Transmogrifier.handle_incoming(params) do - {:ok, Object.normalize(activity, false)} + {:ok, activity} <- Transmogrifier.handle_incoming(params), + {:object, _data, %Object{} = object} <- + {:object, data, Object.normalize(activity, false)} do + {:ok, object} else {:error, {:reject, nil}} -> {:reject, nil} + {:object, data, nil} -> + reinject_object(data) + object = %Object{} -> {:ok, object} |