Add `direct_conversation_id` to web push payload
authorEgor Kislitsyn <egor@kislitsyn.com>
Tue, 26 Nov 2019 12:53:43 +0000 (19:53 +0700)
committerEgor Kislitsyn <egor@kislitsyn.com>
Tue, 26 Nov 2019 12:53:43 +0000 (19:53 +0700)
lib/pleroma/activity.ex
lib/pleroma/web/mastodon_api/views/status_view.ex
lib/pleroma/web/push/impl.ex

index 7e283df32c01aeae7ac4eb981a670aef66e09da0..cd7a5aae9aba85848274103c9de1e95f757a78b5 100644 (file)
@@ -303,4 +303,17 @@ defmodule Pleroma.Activity do
   end
 
   defdelegate search(user, query, options \\ []), to: Pleroma.Activity.Search
+
+  def direct_conversation_id(activity, for_user) do
+    alias Pleroma.Conversation.Participation
+
+    with %{data: %{"context" => context}} when is_binary(context) <- activity,
+         %Pleroma.Conversation{} = conversation <- Pleroma.Conversation.get_for_ap_id(context),
+         %Participation{id: participation_id} <-
+           Participation.for_user_and_conversation(for_user, conversation) do
+      participation_id
+    else
+      _ -> nil
+    end
+  end
 end
index baff5415113a7d8230dce1d40d23a5dc16511b4c..a0257dfa6a0ee1705edf57ecb549e5270476aeba 100644 (file)
@@ -9,8 +9,6 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
 
   alias Pleroma.Activity
   alias Pleroma.ActivityExpiration
-  alias Pleroma.Conversation
-  alias Pleroma.Conversation.Participation
   alias Pleroma.HTML
   alias Pleroma.Object
   alias Pleroma.Repo
@@ -245,12 +243,8 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
     direct_conversation_id =
       with {_, nil} <- {:direct_conversation_id, opts[:direct_conversation_id]},
            {_, true} <- {:include_id, opts[:with_direct_conversation_id]},
-           {_, %User{} = for_user} <- {:for_user, opts[:for]},
-           %{data: %{"context" => context}} when is_binary(context) <- activity,
-           %Conversation{} = conversation <- Conversation.get_for_ap_id(context),
-           %Participation{id: participation_id} <-
-             Participation.for_user_and_conversation(for_user, conversation) do
-        participation_id
+           {_, %User{} = for_user} <- {:for_user, opts[:for]} do
+        Activity.direct_conversation_id(activity, for_user)
       else
         {:direct_conversation_id, participation_id} when is_integer(participation_id) ->
           participation_id
index dd445e8bfe2d0877ebbe850b304b5ef6952f2979..b01ae0f8053a3463004bff387798f1ddad1613fb 100644 (file)
@@ -33,6 +33,8 @@ defmodule Pleroma.Web.Push.Impl do
     gcm_api_key = Application.get_env(:web_push_encryption, :gcm_api_key)
     avatar_url = User.avatar_url(actor)
     object = Object.normalize(activity)
+    user = User.get_cached_by_id(user_id)
+    direct_conversation_id = Activity.direct_conversation_id(activity, user)
 
     for subscription <- fetch_subsriptions(user_id),
         get_in(subscription.data, ["alerts", type]) do
@@ -45,7 +47,9 @@ defmodule Pleroma.Web.Push.Impl do
         icon: avatar_url,
         preferred_locale: "en",
         pleroma: %{
-          activity_id: activity_id
+          activity_id: activity_id,
+          direct_conversation_id: direct_conversation_id,
+          account: user.ap_id
         }
       }
       |> Jason.encode!()