logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma
commit: fc85c9f086cd5dd73effa28cb68fb245a554fa98
parent: b0363e80556b4c8271ab69d2680166ca844f660c
Author: Roger Braun <rbraun@Bobble.local>
Date:   Thu, 14 Sep 2017 13:22:09 +0200

Add tag timelines.

Diffstat:

Mlib/pleroma/web/activity_pub/activity_pub.ex7+++++++
Mlib/pleroma/web/mastodon_api/mastodon_api_controller.ex12++++++++++++
Mlib/pleroma/web/router.ex1+
Mtest/web/mastodon_api/mastodon_api_controller_test.exs15++++++++++++++-
4 files changed, 34 insertions(+), 1 deletion(-)

diff --git a/lib/pleroma/web/activity_pub/activity_pub.ex b/lib/pleroma/web/activity_pub/activity_pub.ex @@ -111,6 +111,12 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do end defp restrict_since(query, _), do: query + defp restrict_tag(query, %{"tag" => tag}) do + from activity in query, + where: fragment("? <@ (? #> '{\"object\",\"tag\"}')", ^tag, activity.data) + end + defp restrict_tag(query, _), do: query + defp restrict_recipients(query, recipients) do Enum.reduce(recipients, query, fn (recipient, q) -> map = %{ to: [recipient] } @@ -148,6 +154,7 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do base_query |> restrict_recipients(recipients) + |> restrict_tag(opts) |> restrict_since(opts) |> restrict_local(opts) |> restrict_max(opts) diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -230,6 +230,18 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do end end + def hashtag_timeline(%{assigns: %{user: user}} = conn, params) do + params = params + |> Map.put("type", "Create") + |> Map.put("local_only", !!params["local"]) + + activities = ActivityPub.fetch_public_activities(params) + |> Enum.reverse + + conn + |> render(StatusView, "index.json", %{activities: activities, for: user, as: :activity}) + end + def empty_array(conn, _) do Logger.debug("Unimplemented, returning an empty array") json(conn, []) diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex @@ -65,6 +65,7 @@ defmodule Pleroma.Web.Router do post "/apps", MastodonAPIController, :create_app get "/timelines/public", MastodonAPIController, :public_timeline + get "/timelines/tag/:tag", MastodonAPIController, :hashtag_timeline get "/statuses/:id", MastodonAPIController, :get_status get "/statuses/:id/context", MastodonAPIController, :get_context diff --git a/test/web/mastodon_api/mastodon_api_controller_test.exs b/test/web/mastodon_api/mastodon_api_controller_test.exs @@ -186,7 +186,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do test "returns the relationships for the current user", %{conn: conn} do user = insert(:user) other_user = insert(:user) - {:ok, user} = User.follow(user, other_user) conn = conn @@ -227,4 +226,18 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do assert media["type"] == "image" end + + test "hashtag timeline", %{conn: conn} do + following = insert(:user) + + {:ok, activity} = TwitterAPI.create_status(following, %{"status" => "test #2hu"}) + {:ok, [_activity]} = OStatus.fetch_activity_from_url("https://shitposter.club/notice/2827873") + + conn = conn + |> get("/api/v1/timelines/tag/2hu") + + assert [%{"id" => id}] = json_response(conn, 200) + + assert id == activity.id + end end