From 653d605e14d25658d398148748335dc58f9f2229 Mon Sep 17 00:00:00 2001 From: Roger Braun Date: Thu, 13 Apr 2017 16:19:07 +0200 Subject: [PATCH] Add favoriting to twitter api. --- .../web/twitter_api/representers/activity_representer.ex | 6 ++++-- lib/pleroma/web/twitter_api/twitter_api.ex | 13 +++++++++++++ .../twitter_api/representers/activity_representer_test.exs | 6 ++++-- test/web/twitter_api/twitter_api_test.exs | 13 +++++++++++++ 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/lib/pleroma/web/twitter_api/representers/activity_representer.ex b/lib/pleroma/web/twitter_api/representers/activity_representer.ex index 9e4ffaefe..6a5304049 100644 --- a/lib/pleroma/web/twitter_api/representers/activity_representer.ex +++ b/lib/pleroma/web/twitter_api/representers/activity_representer.ex @@ -25,6 +25,7 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter do content = get_in(activity.data, ["object", "content"]) created_at = get_in(activity.data, ["object", "published"]) |> date_to_asctime + like_count = get_in(activity.data, ["object", "like_count"]) || 0 mentions = opts[:mentioned] || [] @@ -45,14 +46,15 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter do "in_reply_to_status_id" => activity.data["object"]["inReplyToStatusId"], "statusnet_conversation_id" => activity.data["object"]["statusnetConversationId"], "attachments" => (activity.data["object"]["attachment"] || []) |> ObjectRepresenter.enum_to_list(opts), - "attentions" => attentions + "attentions" => attentions, + "fave_num" => like_count } end defp date_to_asctime(date) do with {:ok, date, _offset} <- date |> DateTime.from_iso8601 do Calendar.Strftime.strftime!(date, "%a %b %d %H:%M:%S %z %Y") - else e -> + else _e -> "" end end diff --git a/lib/pleroma/web/twitter_api/twitter_api.ex b/lib/pleroma/web/twitter_api/twitter_api.ex index a195301ee..2679397d9 100644 --- a/lib/pleroma/web/twitter_api/twitter_api.ex +++ b/lib/pleroma/web/twitter_api/twitter_api.ex @@ -124,6 +124,19 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do end end + def favorite(%User{} = user, %Activity{data: %{"object" => object}} = activity) do + object = Object.get_by_ap_id(object["id"]) + + {:ok, _like_activity, object} = ActivityPub.like(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) do {:ok, object} = ActivityPub.upload(file) diff --git a/test/web/twitter_api/representers/activity_representer_test.exs b/test/web/twitter_api/representers/activity_representer_test.exs index f1f2b4c9c..70df79a77 100644 --- a/test/web/twitter_api/representers/activity_representer_test.exs +++ b/test/web/twitter_api/representers/activity_representer_test.exs @@ -45,7 +45,8 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenterTest do "statusnetConversationId" => 4711, "attachment" => [ object - ] + ], + "like_count" => 5 }, "published" => date } @@ -68,7 +69,8 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenterTest do ], "attentions" => [ UserRepresenter.to_map(mentioned_user, %{for: follower}) - ] + ], + "fave_num" => 5 } assert ActivityRepresenter.to_map(activity, %{user: user, for: follower, mentioned: [mentioned_user]}) == expected_status diff --git a/test/web/twitter_api/twitter_api_test.exs b/test/web/twitter_api/twitter_api_test.exs index a4c9bd7e7..341622758 100644 --- a/test/web/twitter_api/twitter_api_test.exs +++ b/test/web/twitter_api/twitter_api_test.exs @@ -5,6 +5,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do alias Pleroma.{Activity, User, Object, Repo} alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter + import Pleroma.Factory + test "create a status" do user = UserBuilder.build(%{ap_id: "142344"}) _mentioned_user = UserBuilder.insert(%{nickname: "shp", ap_id: "shp"}) @@ -177,4 +179,15 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do assert TwitterAPI.add_user_links(text, mentions) == expected_text end + + test "it favorites a status, returns the updated status" do + user = insert(:user) + note_activity = insert(:note_activity) + activity_user = Repo.get_by!(User, ap_id: note_activity.data["actor"]) + + {:ok, status} = TwitterAPI.favorite(user, note_activity) + updated_activity = Activity.get_by_ap_id(note_activity.data["id"]) + + assert status == ActivityRepresenter.to_map(updated_activity, %{user: activity_user, for: user}) + end end