with scope when not is_nil(scope) <- string_from_xpath("//mastodon:scope", entry),
cw when not is_nil(cw) <- string_from_xpath("/*/summary", entry) do
with scope when not is_nil(scope) <- string_from_xpath("//mastodon:scope", entry),
cw when not is_nil(cw) <- string_from_xpath("/*/summary", entry) do
- |> Enum.map(fn (category) -> string_from_xpath("/category/@term", category) |> String.downcase end)
+ |> Enum.map(fn (category) -> string_from_xpath("/category/@term", category) end)
+ |> Enum.filter(&(&1))
+ |> Enum.map(&String.downcase/1)
}
with false <- user.local,
avatar <- make_avatar_object(doc),
bio <- string_from_xpath("//author[1]/summary", doc),
name <- string_from_xpath("//author[1]/poco:displayName", doc),
}
with false <- user.local,
avatar <- make_avatar_object(doc),
bio <- string_from_xpath("//author[1]/summary", doc),
name <- string_from_xpath("//author[1]/poco:displayName", doc),
- new_data <- %{avatar: avatar || old_data.avatar, name: name || old_data.name, bio: bio || old_data.bio},
+ info <- Map.put(user.info, "banner", make_avatar_object(doc, "header") || user.info["banner"]),
+ new_data <- %{avatar: avatar || old_data.avatar, name: name || old_data.name, bio: bio || old_data.bio, info: info || old_data.info},
false <- new_data == old_data do
change = Ecto.Changeset.change(user, new_data)
Repo.update(change)
false <- new_data == old_data do
change = Ecto.Changeset.change(user, new_data)
Repo.update(change)
- def make_avatar_object(author_doc) do
- href = string_from_xpath("//author[1]/link[@rel=\"avatar\"]/@href", author_doc)
- type = string_from_xpath("//author[1]/link[@rel=\"avatar\"]/@type", author_doc)
+ def make_avatar_object(author_doc, rel \\ "avatar") do
+ href = string_from_xpath("//author[1]/link[@rel=\"#{rel}\"]/@href", author_doc)
+ type = string_from_xpath("//author[1]/link[@rel=\"#{rel}\"]/@type", author_doc)
- with {:ok, activities} <- fetch_activity_from_atom_url(url) do
- {:ok, activities}
- else
- _e -> with {:ok, activities} <- fetch_activity_from_html_url(url) do
- {:ok, activities}
- end
+ try do
+ with {:ok, activities} when length(activities) > 0 <- fetch_activity_from_atom_url(url) do
+ {:ok, activities}
+ else
+ _e -> with {:ok, activities} <- fetch_activity_from_html_url(url) do
+ {:ok, activities}
+ end
+ end
+ rescue
+ e ->
+ Logger.debug("Couldn't get #{url}: #{inspect(e)}")
+ {:error, "Couldn't get #{url}: #{inspect(e)}"}