aboutsummaryrefslogtreecommitdiff
path: root/lib/pleroma/web/twitter_api/twitter_api.ex
diff options
context:
space:
mode:
authorRoger Braun <roger@rogerbraun.net>2017-04-15 13:54:46 +0200
committerRoger Braun <roger@rogerbraun.net>2017-04-15 13:54:46 +0200
commit60c60de330fe8fe03594da89831351099c8c9037 (patch)
tree8f5e0c83f8e0045eb73e2d991f5e1ae16d99dbd9 /lib/pleroma/web/twitter_api/twitter_api.ex
parent21c397820f5feffc5d68ccfb578e2d6765052a3b (diff)
downloadpleroma-60c60de330fe8fe03594da89831351099c8c9037.tar.gz
Add announcements / retweets to TwAPI.
Diffstat (limited to 'lib/pleroma/web/twitter_api/twitter_api.ex')
-rw-r--r--lib/pleroma/web/twitter_api/twitter_api.ex23
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex
index 76dbc77a1..58f8bc1d3 100644
--- a/lib/pleroma/web/twitter_api/twitter_api.ex
+++ b/lib/pleroma/web/twitter_api/twitter_api.ex
@@ -150,6 +150,19 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
{:ok, status}
end
+ def retweet(%User{} = user, %Activity{data: %{"object" => object}} = activity) do
+ object = Object.get_by_ap_id(object["id"])
+
+ {:ok, _announce_activity, object} = ActivityPub.announce(user, object)
+ new_data = activity.data
+ |> Map.put("object", object.data)
+
+ status = %{activity | data: new_data}
+ |> activity_to_status(%{for: user})
+
+ {:ok, status}
+ end
+
def upload(%Plug.Upload{} = file, format \\ "xml") do
{:ok, object} = ActivityPub.upload(file)
@@ -229,6 +242,16 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
ActivityRepresenter.to_map(activity, Map.merge(opts, %{user: user, liked_activity: liked_activity}))
end
+ # For announces, fetch the announced activity and the user.
+ defp activity_to_status(%Activity{data: %{"type" => "Announce"}} = activity, opts) do
+ actor = get_in(activity.data, ["actor"])
+ user = User.get_cached_by_ap_id(actor)
+ [announced_activity] = Activity.all_by_object_ap_id(activity.data["object"])
+ announced_actor = User.get_cached_by_ap_id(announced_activity.data["actor"])
+
+ ActivityRepresenter.to_map(activity, Map.merge(opts, %{users: [user, announced_actor], announced_activity: announced_activity}))
+ end
+
defp activity_to_status(activity, opts) do
actor = get_in(activity.data, ["actor"])
user = User.get_cached_by_ap_id(actor)