logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

thread_mute.ex (1835B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.ThreadMute do
  5. use Ecto.Schema
  6. alias Pleroma.Repo
  7. alias Pleroma.ThreadMute
  8. alias Pleroma.User
  9. import Ecto.Changeset
  10. import Ecto.Query
  11. schema "thread_mutes" do
  12. belongs_to(:user, User, type: FlakeId.Ecto.CompatType)
  13. field(:context, :string)
  14. end
  15. def changeset(mute, params \\ %{}) do
  16. mute
  17. |> cast(params, [:user_id, :context])
  18. |> foreign_key_constraint(:user_id)
  19. |> unique_constraint(:user_id, name: :unique_index)
  20. end
  21. def query(user_id, context) do
  22. user_binary_id = User.binary_id(user_id)
  23. ThreadMute
  24. |> where(user_id: ^user_binary_id)
  25. |> where(context: ^context)
  26. end
  27. def muters_query(context) do
  28. ThreadMute
  29. |> join(:inner, [tm], u in assoc(tm, :user))
  30. |> where([tm], tm.context == ^context)
  31. |> select([tm, u], u.ap_id)
  32. end
  33. def muter_ap_ids(context, ap_ids \\ nil)
  34. # Note: applies to fake activities (ActivityPub.Utils.get_notified_from_object/1 etc.)
  35. def muter_ap_ids(context, _ap_ids) when is_nil(context), do: []
  36. def muter_ap_ids(context, ap_ids) do
  37. context
  38. |> muters_query()
  39. |> maybe_filter_on_ap_id(ap_ids)
  40. |> Repo.all()
  41. end
  42. defp maybe_filter_on_ap_id(query, ap_ids) when is_list(ap_ids) do
  43. where(query, [tm, u], u.ap_id in ^ap_ids)
  44. end
  45. defp maybe_filter_on_ap_id(query, _ap_ids), do: query
  46. def add_mute(user_id, context) do
  47. %ThreadMute{}
  48. |> changeset(%{user_id: user_id, context: context})
  49. |> Repo.insert()
  50. end
  51. def remove_mute(user_id, context) do
  52. query(user_id, context)
  53. |> Repo.delete_all()
  54. end
  55. def exists?(user_id, context) do
  56. query(user_id, context)
  57. |> Repo.exists?()
  58. end
  59. end