- def normalize(obj) when is_map(obj), do: Object.get_by_ap_id(obj["id"])
- def normalize(ap_id) when is_binary(ap_id), do: Object.get_by_ap_id(ap_id)
+ # If we pass an Activity to Object.normalize(), we can try to use the preloaded object.
+ # Use this whenever possible, especially when walking graphs in an O(N) loop!
+ def normalize(%Activity{object: %Object{} = object}), do: object
+
+ # A hack for fake activities
+ def normalize(%Activity{data: %{"object" => %{"fake" => true} = data}}) do
+ %Object{id: "pleroma:fake_object_id", data: data}
+ end
+
+ # Catch and log Object.normalize() calls where the Activity's child object is not
+ # preloaded.
+ def normalize(%Activity{data: %{"object" => %{"id" => ap_id}}}) do
+ Logger.debug(
+ "Object.normalize() called without preloaded object (#{ap_id}). Consider preloading the object!"
+ )
+
+ Logger.debug("Backtrace: #{inspect(Process.info(:erlang.self(), :current_stacktrace))}")
+
+ normalize(ap_id)
+ end
+
+ def normalize(%Activity{data: %{"object" => ap_id}}) do
+ Logger.debug(
+ "Object.normalize() called without preloaded object (#{ap_id}). Consider preloading the object!"
+ )
+
+ Logger.debug("Backtrace: #{inspect(Process.info(:erlang.self(), :current_stacktrace))}")
+
+ normalize(ap_id)
+ end
+
+ # Old way, try fetching the object through cache.
+ def normalize(%{"id" => ap_id}), do: normalize(ap_id)
+ def normalize(ap_id) when is_binary(ap_id), do: get_cached_by_ap_id(ap_id)