Add fetching for recipients.

This commit is contained in:
Roger Braun 2017-03-22 14:45:17 +01:00
commit 569d9bac17
3 changed files with 28 additions and 2 deletions

View file

@ -8,14 +8,26 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
end
def fetch_public_activities(opts \\ %{}) do
public = ["https://www.w3.org/ns/activitystreams#Public"]
fetch_activities(public, opts)
end
def fetch_activities(recipients, opts \\ %{}) do
since_id = opts["since_id"] || 0
query = from activity in Activity,
where: fragment(~s(? @> '{"to": ["https://www.w3.org/ns/activitystreams#Public"]}'), activity.data),
where: activity.id > ^since_id,
limit: 20,
order_by: [desc: :inserted_at]
query = Enum.reduce(recipients, query, fn (recipient, q) ->
map = %{ to: [recipient] }
from activity in q,
or_where: fragment(~s(? @> ?), activity.data, ^map)
end)
query = from activity in query,
where: activity.id > ^since_id
Repo.all(query)
|> Enum.reverse
end

View file

@ -22,6 +22,7 @@ defmodule Pleroma.Web.Router do
scope "/api", Pleroma.Web do
pipe_through :api
get "/statuses/public_timeline.json", TwitterAPI.Controller, :public_timeline
get "/statuses/public_and_external_timeline.json", TwitterAPI.Controller, :public_timeline
end
scope "/api", Pleroma.Web do