projects
/
akkoma
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'develop' of https://git.pleroma.social/pleroma/pleroma into develop
[akkoma]
/
lib
/
pleroma
/
conversation
/
participation.ex
diff --git
a/lib/pleroma/conversation/participation.ex
b/lib/pleroma/conversation/participation.ex
index ea5b9fe17ba0526647d78caf03f2f167fa130720..e17f49e58da622ec8db706bc2dfad9ca0a2a8f5b 100644
(file)
--- a/
lib/pleroma/conversation/participation.ex
+++ b/
lib/pleroma/conversation/participation.ex
@@
-13,10
+13,10
@@
defmodule Pleroma.Conversation.Participation do
import Ecto.Query
schema "conversation_participations" do
import Ecto.Query
schema "conversation_participations" do
- belongs_to(:user, User, type:
Pleroma.FlakeId
)
+ belongs_to(:user, User, type:
FlakeId.Ecto.CompatType
)
belongs_to(:conversation, Conversation)
field(:read, :boolean, default: false)
belongs_to(:conversation, Conversation)
field(:read, :boolean, default: false)
- field(:last_activity_id,
Pleroma.FlakeId
, virtual: true)
+ field(:last_activity_id,
FlakeId.Ecto.CompatType
, virtual: true)
has_many(:recipient_ships, RecipientShip)
has_many(:recipients, through: [:recipient_ships, :user])
has_many(:recipient_ships, RecipientShip)
has_many(:recipients, through: [:recipient_ships, :user])
@@
-48,10
+48,25
@@
defmodule Pleroma.Conversation.Participation do
|> validate_required([:read])
end
|> validate_required([:read])
end
+ def mark_as_read(%User{} = user, %Conversation{} = conversation) do
+ with %__MODULE__{} = participation <- for_user_and_conversation(user, conversation) do
+ mark_as_read(participation)
+ end
+ end
+
def mark_as_read(participation) do
participation
|> read_cng(%{read: true})
|> Repo.update()
def mark_as_read(participation) do
participation
|> read_cng(%{read: true})
|> 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_as_unread(participation) do
end
def mark_as_unread(participation) do
@@
-135,4
+150,12
@@
defmodule Pleroma.Conversation.Participation do
{:ok, Repo.preload(participation, :recipients, force: true)}
end
{:ok, Repo.preload(participation, :recipients, force: true)}
end
+
+ def unread_conversation_count_for_user(user) do
+ from(p in __MODULE__,
+ where: p.user_id == ^user.id,
+ where: not p.read,
+ select: %{count: count(p.id)}
+ )
+ end
end
end