Add twkn timeline.

This commit is contained in:
Roger Braun 2017-05-02 14:12:43 +02:00
parent 6dd8335477
commit 32a95d73da
5 changed files with 35 additions and 2 deletions

View file

@ -149,6 +149,12 @@ def fetch_activities(recipients, opts \\ %{}) 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

View file

@ -30,7 +30,7 @@ def user_fetcher(username) 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

View file

@ -84,6 +84,12 @@ def fetch_friend_statuses(user, opts \\ %{}) 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

View file

@ -41,6 +41,14 @@ defp extract_media_ids(status_data) 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)

View file

@ -73,8 +73,9 @@ test "create a status that is a reply" 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 @@ test "fetch public statuses" 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"]})