diff options
author | Alex Gleason <alex@alexgleason.me> | 2020-11-14 19:48:47 -0600 |
---|---|---|
committer | Alex Gleason <alex@alexgleason.me> | 2020-11-14 19:48:47 -0600 |
commit | 9546c1444c2c8c4abc9bcb35b6a8ff360ddc83af (patch) | |
tree | cc6b9add45f34878b1ce053b6a408e059768fa6a /lib/pleroma/web/common_api.ex | |
parent | dc38dc847207e4724265fbeb111d0a236b75f93f (diff) | |
parent | 28da36975dc325bb577ee81fb791fbdc7ec3e7e2 (diff) | |
download | pleroma-9546c1444c2c8c4abc9bcb35b6a8ff360ddc83af.tar.gz |
Merge remote-tracking branch 'upstream/develop' into registration-workflow
Diffstat (limited to 'lib/pleroma/web/common_api.ex')
-rw-r--r-- | lib/pleroma/web/common_api.ex | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/lib/pleroma/web/common_api.ex b/lib/pleroma/web/common_api.ex index 60a50b027..0ab1b115d 100644 --- a/lib/pleroma/web/common_api.ex +++ b/lib/pleroma/web/common_api.ex @@ -45,7 +45,8 @@ defmodule Pleroma.Web.CommonAPI do {_, {:ok, %Activity{} = activity, _meta}} <- {:common_pipeline, Pipeline.common_pipeline(create_activity_data, - local: true + local: true, + idempotency_key: opts[:idempotency_key] )} do {:ok, activity} else @@ -453,20 +454,46 @@ defmodule Pleroma.Web.CommonAPI do end end - def add_mute(user, activity) do + def add_mute(user, activity, params \\ %{}) do + expires_in = Map.get(params, :expires_in, 0) + with {:ok, _} <- ThreadMute.add_mute(user.id, activity.data["context"]), _ <- Pleroma.Notification.mark_context_as_read(user, activity.data["context"]) do + if expires_in > 0 do + Pleroma.Workers.MuteExpireWorker.enqueue( + "unmute_conversation", + %{"user_id" => user.id, "activity_id" => activity.id}, + schedule_in: expires_in + ) + end + {:ok, activity} else {:error, _} -> {:error, dgettext("errors", "conversation is already muted")} end end - def remove_mute(user, activity) do + def remove_mute(%User{} = user, %Activity{} = activity) do ThreadMute.remove_mute(user.id, activity.data["context"]) {:ok, activity} end + def remove_mute(user_id, activity_id) do + with {:user, %User{} = user} <- {:user, User.get_by_id(user_id)}, + {:activity, %Activity{} = activity} <- {:activity, Activity.get_by_id(activity_id)} do + remove_mute(user, activity) + else + {what, result} = error -> + Logger.warn( + "CommonAPI.remove_mute/2 failed. #{what}: #{result}, user_id: #{user_id}, activity_id: #{ + activity_id + }" + ) + + {:error, error} + end + end + def thread_muted?(%User{id: user_id}, %{data: %{"context" => context}}) when is_binary(context) do ThreadMute.exists?(user_id, context) |