Add attachment link to posts.
[akkoma] / lib / pleroma / web / twitter_api / twitter_api.ex
index 85fac914626b547a651b6bdb1922b0531f7505cc..7656d4d33bdefcb10c76690b7c972b2329743968 100644 (file)
@@ -32,11 +32,23 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
 
   def get_replied_to_activity(_), do: nil
 
+  def add_attachments(text, attachments) do
+    attachment_text = Enum.map(attachments, fn
+      (%{"url" => [%{"href" => href} | _]}) ->
+        "<a href='#{href}'>#{href}</a>"
+      _ -> ""
+    end)
+    Enum.join([text | attachment_text], "<br>")
+    end
+
   def create_status(user = %User{}, data = %{"status" => status}) do
     attachments = attachments_from_ids(data["media_ids"])
     context = ActivityPub.generate_context_id
     mentions = parse_mentions(status)
-    content_html = format_input(status, mentions)
+    content_html = status
+    |> format_input(mentions)
+    |> add_attachments(attachments)
+
     to = to_for_user_and_mentions(user, mentions)
     date = make_date()
 
@@ -84,6 +96,12 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
   end
 
   def fetch_public_statuses(user, opts \\ %{}) do
+    opts = Map.put(opts, "local_only", true)
+    ActivityPub.fetch_public_activities(opts)
+    |> activities_to_statuses(%{for: user})
+  end
+
+  def fetch_public_and_external_statuses(user, opts \\ %{}) do
     ActivityPub.fetch_public_activities(opts)
     |> activities_to_statuses(%{for: user})
   end
@@ -316,16 +334,13 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
   end
 
   def context_to_conversation_id(context) do
-    {:ok, id} = Repo.transaction(fn ->
-      with %Object{id: id} <- Object.get_by_ap_id(context) do
-        id
-      else _e ->
-        changeset = Object.context_mapping(context)
-        {:ok, %{id: id}} = Repo.insert(changeset)
-        id
-      end
-    end)
-    id
+    with %Object{id: id} <- Object.get_cached_by_ap_id(context) do
+      id
+    else _e ->
+      changeset = Object.context_mapping(context)
+      {:ok, %{id: id}} = Repo.insert(changeset)
+      id
+    end
   end
 
   def conversation_id_to_context(id) do