WIP notification settings

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2021-06-01 18:08:03 +02:00
parent 6adbbc6a1d
commit 58bffc5c66
34 changed files with 1127 additions and 136 deletions

View File

@@ -43,8 +43,15 @@ defmodule Mobilizon.Web.Email.Activity do
@spec chunk_activities(list()) :: map()
defp chunk_activities(activities) do
activities
|> Enum.reduce(%{}, fn %Activity{group: %Actor{id: group_id}} = activity, acc ->
Map.update(acc, group_id, [activity], fn activities -> activities ++ [activity] end)
|> Enum.reduce(%{}, fn activity, acc ->
case activity do
%Activity{group: %Actor{id: group_id}} ->
Map.update(acc, group_id, [activity], fn activities -> activities ++ [activity] end)
# Not a group activity
%Activity{} ->
Map.update(acc, nil, [activity], fn activities -> activities ++ [activity] end)
end
end)
|> Enum.map(fn {key, value} ->
{key, Enum.sort(value, &(&1.inserted_at <= &2.inserted_at))}
@@ -57,20 +64,34 @@ defmodule Mobilizon.Web.Email.Activity do
# so it will probably not catch much things
@spec filter_duplicates(list()) :: list()
defp filter_duplicates(activities) do
Enum.uniq_by(activities, fn %Activity{
author: %Actor{id: author_id},
group: %Actor{id: group_id},
type: type,
subject: subject,
subject_params: subject_params
} ->
%{
author_id: author_id,
group_id: group_id,
type: type,
subject: subject,
subject_params: subject_params
}
Enum.uniq_by(activities, fn activity ->
case activity do
%Activity{
author: %Actor{id: author_id},
group: %Actor{id: group_id},
type: type,
subject: subject,
subject_params: subject_params
} ->
%{
author_id: author_id,
group_id: group_id,
type: type,
subject: subject,
subject_params: subject_params
}
%Activity{
type: type,
subject: subject,
subject_params: subject_params
} ->
%{
type: type,
subject: subject,
subject_params: subject_params
}
end
end)
end
end