Add fetching for recipients.
This commit is contained in:
parent
2db28df4cf
commit
569d9bac17
3 changed files with 28 additions and 2 deletions
|
@ -8,14 +8,26 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do
|
||||||
end
|
end
|
||||||
|
|
||||||
def fetch_public_activities(opts \\ %{}) do
|
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
|
since_id = opts["since_id"] || 0
|
||||||
|
|
||||||
query = from activity in Activity,
|
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,
|
limit: 20,
|
||||||
order_by: [desc: :inserted_at]
|
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)
|
Repo.all(query)
|
||||||
|> Enum.reverse
|
|> Enum.reverse
|
||||||
end
|
end
|
||||||
|
|
|
@ -22,6 +22,7 @@ defmodule Pleroma.Web.Router do
|
||||||
scope "/api", Pleroma.Web do
|
scope "/api", Pleroma.Web do
|
||||||
pipe_through :api
|
pipe_through :api
|
||||||
get "/statuses/public_timeline.json", TwitterAPI.Controller, :public_timeline
|
get "/statuses/public_timeline.json", TwitterAPI.Controller, :public_timeline
|
||||||
|
get "/statuses/public_and_external_timeline.json", TwitterAPI.Controller, :public_timeline
|
||||||
end
|
end
|
||||||
|
|
||||||
scope "/api", Pleroma.Web do
|
scope "/api", Pleroma.Web do
|
||||||
|
|
|
@ -15,6 +15,19 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
describe "fetch activities for recipients" do
|
||||||
|
test "retrieve the activities for certain recipients" do
|
||||||
|
{:ok, activity_one} = ActivityBuilder.insert(%{"to" => ["someone"]})
|
||||||
|
{:ok, activity_two} = ActivityBuilder.insert(%{"to" => ["someone_else"]})
|
||||||
|
{:ok, activity_three} = ActivityBuilder.insert(%{"to" => ["noone"]})
|
||||||
|
|
||||||
|
activities = ActivityPub.fetch_activities(["someone", "someone_else"])
|
||||||
|
assert length(activities) == 2
|
||||||
|
assert activities == [activity_one, activity_two]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "public fetch activities" do
|
describe "public fetch activities" do
|
||||||
test "retrieves public activities" do
|
test "retrieves public activities" do
|
||||||
%{public: public} = ActivityBuilder.public_and_non_public
|
%{public: public} = ActivityBuilder.public_and_non_public
|
||||||
|
|
Loading…
Reference in a new issue