Merge branch 'fix/domain-unblocked-reblogs' into 'develop'
[akkoma] / lib / pleroma / conversation / participation.ex
index f200c1df56698495f49cac149daeb95a527f238d..2a11f9069940d221aec41bb39d6f758fa4dd71aa 100644 (file)
@@ -22,15 +22,17 @@ defmodule Pleroma.Conversation.Participation do
 
   def creation_cng(struct, params) do
     struct
-    |> cast(params, [:user_id, :conversation_id])
+    |> cast(params, [:user_id, :conversation_id, :read])
     |> validate_required([:user_id, :conversation_id])
   end
 
-  def create_for_user_and_conversation(user, conversation) do
+  def create_for_user_and_conversation(user, conversation, opts \\ []) do
+    read = !!opts[:read]
+
     %__MODULE__{}
-    |> creation_cng(%{user_id: user.id, conversation_id: conversation.id})
+    |> creation_cng(%{user_id: user.id, conversation_id: conversation.id, read: read})
     |> Repo.insert(
-      on_conflict: [set: [read: false, updated_at: NaiveDateTime.utc_now()]],
+      on_conflict: [set: [read: read, updated_at: NaiveDateTime.utc_now()]],
       returning: true,
       conflict_target: [:user_id, :conversation_id]
     )
@@ -65,22 +67,13 @@ defmodule Pleroma.Conversation.Participation do
 
   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, %{
+      activity_id =
+        ActivityPub.fetch_latest_activity_id_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