Add a fallback function to handle generic params, just in case
[akkoma] / lib / pleroma / web / metadata.ex
index cf2b86aaa9a0790ca0e4fd232756c91abb29d945..23f152e068ca5cffd29e83f4a7c5769a0060203e 100644 (file)
@@ -2,6 +2,32 @@ defmodule Pleroma.Web.Metadata do
   alias Phoenix.HTML
 
   @parsers Pleroma.Config.get([:metadata, :providers], [])
+  def get_cached_tags(%{activity: activity, user: user} = params) do
+    # We don't need to use the both activity and a user since the object can't change it's content
+    key = "#{:erlang.term_to_binary(user)}#{activity.data["id"]}"
+
+    Cachex.fetch!(:metadata_cache, key, fn _key ->
+      {:commit, build_tags(params)}
+    end)
+  end
+
+  def get_cached_tags(%{user: user} = params) do
+    # I am unsure how well ETS works with big keys
+    key = :erlang.term_to_binary(user)
+
+    Cachex.fetch!(:metadata_cache, key, fn _key ->
+      {:commit, build_tags(params)}
+    end)
+  end
+
+  def get_cached_tags(params) do
+    key = :erlang.term_to_binary(params)
+
+    Cachex.fetch!(:metadata_cache, key, fn _key ->
+      {:commit, build_tags(params)}
+    end)
+  end
+
   def build_tags(params) do
     Enum.reduce(@parsers, "", fn parser, acc ->
       rendered_html =