aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorHaelwenn (lanodan) Monnier <contact@hacktivis.me>2018-12-19 17:21:35 +0100
committerHaelwenn (lanodan) Monnier <contact@hacktivis.me>2019-01-26 04:45:36 +0100
commitf9cae0d04fe4609f85d800351566080b5a4f34b7 (patch)
tree0cfdd28fca93355b8fad7c4e16dd6ffd86f543e8 /lib
parent6383fa3a5d1a269315001b445dafc73a059dd8cb (diff)
downloadpleroma-f9cae0d04fe4609f85d800351566080b5a4f34b7.tar.gz
[WIP,MastoAPI] Multi-tag timelines
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/activity_pub/activity_pub.ex10
-rw-r--r--lib/pleroma/web/mastodon_api/mastodon_api_controller.ex18
2 files changed, 24 insertions, 4 deletions
diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex
index 6b4682e35..e0d020fab 100644
--- a/lib/pleroma/web/activity_pub/activity_pub.ex
+++ b/lib/pleroma/web/activity_pub/activity_pub.ex
@@ -426,10 +426,18 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
defp restrict_since(query, _), do: query
+ defp restrict_tag(query, %{"tag" => tag, "tag_reject" => tag_reject}) when tag_reject != [] do
+ from(
+ activity in query,
+ where: fragment("? <@ (? #> '{\"object\",\"tag\"}')", ^tag, activity.data),
+ where: fragment("? @> (? #> '{\"object\",\"tag\"}')", ^tag_reject, activity.data)
+ )
+ end
+
defp restrict_tag(query, %{"tag" => tag}) do
from(
activity in query,
- where: fragment("? <@ (? #> '{\"object\",\"tag\"}')", ^tag, activity.data)
+ where: fragment("? && jsonb_array_elements_text((? #> '{\"object\",\"tag\"}'))", ^tag, activity.data)
)
end
diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
index f4736fcb5..6811f827e 100644
--- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
+++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
@@ -540,15 +540,27 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
def hashtag_timeline(%{assigns: %{user: user}} = conn, params) do
local_only = params["local"] in [true, "True", "true", "1"]
- params =
+ tags =
+ ([params["tag"]] ++ (params["all"] || []) ++ (params["any"] || []))
+ |> Enum.uniq()
+ |> Enum.filter(& &1)
+ |> Enum.map(&String.downcase(&1))
+
+ tag_reject =
+ params["none"] ||
+ []
+ |> Enum.map(&String.downcase(&1))
+
+ query_params =
params
|> Map.put("type", "Create")
|> Map.put("local_only", local_only)
|> Map.put("blocking_user", user)
- |> Map.put("tag", String.downcase(params["tag"]))
+ |> Map.put("tag", tags)
+ |> Map.put("tag_reject", tag_reject)
activities =
- ActivityPub.fetch_public_activities(params)
+ ActivityPub.fetch_public_activities(query_params)
|> Enum.reverse()
conn