Commit cc21fc5f authored by Karen Konou's avatar Karen Konou

refactor, status view updating, error handling

parent 6a150de3
Pipeline #7357 passed with stages
in 3 minutes and 24 seconds
......@@ -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
......
......@@ -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"] || "",
......
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment