Browse Source

Merge branch 'develop' into feature/ci-release-build

tags/v1.1.4
rinpatch 5 years ago
parent
commit
bb6a421afc
5 changed files with 59 additions and 10 deletions
  1. +0
    -1
      lib/pleroma/application.ex
  2. +25
    -8
      lib/pleroma/web/rich_media/parsers/meta_tags_parser.ex
  3. +0
    -1
      mix.exs
  4. +12
    -0
      test/fixtures/rich_media/ogp-missing-title.html
  5. +22
    -0
      test/web/rich_media/parser_test.exs

+ 0
- 1
lib/pleroma/application.ex View File

@@ -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()


+ 25
- 8
lib/pleroma/web/rich_media/parsers/meta_tags_parser.ex View File

@@ -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

+ 0
- 1
mix.exs View File

@@ -136,7 +136,6 @@ defmodule Pleroma.Mixfile do
{:prometheus_plugs, "~> 1.1"},
{:prometheus_phoenix, "~> 1.2"},
{:prometheus_ecto, "~> 1.4"},
{:prometheus_process_collector, "~> 1.4"},
{:recon, github: "ferd/recon", tag: "2.4.0"},
{:quack, "~> 0.1.1"},
{:benchee, "~> 1.0"},


+ 12
- 0
test/fixtures/rich_media/ogp-missing-title.html View File

@@ -0,0 +1,12 @@
<html prefix="og: http://ogp.me/ns#">

<head>
<title>The Rock (1996)</title>
<meta property="og:type" content="video.movie" />
<meta property="og:url" content="http://www.imdb.com/title/tt0117500/" />
<meta property="og:image" content="http://ia.media-imdb.com/images/rock.jpg" />
<meta property="og:description"
content="Directed by Michael Bay. With Sean Connery, Nicolas Cage, Ed Harris, John Spencer.">
</head>

</html>

+ 22
- 0
test/web/rich_media/parser_test.exs View File

@@ -11,6 +11,15 @@ defmodule Pleroma.Web.RichMedia.ParserTest do

%{
method: :get,
url: "http://example.com/ogp-missing-title"
} ->
%Tesla.Env{
status: 200,
body: File.read!("test/fixtures/rich_media/ogp-missing-title.html")
}

%{
method: :get,
url: "http://example.com/twitter-card"
} ->
%Tesla.Env{status: 200, body: File.read!("test/fixtures/rich_media/twitter_card.html")}
@@ -51,6 +60,19 @@ defmodule Pleroma.Web.RichMedia.ParserTest do
}}
end

test "falls back to <title> when ogp:title is missing" do
assert Pleroma.Web.RichMedia.Parser.parse("http://example.com/ogp-missing-title") ==
{:ok,
%{
image: "http://ia.media-imdb.com/images/rock.jpg",
title: "The Rock (1996)",
description:
"Directed by Michael Bay. With Sean Connery, Nicolas Cage, Ed Harris, John Spencer.",
type: "video.movie",
url: "http://www.imdb.com/title/tt0117500/"
}}
end

test "parses twitter card" do
assert Pleroma.Web.RichMedia.Parser.parse("http://example.com/twitter-card") ==
{:ok,


Loading…
Cancel
Save