Add conversation id to activities.
authorRoger Braun <roger@rogerbraun.net>
Tue, 28 Mar 2017 12:40:09 +0000 (14:40 +0200)
committerRoger Braun <roger@rogerbraun.net>
Tue, 28 Mar 2017 12:40:09 +0000 (14:40 +0200)
This is for compatibility with the TwAPI.

lib/pleroma/web/twitter_api/representers/user_representer.ex
lib/pleroma/web/twitter_api/twitter_api.ex
test/web/twitter_api/twitter_api_test.exs

index 8875d26ff8ca6c316fba207565f184a259e99597..d8f98488e7cd817f33b09ce0b139ecc0d6d0d180 100644 (file)
@@ -1,8 +1,9 @@
 defmodule Pleroma.Web.TwitterAPI.Representers.UserRepresenter do
   use Pleroma.Web.TwitterAPI.Representers.BaseRepresenter
+
   alias Pleroma.User
 
-  def to_map(user, opts \\ %{}) do
+  def to_map(user, opts) do
 
     image = "https://placehold.it/48x48"
 
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)
index 2d289ffcb3b1acc2625ada672e3100d62b453924..e7c180a9c641b27e446aaa42bdef16d7cd2c014e 100644 (file)
@@ -19,9 +19,11 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
     assert Enum.member?(get_in(activity.data, ["to"]), User.ap_followers(user))
     assert Enum.member?(get_in(activity.data, ["to"]), "https://www.w3.org/ns/activitystreams#Public")
 
-    # Add a context
+    # Add a context + 'statusnet_conversation_id'
     assert is_binary(get_in(activity.data, ["context"]))
     assert is_binary(get_in(activity.data, ["object", "context"]))
+    assert get_in(activity.data, ["object", "statusnet_conversation_id"]) == activity.id
+    assert get_in(activity.data, ["statusnet_conversation_id"]) == activity.id
   end
 
   test "create a status that is a reply" do
@@ -41,7 +43,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
 
     assert get_in(reply.data, ["context"]) == get_in(activity.data, ["context"])
     assert get_in(reply.data, ["object", "context"]) == get_in(activity.data, ["object", "context"])
-    assert get_in(reply.data, ["object", "context"]) == get_in(activity.data, ["object", "context"])
+    assert get_in(reply.data, ["statusnet_conversation_id"]) == get_in(activity.data, ["statusnet_conversation_id"])
+    assert get_in(reply.data, ["object", "statusnet_conversation_id"]) == get_in(activity.data, ["object", "statusnet_conversation_id"])
     assert get_in(reply.data, ["object", "inReplyTo"]) == get_in(activity.data, ["object", "id"])
     assert get_in(reply.data, ["object", "inReplyToStatusId"]) == activity.id
   end