aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKaren Konou <konoukaren@gmail.com>2019-03-11 16:57:54 +0100
committerKaren Konou <konoukaren@gmail.com>2019-03-15 14:18:53 +0100
commit15b21d1983fad08e71f6fd7adffbcfd6f2d8cba1 (patch)
treef621dfe7e40315d3d4a4524d27e883f9247bd472
parentaa71139e4a9913cc5baf3f5f567bcef4ae59a8c0 (diff)
downloadpleroma-15b21d1983fad08e71f6fd7adffbcfd6f2d8cba1.tar.gz
refactor filtering mechanism
-rw-r--r--lib/pleroma/web/activity_pub/activity_pub.ex21
-rw-r--r--lib/pleroma/web/mastodon_api/mastodon_api_controller.ex2
-rw-r--r--lib/pleroma/web/streamer.ex2
3 files changed, 17 insertions, 8 deletions
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex
index 779ee139b..5d9ce7fd7 100644
--- a/lib/pleroma/web/activity_pub/activity_pub.ex
+++ b/lib/pleroma/web/activity_pub/activity_pub.ex
@@ -679,6 +679,18 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
defp restrict_pinned(query, _), do: query
+ defp restrict_muted_reblogs(query, %{"muting_user" => %User{info: info}}) do
+ muted_reblogs = info.muted_reblogs || []
+
+ from(
+ activity in query,
+ where: fragment("not ?->>'type' = 'Announce'", activity.data),
+ where: fragment("not ? = ANY(?)", activity.actor, ^muted_reblogs)
+ )
+ end
+
+ defp restrict_muted_reblogs(query, _), do: query
+
def fetch_activities_query(recipients, opts \\ %{}) do
base_query =
from(
@@ -706,6 +718,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
|> restrict_replies(opts)
|> restrict_reblogs(opts)
|> restrict_pinned(opts)
+ |> restrict_muted_reblogs(opts)
end
def fetch_activities(recipients, opts \\ %{}) do
@@ -951,17 +964,11 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
entire_thread_visible_for_user?(activity, user)
end
- # filter out muted threads
- def contain_muted_boosts(%Activity{data: %{"type" => "Announce"}} = activity, %User{} = user) do
- id = User.get_by_ap_id(activity.actor).id
- id not in user.info.muted_reblogs
- end
-
def contain_muted_boosts(%Activity{} = _activity, %User{} = _user), do: true
# do post-processing on a specific activity
def contain_activity(%Activity{} = activity, %User{} = user) do
- contain_broken_threads(activity, user) and contain_muted_boosts(activity, user)
+ contain_broken_threads(activity, user)
end
# do post-processing on a timeline
diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
index 570bf0c0f..68b7d8b49 100644
--- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
+++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
@@ -735,7 +735,7 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
false -> CommonAPI.hide_reblogs(follower, id)
end
- followed = Repo.get(User, id)
+ followed = User.get_cached_by_id(id)
conn
|> put_view(AccountView)
diff --git a/lib/pleroma/web/streamer.ex b/lib/pleroma/web/streamer.ex
index a04ee1b6e..b87db941b 100644
--- a/lib/pleroma/web/streamer.ex
+++ b/lib/pleroma/web/streamer.ex
@@ -200,10 +200,12 @@ defmodule Pleroma.Web.Streamer do
user = User.get_cached_by_ap_id(socket.assigns[:user].ap_id)
blocks = user.info.blocks || []
mutes = user.info.mutes || []
+ reblog_mutes = user.info.reblog_mutes || []
parent = Object.normalize(item.data["object"])
unless is_nil(parent) or item.actor in blocks or item.actor in mutes or
+ item.actor in reblog_mutes or
not ActivityPub.contain_activity(item, user) or parent.data["actor"] in blocks or
parent.data["actor"] in mutes do
send(socket.transport_pid, {:text, represent_update(item, user)})