diff options
author | Roger Braun <roger@rogerbraun.net> | 2017-04-15 13:54:46 +0200 |
---|---|---|
committer | Roger Braun <roger@rogerbraun.net> | 2017-04-15 13:54:46 +0200 |
commit | 60c60de330fe8fe03594da89831351099c8c9037 (patch) | |
tree | 8f5e0c83f8e0045eb73e2d991f5e1ae16d99dbd9 /lib/pleroma/web/twitter_api/twitter_api.ex | |
parent | 21c397820f5feffc5d68ccfb578e2d6765052a3b (diff) | |
download | pleroma-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.ex | 23 |
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) |