refactor, status view updating, error handling
This commit is contained in:
parent
6a150de3bd
commit
cc21fc5f53
3 changed files with 26 additions and 19 deletions
|
@ -450,6 +450,11 @@ def mute_conversation(%{assigns: %{user: user}} = conn, %{"id" => id}) 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 @@ def render("status.json", %{activity: %{data: %{"object" => object}} = activity}
|
|||
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 @@ def changeset(mute, params \\ %{}) 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?(%{id: nil} = _user, _), do: false
|
||||
|
||||
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
|
||||
with query <- query(user, activity.data["context"]),
|
||||
[] <- Repo.all(query) do
|
||||
false
|
||||
else
|
||||
_ -> true
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue