aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2019-04-10 17:28:02 +0200
committerlain <lain@soykaf.club>2019-04-10 17:28:02 +0200
commitcf353514feff50c2ccb9a8079ce5e695eb7f8cb6 (patch)
treeb59aa3e60efb53373bd02339f69dcee2f88caf8f
parent20d9b9076051d2dea60919ad85aaf88154629dc4 (diff)
downloadpleroma-cf353514feff50c2ccb9a8079ce5e695eb7f8cb6.tar.gz
Participations: Add last activity.
-rw-r--r--lib/conversation/participation.ex27
-rw-r--r--test/conversation/participation_test.exs7
2 files changed, 34 insertions, 0 deletions
diff --git a/lib/conversation/participation.ex b/lib/conversation/participation.ex
index 23e6409f1..4183af8a7 100644
--- a/lib/conversation/participation.ex
+++ b/lib/conversation/participation.ex
@@ -7,6 +7,7 @@ defmodule Pleroma.Conversation.Participation do
alias Pleroma.User
alias Pleroma.Conversation
alias Pleroma.Repo
+ alias Pleroma.Web.ActivityPub.ActivityPub
import Ecto.Changeset
import Ecto.Query
@@ -14,6 +15,7 @@ defmodule Pleroma.Conversation.Participation do
belongs_to(:user, User, type: Pleroma.FlakeId)
belongs_to(:conversation, Conversation)
field(:read, :boolean, default: false)
+ field(:last_activity_id, Pleroma.FlakeId, virtual: true)
timestamps()
end
@@ -59,4 +61,29 @@ defmodule Pleroma.Conversation.Participation do
)
|> Pleroma.Pagination.fetch_paginated(params)
end
+
+ def for_user_with_last_activity_id(user, params \\ %{}) do
+ for_user(user, params)
+ |> Repo.preload(:conversation)
+ |> Enum.map(fn participation ->
+ # TODO: Don't load all those activities, just get the most recent
+ # Involves splitting up the query.
+ activities =
+ ActivityPub.fetch_activities_for_context(participation.conversation.ap_id, %{
+ "user" => user,
+ "blocking_user" => user
+ })
+
+ activity_id =
+ case activities do
+ [activity | _] -> activity.id
+ _ -> nil
+ end
+
+ %{
+ participation
+ | last_activity_id: activity_id
+ }
+ end)
+ end
end
diff --git a/test/conversation/participation_test.exs b/test/conversation/participation_test.exs
index c52b4ed88..5791fa0db 100644
--- a/test/conversation/participation_test.exs
+++ b/test/conversation/participation_test.exs
@@ -80,5 +80,12 @@ defmodule Pleroma.Conversation.ParticipationTest do
|> Repo.preload(:conversation)
assert participation_one.conversation.ap_id == activity_three.data["object"]["context"]
+
+ # With last_activity_id
+ assert [participation_one] =
+ Participation.for_user_with_last_activity_id(user, %{limit: 1})
+ |> Repo.preload(:conversation)
+
+ assert participation_one.last_activity_id == activity_three.id
end
end