refactor, status view updating, error handling
This commit is contained in:
parent
6a150de3bd
commit
cc21fc5f53
|
@ -450,6 +450,11 @@ def mute_conversation(%{assigns: %{user: user}} = conn, %{"id" => id}) do
|
||||||
conn
|
conn
|
||||||
|> put_view(StatusView)
|
|> put_view(StatusView)
|
||||||
|> try_render("status.json", %{activity: activity, for: user, as: :activity})
|
|> 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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -160,7 +160,7 @@ def render("status.json", %{activity: %{data: %{"object" => object}} = activity}
|
||||||
reblogged: present?(repeated),
|
reblogged: present?(repeated),
|
||||||
favourited: present?(favorited),
|
favourited: present?(favorited),
|
||||||
bookmarked: present?(bookmarked),
|
bookmarked: present?(bookmarked),
|
||||||
muted: false,
|
muted: Pleroma.Web.ThreadMute.muted?(user, activity),
|
||||||
pinned: pinned?(activity, user),
|
pinned: pinned?(activity, user),
|
||||||
sensitive: sensitive,
|
sensitive: sensitive,
|
||||||
spoiler_text: object["summary"] || "",
|
spoiler_text: object["summary"] || "",
|
||||||
|
|
|
@ -20,40 +20,42 @@ def changeset(mute, params \\ %{}) do
|
||||||
|> Ecto.Changeset.unique_constraint(:user_id, name: :unique_index)
|
|> Ecto.Changeset.unique_constraint(:user_id, name: :unique_index)
|
||||||
end
|
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
|
def add_mute(user, id) do
|
||||||
activity = Activity.get_by_id(id)
|
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
|
with changeset <-
|
||||||
{:ok, _} -> {:ok, activity}
|
changeset(%ThreadMute{}, %{user_id: user.id, context: activity.data["context"]}),
|
||||||
|
{:ok, _} <- Repo.insert(changeset) do
|
||||||
|
{:ok, activity}
|
||||||
|
else
|
||||||
{:error, _} -> {:error, "conversation is already muted"}
|
{:error, _} -> {:error, "conversation is already muted"}
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def remove_mute(user, id) do
|
def remove_mute(user, id) do
|
||||||
user_id = Pleroma.FlakeId.from_string(user.id)
|
|
||||||
activity = Activity.get_by_id(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()
|
|> Repo.delete_all()
|
||||||
|
|
||||||
{:ok, activity}
|
{:ok, activity}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def muted?(%{id: nil} = _user, _), do: false
|
||||||
|
|
||||||
def muted?(user, activity) do
|
def muted?(user, activity) do
|
||||||
user_id = Pleroma.FlakeId.from_string(user.id)
|
with query <- query(user, activity.data["context"]),
|
||||||
context = activity.data["context"]
|
[] <- Repo.all(query) do
|
||||||
|
false
|
||||||
result =
|
else
|
||||||
Ecto.Query.from(m in ThreadMute,
|
|
||||||
where: m.user_id == ^user_id and m.context == ^context
|
|
||||||
)
|
|
||||||
|> Repo.all()
|
|
||||||
|
|
||||||
case result do
|
|
||||||
[] -> false
|
|
||||||
_ -> true
|
_ -> true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue