@@ -149,6 +149,12 @@ defmodule Pleroma.Web.ActivityPub.ActivityPub do | |||||
query = from activity in query, | query = from activity in query, | ||||
where: activity.id > ^since_id | where: activity.id > ^since_id | ||||
query = if opts["local_only"] do | |||||
from activity in query, where: activity.local == true | |||||
else | |||||
query | |||||
end | |||||
query = if opts["max_id"] do | query = if opts["max_id"] do | ||||
from activity in query, where: activity.id < ^opts["max_id"] | from activity in query, where: activity.id < ^opts["max_id"] | ||||
else | else | ||||
@@ -30,7 +30,7 @@ defmodule Pleroma.Web.Router do | |||||
get "/statusnet/config", TwitterAPI.Controller, :config | get "/statusnet/config", TwitterAPI.Controller, :config | ||||
get "/statuses/public_timeline", TwitterAPI.Controller, :public_timeline | get "/statuses/public_timeline", TwitterAPI.Controller, :public_timeline | ||||
get "/statuses/public_and_external_timeline", TwitterAPI.Controller, :public_timeline | |||||
get "/statuses/public_and_external_timeline", TwitterAPI.Controller, :public_and_external_timeline | |||||
get "/statuses/user_timeline", TwitterAPI.Controller, :user_timeline | get "/statuses/user_timeline", TwitterAPI.Controller, :user_timeline | ||||
get "/statuses/show/:id", TwitterAPI.Controller, :fetch_status | get "/statuses/show/:id", TwitterAPI.Controller, :fetch_status | ||||
@@ -84,6 +84,12 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do | |||||
end | end | ||||
def fetch_public_statuses(user, opts \\ %{}) do | def fetch_public_statuses(user, opts \\ %{}) do | ||||
opts = Map.put(opts, "local_only", true) | |||||
ActivityPub.fetch_public_activities(opts) | |||||
|> activities_to_statuses(%{for: user}) | |||||
end | |||||
def fetch_public_and_external_statuses(user, opts \\ %{}) do | |||||
ActivityPub.fetch_public_activities(opts) | ActivityPub.fetch_public_activities(opts) | ||||
|> activities_to_statuses(%{for: user}) | |> activities_to_statuses(%{for: user}) | ||||
end | end | ||||
@@ -41,6 +41,14 @@ defmodule Pleroma.Web.TwitterAPI.Controller do | |||||
end | end | ||||
end | end | ||||
def public_and_external_timeline(%{assigns: %{user: user}} = conn, params) do | |||||
statuses = TwitterAPI.fetch_public_and_external_statuses(user, params) | |||||
{:ok, json} = Poison.encode(statuses) | |||||
conn | |||||
|> json_reply(200, json) | |||||
end | |||||
def public_timeline(%{assigns: %{user: user}} = conn, params) do | def public_timeline(%{assigns: %{user: user}} = conn, params) do | ||||
statuses = TwitterAPI.fetch_public_statuses(user, params) | statuses = TwitterAPI.fetch_public_statuses(user, params) | ||||
{:ok, json} = Poison.encode(statuses) | {:ok, json} = Poison.encode(statuses) | ||||
@@ -73,8 +73,9 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do | |||||
assert Enum.member?(get_in(reply.data, ["to"]), "some_cool_id") | assert Enum.member?(get_in(reply.data, ["to"]), "some_cool_id") | ||||
end | end | ||||
test "fetch public statuses" do | |||||
test "fetch public statuses, excluding remote ones." do | |||||
%{ public: activity, user: user } = ActivityBuilder.public_and_non_public | %{ public: activity, user: user } = ActivityBuilder.public_and_non_public | ||||
insert(:note_activity, %{local: false}) | |||||
follower = insert(:user, following: [User.ap_followers(user)]) | follower = insert(:user, following: [User.ap_followers(user)]) | ||||
@@ -84,6 +85,18 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do | |||||
assert Enum.at(statuses, 0) == ActivityRepresenter.to_map(activity, %{user: user, for: follower}) | assert Enum.at(statuses, 0) == ActivityRepresenter.to_map(activity, %{user: user, for: follower}) | ||||
end | end | ||||
test "fetch whole known network statuses" do | |||||
%{ public: activity, user: user } = ActivityBuilder.public_and_non_public | |||||
insert(:note_activity, %{local: false}) | |||||
follower = insert(:user, following: [User.ap_followers(user)]) | |||||
statuses = TwitterAPI.fetch_public_and_external_statuses(follower) | |||||
assert length(statuses) == 2 | |||||
assert Enum.at(statuses, 0) == ActivityRepresenter.to_map(activity, %{user: user, for: follower}) | |||||
end | |||||
test "fetch friends' statuses" do | test "fetch friends' statuses" do | ||||
user = insert(:user, %{following: ["someguy/followers"]}) | user = insert(:user, %{following: ["someguy/followers"]}) | ||||
{:ok, activity} = ActivityBuilder.insert(%{"to" => ["someguy/followers"]}) | {:ok, activity} = ActivityBuilder.insert(%{"to" => ["someguy/followers"]}) | ||||