it works!!
authorKaren Konou <konoukaren@gmail.com>
Sat, 9 Feb 2019 16:47:57 +0000 (17:47 +0100)
committerKaren Konou <konoukaren@gmail.com>
Sat, 9 Feb 2019 16:47:57 +0000 (17:47 +0100)
lib/pleroma/notification.ex
lib/pleroma/web/thread_mute.ex
test/web/thread_mute_test.exs

index 2364d36da0a4a03f43018b17b9e9d114bd821389..d05708e41eb2aaf988e73d067a276ece87b26af8 100644 (file)
@@ -6,6 +6,7 @@ defmodule Pleroma.Notification do
   use Ecto.Schema
   alias Pleroma.{User, Activity, Notification, Repo}
   alias Pleroma.Web.CommonAPI.Utils
+  alias Pleroma.Web.ThreadMute
   import Ecto.Query
 
   schema "notifications" do
@@ -112,6 +113,7 @@ defmodule Pleroma.Notification 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 ->
index 3a950f474a2b65cbe5b95c7e005169a1275f1f58..146de0d804a1464863791acbca57182523a6a42a 100644 (file)
@@ -4,6 +4,7 @@
 
 defmodule Pleroma.Web.ThreadMute do
   use Ecto.Schema
+  alias Pleroma.Web.ThreadMute
   alias Pleroma.{Activity, Repo, User}
   require Ecto.Query
 
@@ -13,16 +14,37 @@ defmodule Pleroma.Web.ThreadMute do
   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
index 75277ef62a412c7999ffcd5ab8a0de2bfb345a2e..212cae8608ca26fe886302346c13188a93f2df51 100644 (file)
@@ -10,31 +10,32 @@ defmodule Pleroma.Web.ThreadMuteTest do
 
   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