diff options
author | rinpatch <rinpatch@sdf.org> | 2020-04-08 15:51:56 +0000 |
---|---|---|
committer | rinpatch <rinpatch@sdf.org> | 2020-04-08 15:51:56 +0000 |
commit | 3b15a0eecc62f79465620a697f12b576ed87b0fc (patch) | |
tree | cbfc275ab8b5093a1dafacbbd830c7e6f1a19886 /lib/pleroma/thread_mute.ex | |
parent | bb49d8f5a0dbbad65a8f65a28cc2d0847b518067 (diff) | |
parent | d9f36965f6412e476f723b4cf0278d8fd76d325c (diff) | |
download | pleroma-2.0.2.tar.gz |
Merge branch 'release/2.0.2' into 'stable'v2.0.2
2.0.2 Release
See merge request pleroma/pleroma!2336
Diffstat (limited to 'lib/pleroma/thread_mute.ex')
-rw-r--r-- | lib/pleroma/thread_mute.ex | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/lib/pleroma/thread_mute.ex b/lib/pleroma/thread_mute.ex index cc815430a..a7ea13891 100644 --- a/lib/pleroma/thread_mute.ex +++ b/lib/pleroma/thread_mute.ex @@ -9,7 +9,8 @@ defmodule Pleroma.ThreadMute do alias Pleroma.ThreadMute alias Pleroma.User - require Ecto.Query + import Ecto.Changeset + import Ecto.Query schema "thread_mutes" do belongs_to(:user, User, type: FlakeId.Ecto.CompatType) @@ -18,19 +19,44 @@ defmodule Pleroma.ThreadMute do def changeset(mute, params \\ %{}) do mute - |> Ecto.Changeset.cast(params, [:user_id, :context]) - |> Ecto.Changeset.foreign_key_constraint(:user_id) - |> Ecto.Changeset.unique_constraint(:user_id, name: :unique_index) + |> cast(params, [:user_id, :context]) + |> foreign_key_constraint(:user_id) + |> unique_constraint(:user_id, name: :unique_index) end def query(user_id, context) do {:ok, user_id} = FlakeId.Ecto.CompatType.dump(user_id) ThreadMute - |> Ecto.Query.where(user_id: ^user_id) - |> Ecto.Query.where(context: ^context) + |> where(user_id: ^user_id) + |> where(context: ^context) end + def muters_query(context) do + ThreadMute + |> join(:inner, [tm], u in assoc(tm, :user)) + |> where([tm], tm.context == ^context) + |> select([tm, u], u.ap_id) + end + + def muter_ap_ids(context, ap_ids \\ nil) + + # Note: applies to fake activities (ActivityPub.Utils.get_notified_from_object/1 etc.) + def muter_ap_ids(context, _ap_ids) when is_nil(context), do: [] + + def muter_ap_ids(context, ap_ids) do + context + |> muters_query() + |> maybe_filter_on_ap_id(ap_ids) + |> Repo.all() + end + + defp maybe_filter_on_ap_id(query, ap_ids) when is_list(ap_ids) do + where(query, [tm, u], u.ap_id in ^ap_ids) + end + + defp maybe_filter_on_ap_id(query, _ap_ids), do: query + def add_mute(user_id, context) do %ThreadMute{} |> changeset(%{user_id: user_id, context: context}) |