Map.put(object, "url", url["href"])
end
- def fix_url(%{"type" => "Video", "url" => url} = object) when is_list(url) do
+ def fix_url(%{"type" => object_type, "url" => url} = object)
+ when object_type in ["Video", "Audio"] and is_list(url) do
first_element = Enum.at(url, 0)
link_element = Enum.find(url, fn x -> is_map(x) and x["mimeType"] == "text/html" end)
%{"type" => "Create", "object" => %{"type" => objtype} = object} = data,
options
)
- when objtype in ["Article", "Event", "Note", "Video", "Page", "Question", "Answer"] do
+ when objtype in ["Article", "Event", "Note", "Video", "Page", "Question", "Answer", "Audio"] do
actor = Containment.get_actor(data)
data =
data |> LikeValidator.cast_data() |> Ecto.Changeset.apply_action(:insert)},
cast_data = ObjectValidator.stringify_keys(Map.from_struct(cast_data_sym)),
:ok <- ObjectValidator.fetch_actor_and_object(cast_data),
- {_, {:ok, cast_data}} <- {:maybe_add_context, maybe_add_context_from_object(cast_data)},
+ {_, {:ok, cast_data}} <- {:ensure_context_presence, ensure_context_presence(cast_data)},
{_, {:ok, cast_data}} <-
- {:maybe_add_recipients, maybe_add_recipients_from_object(cast_data)},
+ {:ensure_recipients_presence, ensure_recipients_presence(cast_data)},
{_, {:ok, activity, _meta}} <-
{:common_pipeline, Pipeline.common_pipeline(cast_data, local: false)} do
{:ok, activity}
end
def add_mention_tags(object) do
- mentions =
- object
- |> Utils.get_notified_from_object()
- |> Enum.map(&build_mention_tag/1)
+ {enabled_receivers, disabled_receivers} = Utils.get_notified_from_object(object)
+ potential_receivers = enabled_receivers ++ disabled_receivers
+ mentions = Enum.map(potential_receivers, &build_mention_tag/1)
tags = object["tag"] || []
-
Map.put(object, "tag", tags ++ mentions)
end
def maybe_fix_user_object(data), do: maybe_fix_user_url(data)
- defp maybe_add_context_from_object(%{"context" => context} = data) when is_binary(context),
+ defp ensure_context_presence(%{"context" => context} = data) when is_binary(context),
do: {:ok, data}
- defp maybe_add_context_from_object(%{"object" => object} = data) when is_binary(object) do
- if object = Object.normalize(object) do
- data =
- data
- |> Map.put("context", object.data["context"])
-
- {:ok, data}
+ defp ensure_context_presence(%{"object" => object} = data) when is_binary(object) do
+ with %{data: %{"context" => context}} when is_binary(context) <- Object.normalize(object) do
+ {:ok, Map.put(data, "context", context)}
else
- {:error, "No context on referenced object"}
+ _ ->
+ {:error, :no_context}
end
end
- defp maybe_add_context_from_object(_) do
+ defp ensure_context_presence(_) do
{:error, :no_context}
end
- defp maybe_add_recipients_from_object(%{"object" => object} = data) do
- to = data["to"] || []
- cc = data["cc"] || []
+ defp ensure_recipients_presence(%{"to" => [_ | _], "cc" => [_ | _]} = data),
+ do: {:ok, data}
- if to == [] && cc == [] do
- if object = Object.normalize(object) do
+ defp ensure_recipients_presence(%{"object" => object} = data) do
+ case Object.normalize(object) do
+ %{data: %{"actor" => actor}} ->
data =
data
- |> Map.put("to", [object.data["actor"]])
- |> Map.put("cc", cc)
+ |> Map.put("to", [actor])
+ |> Map.put("cc", data["cc"] || [])
{:ok, data}
- else
- {:error, "No actor on referenced object"}
- end
- else
- {:ok, data}
+
+ nil ->
+ {:error, :no_object}
+
+ _ ->
+ {:error, :no_actor}
end
end
- defp maybe_add_recipients_from_object(_) do
+ defp ensure_recipients_presence(_) do
{:error, :no_object}
end
end