Conversations: Return last dm for conversation, not last message.
This commit is contained in:
parent
448e93ce2c
commit
b7df7436c8
|
@ -162,10 +162,13 @@ def for_user_with_last_activity_id(user, params \\ %{}) do
|
||||||
for_user(user, params)
|
for_user(user, params)
|
||||||
|> Enum.map(fn participation ->
|
|> Enum.map(fn participation ->
|
||||||
activity_id =
|
activity_id =
|
||||||
ActivityPub.fetch_latest_activity_id_for_context(participation.conversation.ap_id, %{
|
ActivityPub.fetch_latest_direct_activity_id_for_context(
|
||||||
user: user,
|
participation.conversation.ap_id,
|
||||||
blocking_user: user
|
%{
|
||||||
})
|
user: user,
|
||||||
|
blocking_user: user
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
%{
|
%{
|
||||||
participation
|
participation
|
||||||
|
|
|
@ -210,7 +210,7 @@ def stream_out_participations(%Object{data: %{"context" => context}}, user) do
|
||||||
conversation = Repo.preload(conversation, :participations)
|
conversation = Repo.preload(conversation, :participations)
|
||||||
|
|
||||||
last_activity_id =
|
last_activity_id =
|
||||||
fetch_latest_activity_id_for_context(conversation.ap_id, %{
|
fetch_latest_direct_activity_id_for_context(conversation.ap_id, %{
|
||||||
user: user,
|
user: user,
|
||||||
blocking_user: user
|
blocking_user: user
|
||||||
})
|
})
|
||||||
|
@ -517,11 +517,12 @@ def fetch_activities_for_context(context, opts \\ %{}) do
|
||||||
|> Repo.all()
|
|> Repo.all()
|
||||||
end
|
end
|
||||||
|
|
||||||
@spec fetch_latest_activity_id_for_context(String.t(), keyword() | map()) ::
|
@spec fetch_latest_direct_activity_id_for_context(String.t(), keyword() | map()) ::
|
||||||
FlakeId.Ecto.CompatType.t() | nil
|
FlakeId.Ecto.CompatType.t() | nil
|
||||||
def fetch_latest_activity_id_for_context(context, opts \\ %{}) do
|
def fetch_latest_direct_activity_id_for_context(context, opts \\ %{}) do
|
||||||
context
|
context
|
||||||
|> fetch_activities_for_context_query(Map.merge(%{skip_preload: true}, opts))
|
|> fetch_activities_for_context_query(Map.merge(%{skip_preload: true}, opts))
|
||||||
|
|> restrict_visibility(%{visibility: "direct"})
|
||||||
|> limit(1)
|
|> limit(1)
|
||||||
|> select([a], a.id)
|
|> select([a], a.id)
|
||||||
|> Repo.one()
|
|> Repo.one()
|
||||||
|
|
|
@ -23,10 +23,13 @@ def render("participation.json", %{participation: participation, for: user}) do
|
||||||
|
|
||||||
last_activity_id =
|
last_activity_id =
|
||||||
with nil <- participation.last_activity_id do
|
with nil <- participation.last_activity_id do
|
||||||
ActivityPub.fetch_latest_activity_id_for_context(participation.conversation.ap_id, %{
|
ActivityPub.fetch_latest_direct_activity_id_for_context(
|
||||||
user: user,
|
participation.conversation.ap_id,
|
||||||
blocking_user: user
|
%{
|
||||||
})
|
user: user,
|
||||||
|
blocking_user: user
|
||||||
|
}
|
||||||
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
activity = Activity.get_by_id_with_object(last_activity_id)
|
activity = Activity.get_by_id_with_object(last_activity_id)
|
||||||
|
|
|
@ -15,8 +15,17 @@ test "represents a Mastodon Conversation entity" do
|
||||||
user = insert(:user)
|
user = insert(:user)
|
||||||
other_user = insert(:user)
|
other_user = insert(:user)
|
||||||
|
|
||||||
|
{:ok, parent} = CommonAPI.post(user, %{status: "parent"})
|
||||||
|
|
||||||
{:ok, activity} =
|
{:ok, activity} =
|
||||||
CommonAPI.post(user, %{status: "hey @#{other_user.nickname}", visibility: "direct"})
|
CommonAPI.post(user, %{
|
||||||
|
status: "hey @#{other_user.nickname}",
|
||||||
|
visibility: "direct",
|
||||||
|
in_reply_to_id: parent.id
|
||||||
|
})
|
||||||
|
|
||||||
|
{:ok, _reply_activity} =
|
||||||
|
CommonAPI.post(user, %{status: "hu", visibility: "public", in_reply_to_id: parent.id})
|
||||||
|
|
||||||
[participation] = Participation.for_user_with_last_activity_id(user)
|
[participation] = Participation.for_user_with_last_activity_id(user)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue