aboutsummaryrefslogtreecommitdiff
path: root/lib
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 /lib
parent20d9b9076051d2dea60919ad85aaf88154629dc4 (diff)
downloadpleroma-cf353514feff50c2ccb9a8079ce5e695eb7f8cb6.tar.gz
Participations: Add last activity.
Diffstat (limited to 'lib')
-rw-r--r--lib/conversation/participation.ex27
1 files changed, 27 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