X-Git-Url: https://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fhtml.ex;h=43e9145be6503f9cd85fbd879303b4e8b32112ca;hb=0e0ece251af9f85d80968df5b43fe49b85f35434;hp=11513106eb643769c72701865459cd9eb70a22dc;hpb=b9a87b1baa0650bfb4b699054304daae585a0e9a;p=akkoma
diff --git a/lib/pleroma/html.ex b/lib/pleroma/html.ex
index 11513106e..43e9145be 100644
--- a/lib/pleroma/html.ex
+++ b/lib/pleroma/html.ex
@@ -1,5 +1,5 @@
# Pleroma: A lightweight social networking server
-# Copyright © 2017-2019 Pleroma Authors
+# Copyright © 2017-2020 Pleroma Authors
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.HTML do
@@ -100,19 +100,27 @@ defmodule Pleroma.HTML do
end)
end
- def extract_first_external_url(_, nil), do: {:error, "No content"}
+ def extract_first_external_url_from_object(%{data: %{"content" => content}} = object)
+ when is_binary(content) do
+ unless object.data["fake"] do
+ key = "URL|#{object.id}"
- def extract_first_external_url(object, content) do
- key = "URL|#{object.id}"
+ Cachex.fetch!(:scrubber_cache, key, fn _key ->
+ {:commit, {:ok, extract_first_external_url(content)}}
+ end)
+ else
+ {:ok, extract_first_external_url(content)}
+ end
+ end
- Cachex.fetch!(:scrubber_cache, key, fn _key ->
- result =
- content
- |> Floki.filter_out("a.mention,a.hashtag,a[rel~=\"tag\"]")
- |> Floki.attribute("a", "href")
- |> Enum.at(0)
+ def extract_first_external_url_from_object(_), do: {:error, :no_content}
- {:commit, {:ok, result}}
- end)
+ def extract_first_external_url(content) do
+ content
+ |> Floki.parse_fragment!()
+ |> Floki.find("a:not(.mention,.hashtag,.attachment,[rel~=\"tag\"])")
+ |> Enum.take(1)
+ |> Floki.attribute("href")
+ |> Enum.at(0)
end
end