common api: move context functions from twitterapi
[akkoma] / lib / pleroma / web / common_api / utils.ex
index 20123854d5b922b0fc276bfc100cad1488d47344..fcdfea8e1eb77f45c4f81d145190b5bdf01e479b 100644 (file)
@@ -6,14 +6,14 @@ defmodule Pleroma.Web.CommonAPI.Utils do
   alias Calendar.Strftime
   alias Comeonin.Pbkdf2
   alias Pleroma.Activity
+  alias Pleroma.Config
   alias Pleroma.Formatter
   alias Pleroma.Object
   alias Pleroma.Repo
   alias Pleroma.User
-  alias Pleroma.Config
+  alias Pleroma.Web.ActivityPub.Utils
   alias Pleroma.Web.Endpoint
   alias Pleroma.Web.MediaProxy
-  alias Pleroma.Web.ActivityPub.Utils
 
   # This is a hack for twidere.
   def get_by_id_or_ap_id(id) do
@@ -186,9 +186,9 @@ defmodule Pleroma.Web.CommonAPI.Utils do
     options = Keyword.put(options, :mentions_escape, true)
 
     text
-    |> Formatter.html_escape("text/html")
     |> Formatter.linkify(options)
     |> (fn {text, mentions, tags} -> {Earmark.as_html!(text), mentions, tags} end).()
+    |> Formatter.html_escape("text/html")
   end
 
   def make_note_data(
@@ -344,4 +344,33 @@ defmodule Pleroma.Web.CommonAPI.Utils do
   end
 
   def get_report_statuses(_, _), do: {:ok, nil}
+
+  # DEPRECATED mostly, context objects are now created at insertion time.
+  def context_to_conversation_id(context) do
+    with %Object{id: id} <- Object.get_cached_by_ap_id(context) do
+      id
+    else
+      _e ->
+        changeset = Object.context_mapping(context)
+
+        case Repo.insert(changeset) do
+          {:ok, %{id: id}} ->
+            id
+
+          # This should be solved by an upsert, but it seems ecto
+          # has problems accessing the constraint inside the jsonb.
+          {:error, _} ->
+            Object.get_cached_by_ap_id(context).id
+        end
+    end
+  end
+
+  def conversation_id_to_context(id) do
+    with %Object{data: %{"id" => context}} <- Repo.get(Object, id) do
+      context
+    else
+      _e ->
+        {:error, "No such conversation"}
+    end
+  end
 end