diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/application.ex | 1 | ||||
| -rw-r--r-- | lib/pleroma/web/rich_media/parsers/meta_tags_parser.ex | 33 | 
2 files changed, 25 insertions, 9 deletions
diff --git a/lib/pleroma/application.ex b/lib/pleroma/application.ex index 5627d20af..9c93c7a35 100644 --- a/lib/pleroma/application.ex +++ b/lib/pleroma/application.ex @@ -174,7 +174,6 @@ defmodule Pleroma.Application do        Pleroma.Repo.Instrumenter.setup()      end -    Prometheus.Registry.register_collector(:prometheus_process_collector)      Pleroma.Web.Endpoint.MetricsExporter.setup()      Pleroma.Web.Endpoint.PipelineInstrumenter.setup()      Pleroma.Web.Endpoint.Instrumenter.setup() 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 4a7c5eae0..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,15 +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), -         meta_data = -           Enum.reduce(elements, data, fn el, acc -> -             attributes = normalize_attributes(el, prefix, key_name, value_name) +    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) do -      {:ok, meta_data} +        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 @@ -27,4 +31,17 @@ 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  end  | 
