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
alias Pleroma.Activity
alias Pleroma.ActivityExpiration
- alias Pleroma.Conversation
- alias Pleroma.Conversation.Participation
alias Pleroma.HTML
alias Pleroma.Object
alias Pleroma.Repo
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
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
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!()