From 2e32012d5714e3e0d168937eaa99b03684c9b548 Mon Sep 17 00:00:00 2001 From: eal Date: Fri, 9 Mar 2018 16:54:10 +0200 Subject: [PATCH] Add next and previous headers to user pages and tag timelines. --- .../mastodon_api/mastodon_api_controller.ex | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex index fbf8c1915..0d84308e7 100644 --- a/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex +++ b/lib/pleroma/web/mastodon_api/mastodon_api_controller.ex @@ -135,14 +135,23 @@ def custom_emojis(conn, _params) do json conn, mastodon_emoji end - defp add_link_headers(conn, method, activities) do + defp add_link_headers(conn, method, activities, param \\ false) do last = List.last(activities) first = List.first(activities) if last do min = last.id max = first.id - next_url = mastodon_api_url(Pleroma.Web.Endpoint, method, max_id: min) - prev_url = mastodon_api_url(Pleroma.Web.Endpoint, method, since_id: max) + {next_url, prev_url} = if param do + { + mastodon_api_url(Pleroma.Web.Endpoint, method, param, max_id: min), + mastodon_api_url(Pleroma.Web.Endpoint, method, param, since_id: max) + } + else + { + mastodon_api_url(Pleroma.Web.Endpoint, method, max_id: min), + mastodon_api_url(Pleroma.Web.Endpoint, method, since_id: max) + } + end conn |> put_resp_header("link", "<#{next_url}>; rel=\"next\", <#{prev_url}>; rel=\"prev\"") else @@ -178,7 +187,6 @@ def public_timeline(%{assigns: %{user: user}} = conn, params) do |> render(StatusView, "index.json", %{activities: activities, for: user, as: :activity}) end - # TODO: Link headers def user_statuses(%{assigns: %{user: user}} = conn, params) do with %User{ap_id: ap_id} <- Repo.get(User, params["id"]) do params = params @@ -189,7 +197,9 @@ def user_statuses(%{assigns: %{user: user}} = conn, params) do activities = ActivityPub.fetch_public_activities(params) |> Enum.reverse - render conn, StatusView, "index.json", %{activities: activities, for: user, as: :activity} + conn + |> add_link_headers(:user_statuses, activities, params["id"]) + |> render(StatusView, "index.json", %{activities: activities, for: user, as: :activity}) end end @@ -333,7 +343,6 @@ def reblogged_by(conn, %{"id" => id}) do end end - # TODO: Link headers def hashtag_timeline(%{assigns: %{user: user}} = conn, params) do params = params |> Map.put("type", "Create") @@ -344,6 +353,7 @@ def hashtag_timeline(%{assigns: %{user: user}} = conn, params) do |> Enum.reverse conn + |> add_link_headers(:hashtag_timeline, activities, params["tag"]) |> render(StatusView, "index.json", %{activities: activities, for: user, as: :activity}) end