Add conversation id to activities.
[akkoma] / lib / pleroma / web / twitter_api / twitter_api.ex
index f777ba848a40642e6f99259178d69281f8450bd2..7bbab14c5665852c8e143bde11d28df470f1c152 100644 (file)
@@ -34,11 +34,15 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
                |> put_in(["object", "context"], context)
                |> put_in(["object", "inReplyTo"], inReplyTo.data["object"]["id"])
                |> put_in(["object", "inReplyToStatusId"], inReplyToId)
+               |> put_in(["statusnet_conversation_id"], inReplyTo.data["statusnet_conversation_id"])
+               |> put_in(["object", "statusnet_conversation_id"], inReplyTo.data["statusnet_conversation_id"])
                else _e ->
                  activity
                end
 
-    ActivityPub.insert(activity)
+    with {:ok, activity} <- ActivityPub.insert(activity) do
+      add_conversation_id(activity)
+    end
   end
 
   def fetch_friend_statuses(user, opts \\ %{}) do
@@ -67,6 +71,19 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
     end
   end
 
+  defp add_conversation_id(activity) do
+    if is_integer(activity.data["statusnet_conversation_id"]) do
+      {:ok, activity}
+    else
+      data = activity.data
+      |> put_in(["object", "statusnet_conversation_id"], activity.id)
+      |> put_in(["statusnet_conversation_id"], activity.id)
+
+      changeset = Ecto.Changeset.change(activity, data: data)
+      Repo.update(changeset)
+    end
+  end
+
   defp activities_to_statuses(activities, opts) do
     Enum.map(activities, fn(activity) ->
       activity_to_status(activity, opts)