a5a706b8fabfe2b8628d99a6bbced03d57c7d0d6
[akkoma] / lib / pleroma / web / metadata.ex
1 defmodule Pleroma.Web.Metadata do
2 alias Phoenix.HTML
3
4 @parsers Pleroma.Config.get([:metadata, :providers], [])
5
6 def get_cached_tags(params) do
7 # I am unsure how well ETS works with big keys
8 key = :erlang.term_to_binary(params)
9
10 Cachex.fetch!(:metadata_cache, key, fn _key ->
11 {:commit, build_tags(params)}
12 end)
13 end
14
15 def build_tags(params) do
16 Enum.reduce(@parsers, "", fn parser, acc ->
17 rendered_html =
18 params
19 |> parser.build_tags()
20 |> Enum.map(&to_tag/1)
21 |> Enum.map(&HTML.safe_to_string/1)
22 |> Enum.join()
23
24 acc <> rendered_html
25 end)
26 end
27
28 def to_tag(data) do
29 with {name, attrs, _content = []} <- data do
30 HTML.Tag.tag(name, attrs)
31 else
32 {name, attrs, content} ->
33 HTML.Tag.content_tag(name, content, attrs)
34
35 _ ->
36 raise ArgumentError, message: "make_tag invalid args"
37 end
38 end
39 end