refactor, status view updating, error handling
authorKaren Konou <konoukaren@gmail.com>
Sun, 10 Feb 2019 08:31:20 +0000 (09:31 +0100)
committerKaren Konou <konoukaren@gmail.com>
Sun, 10 Feb 2019 09:42:30 +0000 (10:42 +0100)
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
lib/pleroma/web/mastodon_api/views/status_view.ex
lib/pleroma/web/thread_mute.ex

index a93f4297b45f359b1c0b3b49f626fc8d2be6f0ff..073e0a5ea2d67fca482b054c568de7f73bd267c1 100644 (file)
@@ -450,6 +450,11 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
       conn
       |> put_view(StatusView)
       |> try_render("status.json", %{activity: activity, for: user, as: :activity})
+    else
+      {:error, reason} ->
+        conn
+        |> put_resp_content_type("application/json")
+        |> send_resp(:bad_request, Jason.encode!(%{"error" => reason}))
     end
   end
 
index a227d742d8a162e86e5bc6c8d140ba4bbe58297f..d6176a68afc7c36975a458912f9b7d2b0637cd38 100644 (file)
@@ -160,7 +160,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
       reblogged: present?(repeated),
       favourited: present?(favorited),
       bookmarked: present?(bookmarked),
-      muted: false,
+      muted: Pleroma.Web.ThreadMute.muted?(user, activity),
       pinned: pinned?(activity, user),
       sensitive: sensitive,
       spoiler_text: object["summary"] || "",
index b5bff86bebc616e327611c88e91cadb92b6775a1..695ea2512d04652ed49b9196f9239d9ae1b04ef0 100644 (file)
@@ -20,40 +20,42 @@ defmodule Pleroma.Web.ThreadMute do
     |> Ecto.Changeset.unique_constraint(:user_id, name: :unique_index)
   end
 
+  def query(user, context) do
+    user_id = Pleroma.FlakeId.from_string(user.id)
+
+    ThreadMute
+    |> Ecto.Query.where(user_id: ^user_id)
+    |> Ecto.Query.where(context: ^context)
+  end
+
   def add_mute(user, id) do
     activity = Activity.get_by_id(id)
-    context = activity.data["context"]
-    changeset = changeset(%Pleroma.Web.ThreadMute{}, %{user_id: user.id, context: context})
 
-    case Repo.insert(changeset) do
-      {:ok, _} -> {:ok, activity}
+    with changeset <-
+           changeset(%ThreadMute{}, %{user_id: user.id, context: activity.data["context"]}),
+         {:ok, _} <- Repo.insert(changeset) do
+      {:ok, activity}
+    else
       {:error, _} -> {:error, "conversation is already muted"}
     end
   end
 
   def remove_mute(user, id) do
-    user_id = Pleroma.FlakeId.from_string(user.id)
     activity = Activity.get_by_id(id)
-    context = activity.data["context"]
 
-    Ecto.Query.from(m in ThreadMute, where: m.user_id == ^user_id and m.context == ^context)
+    query(user, activity.data["context"])
     |> Repo.delete_all()
 
     {:ok, activity}
   end
 
-  def muted?(user, activity) do
-    user_id = Pleroma.FlakeId.from_string(user.id)
-    context = activity.data["context"]
+  def muted?(%{id: nil} = _user, _), do: false
 
-    result =
-      Ecto.Query.from(m in ThreadMute,
-        where: m.user_id == ^user_id and m.context == ^context
-      )
-      |> Repo.all()
-
-    case result do
-      [] -> false
+  def muted?(user, activity) do
+    with query <- query(user, activity.data["context"]),
+         [] <- Repo.all(query) do
+      false
+    else
       _ -> true
     end
   end