projects
/
akkoma
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
in dev, allow dev FE
[akkoma]
/
lib
/
pleroma
/
conversation
/
participation.ex
diff --git
a/lib/pleroma/conversation/participation.ex
b/lib/pleroma/conversation/participation.ex
index aafe572803f0b99f848c146f50a931c39b4eb447..e0a3af28b9b62fdeaa2b0a31bf2ac663578b3eb0 100644
(file)
--- a/
lib/pleroma/conversation/participation.ex
+++ b/
lib/pleroma/conversation/participation.ex
@@
-1,5
+1,5
@@
# Pleroma: A lightweight social networking server
# Pleroma: A lightweight social networking server
-# Copyright © 2017-20
19
Pleroma Authors <https://pleroma.social/>
+# Copyright © 2017-20
21
Pleroma Authors <https://pleroma.social/>
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Conversation.Participation do
# SPDX-License-Identifier: AGPL-3.0-only
defmodule Pleroma.Conversation.Participation do
@@
-63,19
+63,10
@@
defmodule Pleroma.Conversation.Participation do
end
end
end
end
- def mark_as_read(participation) do
+ def mark_as_read(
%__MODULE__{} =
participation) do
participation
participation
- |>
read_cng(%{read: true}
)
+ |>
change(read: true
)
|> Repo.update()
|> Repo.update()
- |> case do
- {:ok, participation} ->
- participation = Repo.preload(participation, :user)
- User.set_unread_conversation_count(participation.user)
- {:ok, participation}
-
- error ->
- error
- end
end
def mark_all_as_read(%User{local: true} = user, %User{} = target_user) do
end
def mark_all_as_read(%User{local: true} = user, %User{} = target_user) do
@@
-91,7
+82,6
@@
defmodule Pleroma.Conversation.Participation do
|> update([p], set: [read: true])
|> Repo.update_all([])
|> update([p], set: [read: true])
|> Repo.update_all([])
- {:ok, user} = User.set_unread_conversation_count(user)
{:ok, user, []}
end
{:ok, user, []}
end
@@
-106,7
+96,6
@@
defmodule Pleroma.Conversation.Participation do
|> select([p], p)
|> Repo.update_all([])
|> select([p], p)
|> Repo.update_all([])
- {:ok, user} = User.set_unread_conversation_count(user)
{:ok, user, participations}
end
{:ok, user, participations}
end
@@
-126,24
+115,19
@@
defmodule Pleroma.Conversation.Participation do
|> Pleroma.Pagination.fetch_paginated(params)
end
|> Pleroma.Pagination.fetch_paginated(params)
end
- def restrict_recipients(query, user, %{
"recipients" =>
user_ids}) do
- user_ids =
+ def restrict_recipients(query, user, %{
recipients:
user_ids}) do
+ user_
binary_
ids =
[user.id | user_ids]
|> Enum.uniq()
[user.id | user_ids]
|> Enum.uniq()
- |> Enum.reduce([], fn user_id, acc ->
- case FlakeId.Ecto.CompatType.dump(user_id) do
- {:ok, user_id} -> [user_id | acc]
- _ -> acc
- end
- end)
+ |> User.binary_id()
conversation_subquery =
__MODULE__
|> group_by([p], p.conversation_id)
|> having(
[p],
conversation_subquery =
__MODULE__
|> group_by([p], p.conversation_id)
|> having(
[p],
- count(p.user_id) == ^length(user_ids) and
- fragment("array_agg(?) @> ?", p.user_id, ^user_ids)
+ count(p.user_id) == ^length(user_
binary_
ids) and
+ fragment("array_agg(?) @> ?", p.user_id, ^user_
binary_
ids)
)
|> select([p], %{id: p.conversation_id})
)
|> select([p], %{id: p.conversation_id})
@@
-165,17
+149,20
@@
defmodule Pleroma.Conversation.Participation do
for_user(user, params)
|> Enum.map(fn participation ->
activity_id =
for_user(user, params)
|> Enum.map(fn participation ->
activity_id =
- ActivityPub.fetch_latest_activity_id_for_context(participation.conversation.ap_id, %{
- "user" => user,
- "blocking_user" => user
- })
+ ActivityPub.fetch_latest_direct_activity_id_for_context(
+ participation.conversation.ap_id,
+ %{
+ user: user,
+ blocking_user: user
+ }
+ )
%{
participation
| last_activity_id: activity_id
}
end)
%{
participation
| last_activity_id: activity_id
}
end)
- |> Enum.
filter(& &1.last_activity_id
)
+ |> Enum.
reject(&is_nil(&1.last_activity_id)
)
end
def get(_, _ \\ [])
end
def get(_, _ \\ [])
@@
-220,6
+207,12
@@
defmodule Pleroma.Conversation.Participation do
{:ok, Repo.preload(participation, :recipients, force: true)}
end
{:ok, Repo.preload(participation, :recipients, force: true)}
end
+ @spec unread_count(User.t()) :: integer()
+ def unread_count(%User{id: user_id}) do
+ from(q in __MODULE__, where: q.user_id == ^user_id and q.read == false)
+ |> Repo.aggregate(:count, :id)
+ end
+
def unread_conversation_count_for_user(user) do
from(p in __MODULE__,
where: p.user_id == ^user.id,
def unread_conversation_count_for_user(user) do
from(p in __MODULE__,
where: p.user_id == ^user.id,
@@
-227,4
+220,8
@@
defmodule Pleroma.Conversation.Participation do
select: %{count: count(p.id)}
)
end
select: %{count: count(p.id)}
)
end
+
+ def delete(%__MODULE__{} = participation) do
+ Repo.delete(participation)
+ end
end
end