Add conversation fetching to TwAPI controller.

This commit is contained in:
Roger Braun 2017-03-28 17:22:44 +02:00
commit d2cdcc097b
5 changed files with 64 additions and 6 deletions

View file

@ -24,6 +24,7 @@ defmodule Pleroma.Web.Router do
get "/statuses/public_timeline", TwitterAPI.Controller, :public_timeline
get "/statuses/public_and_external_timeline", TwitterAPI.Controller, :public_timeline
get "/statuses/show/:id", TwitterAPI.Controller, :fetch_status
get "/statusnet/conversation/:id", TwitterAPI.Controller, :fetch_conversation
end
scope "/api", Pleroma.Web do

View file

@ -3,6 +3,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter
import Ecto.Query
def create_status(user = %User{}, data = %{}) do
date = DateTime.utc_now() |> DateTime.to_iso8601
@ -55,6 +57,29 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
|> activities_to_statuses(%{for: user})
end
def fetch_conversation(user, id) do
query = from activity in Activity,
where: fragment("? @> ?", activity.data, ^%{ statusnetConversationId: id}),
limit: 1
with %Activity{} = activity <- Repo.one(query),
context <- activity.data["context"],
activities <- ActivityPub.fetch_activities_for_context(context),
statuses <- activities |> activities_to_statuses(%{for: user})
do
statuses
else e ->
IO.inspect(e)
[]
end
end
def fetch_status(user, id) do
with %Activity{} = activity <- Repo.get(Activity, id) do
activity_to_status(activity, %{for: user})
end
end
def follow(%User{} = follower, followed_id) do
with %User{} = followed <- Repo.get(User, followed_id),
{ :ok, follower } <- User.follow(follower, followed)
@ -95,10 +120,4 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
user = Repo.get_by!(User, ap_id: actor)
ActivityRepresenter.to_map(activity, Map.merge(opts, %{user: user}))
end
def fetch_status(user, id) do
with %Activity{} = activity <- Repo.get(Activity, id) do
activity_to_status(activity, %{for: user})
end
end
end

View file

@ -57,6 +57,15 @@ defmodule Pleroma.Web.TwitterAPI.Controller do
|> json_reply(200, response)
end
def fetch_conversation(%{assigns: %{user: user}} = conn, %{ "id" => id }) do
id = String.to_integer(id)
response = TwitterAPI.fetch_conversation(user, id) |> Poison.encode!
conn
|> json_reply(200, response)
end
defp json_reply(conn, status, json) do
conn
|> put_resp_content_type("application/json")