logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma
commit: 653d605e14d25658d398148748335dc58f9f2229
parent: 1388054796feed8f03d659171bbbc0c21056dd2f
Author: Roger Braun <roger@rogerbraun.net>
Date:   Thu, 13 Apr 2017 16:19:07 +0200

Add favoriting to twitter api.

Diffstat:

Mlib/pleroma/web/twitter_api/representers/activity_representer.ex6++++--
Mlib/pleroma/web/twitter_api/twitter_api.ex13+++++++++++++
Mtest/web/twitter_api/representers/activity_representer_test.exs6++++--
Mtest/web/twitter_api/twitter_api_test.exs13+++++++++++++
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 @@ -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 @@ -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 @@ -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 @@ -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