aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorlain <lain@soykaf.club>2018-02-12 08:15:37 +0100
committerlain <lain@soykaf.club>2018-02-12 08:15:37 +0100
commit91928b06ab9574f68a48003401083783a540da87 (patch)
tree716b31a1b25a5c0795bb4381d45f609259845aa8 /lib
parente946f300ae97a7531259a14511f43cb75efa7dd0 (diff)
parent3c80d9b27764817fcfdc4f7663f36147a9411b61 (diff)
downloadpleroma-91928b06ab9574f68a48003401083783a540da87.tar.gz
Merge branch 'hakabahitoyo/pleroma-feature/atom-feed-pagination' into develop
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/web/ostatus/feed_representer.ex12
-rw-r--r--lib/pleroma/web/ostatus/ostatus_controller.ex8
2 files changed, 18 insertions, 2 deletions
diff --git a/lib/pleroma/web/ostatus/feed_representer.ex b/lib/pleroma/web/ostatus/feed_representer.ex
index 10860ce04..8461b2b9f 100644
--- a/lib/pleroma/web/ostatus/feed_representer.ex
+++ b/lib/pleroma/web/ostatus/feed_representer.ex
@@ -10,6 +10,8 @@ defmodule Pleroma.Web.OStatus.FeedRepresenter do
h = fn(str) -> [to_charlist(str)] end
+ last_activity = List.last(activities)
+
entries = activities
|> Enum.map(fn(activity) ->
{:entry, ActivityRepresenter.to_simple_form(activity, user)}
@@ -32,7 +34,15 @@ defmodule Pleroma.Web.OStatus.FeedRepresenter do
{:link, [rel: 'salmon', href: h.(OStatus.salmon_path(user))], []},
{:link, [rel: 'self', href: h.(OStatus.feed_path(user)), type: 'application/atom+xml'], []},
{:author, UserRepresenter.to_simple_form(user)},
- ] ++ entries
+ ] ++
+ if last_activity do
+ [{:link, [rel: 'next',
+ href: to_charlist(OStatus.feed_path(user)) ++ '?max_id=' ++ to_charlist(last_activity.id),
+ type: 'application/atom+xml'], []}]
+ else
+ []
+ end
+ ++ entries
}]
end
end
diff --git a/lib/pleroma/web/ostatus/ostatus_controller.ex b/lib/pleroma/web/ostatus/ostatus_controller.ex
index d442d16fd..4d48c5d2b 100644
--- a/lib/pleroma/web/ostatus/ostatus_controller.ex
+++ b/lib/pleroma/web/ostatus/ostatus_controller.ex
@@ -17,7 +17,7 @@ defmodule Pleroma.Web.OStatus.OStatusController do
end
end
- def feed(conn, %{"nickname" => nickname}) do
+ def feed(conn, %{"nickname" => nickname} = params) do
user = User.get_cached_by_nickname(nickname)
query = from activity in Activity,
where: fragment("?->>'actor' = ?", activity.data, ^user.ap_id),
@@ -25,6 +25,7 @@ defmodule Pleroma.Web.OStatus.OStatusController do
order_by: [desc: :id]
activities = query
+ |> restrict_max(params)
|> Repo.all
response = user
@@ -54,6 +55,11 @@ defmodule Pleroma.Web.OStatus.OStatusController do
end
end
+ defp restrict_max(query, %{"max_id" => max_id}) do
+ from activity in query, where: activity.id < ^max_id
+ end
+ defp restrict_max(query, _), do: query
+
def salmon_incoming(conn, _) do
{:ok, body, _conn} = read_body(conn)
{:ok, doc} = decode_or_retry(body)