def fix_in_reply_to(%{"inReplyTo" => in_reply_to} = object)
when not is_nil(in_reply_to) do
in_reply_to_id =
- if is_bitstring(in_reply_to) do
- in_reply_to
- else
- if is_map(in_reply_to) && in_reply_to["id"] do
- in_reply_to["id"]
- end
+ cond do
+ is_bitstring(in_reply_to) -> in_reply_to
+ is_map(in_reply_to) && is_bitstring(in_reply_to["id"]) -> in_reply_to["id"]
+ is_list(in_reply_to) && is_bitstring(Enum.at(in_reply_to, 0)) -> Enum.at(in_reply_to, 0)
+ # Maybe I should output an error too?
+ true -> ""
end
case ActivityPub.fetch_object_from_id(in_reply_to_id) do
object
end
- def fix_emoji(object) do
- tags = object["tag"] || []
+ def fix_emoji(%{"tag" => tags} = object) when is_list(tags) do
emoji = tags |> Enum.filter(fn data -> data["type"] == "Emoji" and data["icon"] end)
emoji =
emoji
|> Enum.reduce(%{}, fn data, mapping ->
- name = data["name"]
-
- name =
- if String.starts_with?(name, ":") do
- name |> String.slice(1..-2)
- else
- name
- end
+ name = String.trim(data["name"], ":")
mapping |> Map.put(name, data["icon"]["url"])
end)
|> Map.put("emoji", emoji)
end
- def fix_tag(object) do
+ def fix_emoji(%{"tag" => %{"type" => "Emoji"} = tag} = object) do
+ name = String.trim(tag["name"], ":")
+ emoji = %{name => tag["icon"]["url"]}
+
+ object
+ |> Map.put("emoji", emoji)
+ end
+
+ def fix_emoji(object) do
+ object
+ end
+
+ def fix_tag(%{"tag" => tag} = object) when is_list(tag) do
tags =
- (object["tag"] || [])
+ tag
|> Enum.filter(fn data -> data["type"] == "Hashtag" and data["name"] end)
|> Enum.map(fn data -> String.slice(data["name"], 1..-1) end)
- combined = (object["tag"] || []) ++ tags
+ combined = tag ++ tags
object
|> Map.put("tag", combined)
end
+ def fix_tag(%{"tag" => %{"type" => "Hashtag"} = tag} = object) do
+ combined = [tag ++ String.slice(tag["name"], 1..-1)]
+
+ object
+ |> Map.put("tag", combined)
+ end
+
+ def fix_tag(object) do
+ object
+ end
+
# content map usually only has one language so this will do for now.
def fix_content_map(%{"contentMap" => content_map} = object) do
content_groups = Map.to_list(content_map)