diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/web/rich_media/parsers/meta_tags_parser.ex | 33 | 
1 files changed, 22 insertions, 11 deletions
| diff --git a/lib/pleroma/web/rich_media/parsers/meta_tags_parser.ex b/lib/pleroma/web/rich_media/parsers/meta_tags_parser.ex index 7da4e7561..82f1cce29 100644 --- a/lib/pleroma/web/rich_media/parsers/meta_tags_parser.ex +++ b/lib/pleroma/web/rich_media/parsers/meta_tags_parser.ex @@ -1,17 +1,19 @@  defmodule Pleroma.Web.RichMedia.Parsers.MetaTagsParser do    def parse(html, data, prefix, error_message, key_name, value_name \\ "content") do -    with elements = [_ | _] <- get_elements(html, key_name, prefix), -         page_title = get_page_title(html), -         meta_data = -           Enum.reduce(elements, data, fn el, acc -> -             attributes = normalize_attributes(el, prefix, key_name, value_name) - -             Map.merge(acc, attributes) -           end) -           |> Map.put_new(:title, page_title) do -      {:ok, meta_data} +    meta_data = +      html +      |> get_elements(key_name, prefix) +      |> Enum.reduce(data, fn el, acc -> +        attributes = normalize_attributes(el, prefix, key_name, value_name) + +        Map.merge(acc, attributes) +      end) +      |> maybe_put_title(html) + +    if Enum.empty?(meta_data) do +      {:error, error_message}      else -      _e -> {:error, error_message} +      {:ok, meta_data}      end    end @@ -30,6 +32,15 @@ defmodule Pleroma.Web.RichMedia.Parsers.MetaTagsParser do      %{String.to_atom(data[key_name]) => data[value_name]}    end +  defp maybe_put_title(%{title: _} = meta, _), do: meta + +  defp maybe_put_title(meta, html) do +    case get_page_title(html) do +      "" -> meta +      title -> Map.put_new(meta, :title, title) +    end +  end +    defp get_page_title(html) do      Floki.find(html, "title") |> Floki.text()    end | 
