1 defmodule Pleroma.Web.Metadata do
4 @parsers Pleroma.Config.get([:metadata, :providers], [])
5 def get_cached_tags(%{activity: activity, user: user} = params) do
6 # We don't need to use the both activity and a user since the object can't change it's content
7 key = "#{:erlang.term_to_binary(user)}#{activity.data["id"]}"
9 Cachex.fetch!(:metadata_cache, key, fn _key ->
10 {:commit, build_tags(params)}
14 def get_cached_tags(%{user: user} = params) do
15 # I am unsure how well ETS works with big keys
16 key = :erlang.term_to_binary(user)
18 Cachex.fetch!(:metadata_cache, key, fn _key ->
19 {:commit, build_tags(params)}
23 def build_tags(params) do
24 Enum.reduce(@parsers, "", fn parser, acc ->
27 |> parser.build_tags()
28 |> Enum.map(&to_tag/1)
29 |> Enum.map(&HTML.safe_to_string/1)
37 with {name, attrs, _content = []} <- data do
38 HTML.Tag.tag(name, attrs)
40 {name, attrs, content} ->
41 HTML.Tag.content_tag(name, content, attrs)
44 raise ArgumentError, message: "make_tag invalid args"