diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/activity.ex | 12 | ||||
| -rw-r--r-- | lib/pleroma/web/activity_pub/activity_pub.ex | 8 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/views/status_view.ex | 8 | ||||
| -rw-r--r-- | lib/pleroma/web/twitter_api/views/activity_view.ex | 8 | 
4 files changed, 34 insertions, 2 deletions
| diff --git a/lib/pleroma/activity.ex b/lib/pleroma/activity.ex index 4e54b15ba..99589590c 100644 --- a/lib/pleroma/activity.ex +++ b/lib/pleroma/activity.ex @@ -10,6 +10,7 @@ defmodule Pleroma.Activity do    alias Pleroma.Notification    alias Pleroma.Object    alias Pleroma.Repo +  alias Pleroma.ThreadMute    alias Pleroma.User    import Ecto.Changeset @@ -37,6 +38,7 @@ defmodule Pleroma.Activity do      field(:local, :boolean, default: true)      field(:actor, :string)      field(:recipients, {:array, :string}, default: []) +    field(:thread_muted?, :boolean, virtual: true)      # This is a fake relation, do not use outside of with_preloaded_bookmark/get_bookmark      has_one(:bookmark, Bookmark)      has_many(:notifications, Notification, on_delete: :delete_all) @@ -90,6 +92,16 @@ defmodule Pleroma.Activity do    def with_preloaded_bookmark(query, _), do: query +  def with_set_thread_muted_field(query, %User{} = user) do +    from([a] in query, +      left_join: tm in ThreadMute, +      on: tm.user_id == ^user.id and tm.context == fragment("?->>'context'", a.data), +      select: %Activity{a | thread_muted?: not is_nil(tm.id)} +    ) +  end + +  def with_set_thread_muted_field(query, _), do: query +    def get_by_ap_id(ap_id) do      Repo.one(        from( diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex index 5c3156978..3d9679ec0 100644 --- a/lib/pleroma/web/activity_pub/activity_pub.ex +++ b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -834,6 +834,13 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do      |> Activity.with_preloaded_bookmark(opts["user"])    end +  defp maybe_set_thread_muted_field(query, %{"skip_preload" => true}), do: query + +  defp maybe_set_thread_muted_field(query, opts) do +    query +    |> Activity.with_set_thread_muted_field(opts["user"]) +  end +    defp maybe_order(query, %{order: :desc}) do      query      |> order_by(desc: :id) @@ -852,6 +859,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do      base_query      |> maybe_preload_objects(opts)      |> maybe_preload_bookmarks(opts) +    |> maybe_set_thread_muted_field(opts)      |> maybe_order(opts)      |> restrict_recipients(recipients, opts["user"])      |> restrict_tag(opts) diff --git a/lib/pleroma/web/mastodon_api/views/status_view.ex b/lib/pleroma/web/mastodon_api/views/status_view.ex index c93d915e5..e55f9b96e 100644 --- a/lib/pleroma/web/mastodon_api/views/status_view.ex +++ b/lib/pleroma/web/mastodon_api/views/status_view.ex @@ -157,6 +157,12 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do      bookmarked = Activity.get_bookmark(activity, opts[:for]) != nil +    thread_muted? = +      case activity.thread_muted? do +        thread_muted? when is_boolean(thread_muted?) -> thread_muted? +        nil -> CommonAPI.thread_muted?(user, activity) +      end +      attachment_data = object.data["attachment"] || []      attachments = render_many(attachment_data, StatusView, "attachment.json", as: :attachment) @@ -228,7 +234,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do        reblogged: reblogged?(activity, opts[:for]),        favourited: present?(favorited),        bookmarked: present?(bookmarked), -      muted: CommonAPI.thread_muted?(user, activity) || User.mutes?(opts[:for], user), +      muted: thread_muted? || User.mutes?(opts[:for], user),        pinned: pinned?(activity, user),        sensitive: sensitive,        spoiler_text: summary_html, diff --git a/lib/pleroma/web/twitter_api/views/activity_view.ex b/lib/pleroma/web/twitter_api/views/activity_view.ex index 44bcafe0e..e84af84dc 100644 --- a/lib/pleroma/web/twitter_api/views/activity_view.ex +++ b/lib/pleroma/web/twitter_api/views/activity_view.ex @@ -284,6 +284,12 @@ defmodule Pleroma.Web.TwitterAPI.ActivityView do          Pleroma.Web.RichMedia.Helpers.fetch_data_for_activity(activity)        ) +    thread_muted? = +      case activity.thread_muted? do +        thread_muted? when is_boolean(thread_muted?) -> thread_muted? +        nil -> CommonAPI.thread_muted?(user, activity) +      end +      %{        "id" => activity.id,        "uri" => object.data["id"], @@ -314,7 +320,7 @@ defmodule Pleroma.Web.TwitterAPI.ActivityView do        "summary" => summary,        "summary_html" => summary |> Formatter.emojify(object.data["emoji"]),        "card" => card, -      "muted" => CommonAPI.thread_muted?(user, activity) || User.mutes?(opts[:for], user) +      "muted" => thread_muted? || User.mutes?(opts[:for], user)      }    end | 
