use Ecto.Schema
alias Pleroma.{User, Activity, Notification, Repo}
alias Pleroma.Web.CommonAPI.Utils
+ alias Pleroma.Web.ThreadMute
import Ecto.Query
schema "notifications" do
# TODO move to sql, too.
def create_notification(%Activity{} = activity, %User{} = user) do
unless User.blocks?(user, %{ap_id: activity.data["actor"]}) or
+ ThreadMute.muted?(user, activity) or
user.ap_id == activity.data["actor"] or
(activity.data["type"] == "Follow" and
Enum.any?(Notification.for_user(user), fn notif ->
defmodule Pleroma.Web.ThreadMute do
use Ecto.Schema
+ alias Pleroma.Web.ThreadMute
alias Pleroma.{Activity, Repo, User}
require Ecto.Query
end
def add_mute(user, id) do
- %{data: %{"context" => context}} = Activity.get_by_id(id)
+ activity = Activity.get_by_id(id)
+ context = activity.data["context"]
mute = %Pleroma.Web.ThreadMute{user_id: user.id, context: context}
Repo.insert(mute)
+ {:ok, activity}
end
def remove_mute(user, id) do
user_id = Pleroma.FlakeId.from_string(user.id)
- %{data: %{"context" => context}} = Activity.get_by_id(id)
+ activity = Activity.get_by_id(id)
+ context = activity.data["context"]
- Ecto.Query.from(m in "thread_mutes", where: m.user_id == ^user_id and m.context == ^context)
+ Ecto.Query.from(m in ThreadMute, where: m.user_id == ^user_id and m.context == ^context)
|> Repo.delete_all()
+
+ {:ok, activity}
+ end
+
+ def muted?(user, activity) do
+ user_id = Pleroma.FlakeId.from_string(user.id)
+ context = activity.data["context"]
+
+ result =
+ Ecto.Query.from(m in ThreadMute,
+ where: m.user_id == ^user_id and m.context == ^context
+ )
+ |> Repo.all()
+
+ case result do
+ [] -> false
+ _ -> true
+ end
end
end
describe "mute tests" do
setup do
- user = insert(:user, %{id: "1"})
+ user = insert(:user)
- activity =
- insert(:note_activity, %{
- data: %{
- "context" => "http://localhost:4000/contexts/361ca23e-ffa7-4773-b981-a355a18dc592"
- }
- })
+ activity = insert(:note_activity)
[user: user, activity: activity]
end
test "add mute", %{user: user, activity: activity} do
id = activity.id
- {:ok, mute} = add_mute(user, id)
-
- assert mute.user_id == "1"
- assert mute.context == "http://localhost:4000/contexts/361ca23e-ffa7-4773-b981-a355a18dc592"
+ {:ok, _activity} = add_mute(user, id)
end
test "remove mute", %{user: user, activity: activity} do
id = activity.id
add_mute(user, id)
- {1, nil} = remove_mute(user, id)
+ {:ok, _activity} = remove_mute(user, id)
+ end
+
+ test "check mute", %{user: user, activity: activity} do
+ id = activity.id
+
+ add_mute(user, id)
+ assert muted?(user, activity)
+ remove_mute(user, id)
+ refute muted?(user, activity)
end
end
end