X-Git-Url: http://git.squeep.com/?a=blobdiff_plain;f=lib%2Fpleroma%2Fweb%2Ftwitter_api%2Frepresenters%2Factivity_representer.ex;h=affd435771e28d4f792d933b6041cd1bdbe58994;hb=b403ea4d2b69cef4434ad68babdfb402d8227847;hp=f2bf93abb26c5ba84879bc653aa36144dd6a7b1d;hpb=a9b2ad17596d1b6deca646239a95e94dc644ebf3;p=akkoma diff --git a/lib/pleroma/web/twitter_api/representers/activity_representer.ex b/lib/pleroma/web/twitter_api/representers/activity_representer.ex index f2bf93abb..affd43577 100644 --- a/lib/pleroma/web/twitter_api/representers/activity_representer.ex +++ b/lib/pleroma/web/twitter_api/representers/activity_representer.ex @@ -1,17 +1,19 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter do use Pleroma.Web.TwitterAPI.Representers.BaseRepresenter alias Pleroma.Web.TwitterAPI.Representers.{UserRepresenter, ObjectRepresenter} - alias Pleroma.Activity - + alias Pleroma.{Activity, User} + alias Calendar.Strftime + alias Pleroma.Web.TwitterAPI.TwitterAPI + alias Pleroma.Wi defp user_by_ap_id(user_list, ap_id) do Enum.find(user_list, fn (%{ap_id: user_id}) -> ap_id == user_id end) end - def to_map(%Activity{data: %{"type" => "Announce", "actor" => actor}} = activity, %{users: users, announced_activity: announced_activity} = opts) do + def to_map(%Activity{data: %{"type" => "Announce", "actor" => actor, "published" => created_at}} = activity, + %{users: users, announced_activity: announced_activity} = opts) do user = user_by_ap_id(users, actor) - created_at = get_in(activity.data, ["published"]) - |> date_to_asctime + created_at = created_at |> date_to_asctime text = "#{user.nickname} retweeted a status." @@ -26,20 +28,21 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter do "is_post_verb" => false, "uri" => "tag:#{activity.data["id"]}:objectType=note", "created_at" => created_at, - "retweeted_status" => retweeted_status + "retweeted_status" => retweeted_status, + "statusnet_conversation_id" => conversation_id(announced_activity) } end - def to_map(%Activity{data: %{"type" => "Like"}} = activity, %{user: user, liked_activity: liked_activity} = opts) do - created_at = get_in(activity.data, ["published"]) - |> date_to_asctime + def to_map(%Activity{data: %{"type" => "Like", "published" => created_at}} = activity, + %{user: user, liked_activity: liked_activity} = opts) do + created_at = created_at |> date_to_asctime text = "#{user.nickname} favorited a status." %{ "id" => activity.id, "user" => UserRepresenter.to_map(user, opts), - "statusnet_html" => text, # TODO: add summary + "statusnet_html" => text, "text" => text, "is_local" => true, "is_post_verb" => false, @@ -49,16 +52,17 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter do } end - def to_map(%Activity{data: %{"type" => "Follow"}} = activity, %{user: user} = opts) do - created_at = get_in(activity.data, ["published"]) - |> date_to_asctime + def to_map(%Activity{data: %{"type" => "Follow", "published" => created_at, "object" => followed_id}} = activity, %{user: user} = opts) do + created_at = created_at |> date_to_asctime + followed = User.get_cached_by_ap_id(followed_id) + text = "#{user.nickname} started following #{followed.nickname}" %{ "id" => activity.id, "user" => UserRepresenter.to_map(user, opts), "attentions" => [], - "statusnet_html" => "", # TODO: add summary - "text" => "", + "statusnet_html" => text, + "text" => text, "is_local" => true, "is_post_verb" => false, "created_at" => created_at, @@ -66,14 +70,12 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter do } end - def to_map(%Activity{} = activity, %{user: user} = opts) 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 - announcement_count = get_in(activity.data, ["object", "announcement_count"]) || 0 - favorited = opts[:for] && opts[:for].ap_id in (activity.data["object"]["likes"] || []) - repeated = opts[:for] && opts[:for].ap_id in (activity.data["object"]["announcements"] || []) + def to_map(%Activity{data: %{"object" => %{"content" => content} = object}} = activity, %{user: user} = opts) do + created_at = object["published"] |> date_to_asctime + like_count = object["like_count"] || 0 + announcement_count = object["announcement_count"] || 0 + favorited = opts[:for] && opts[:for].ap_id in (object["likes"] || []) + repeated = opts[:for] && opts[:for].ap_id in (object["announcements"] || []) mentions = opts[:mentioned] || [] @@ -82,6 +84,8 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter do |> Enum.filter(&(&1)) |> Enum.map(fn (user) -> UserRepresenter.to_map(user, opts) end) + conversation_id = conversation_id(activity) + %{ "id" => activity.id, "user" => UserRepresenter.to_map(user, opts), @@ -91,22 +95,41 @@ defmodule Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter do "is_local" => true, "is_post_verb" => true, "created_at" => created_at, - "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), + "in_reply_to_status_id" => object["inReplyToStatusId"], + "statusnet_conversation_id" => conversation_id, + "attachments" => (object["attachment"] || []) |> ObjectRepresenter.enum_to_list(opts), "attentions" => attentions, "fave_num" => like_count, "repeat_num" => announcement_count, - "favorited" => !!favorited, - "repeated" => !!repeated, + "favorited" => to_boolean(favorited), + "repeated" => to_boolean(repeated), } end + def conversation_id(activity) do + with context when not is_nil(context) <- activity.data["context"] do + TwitterAPI.context_to_conversation_id(context) + else _e -> nil + end + 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") + Strftime.strftime!(date, "%a %b %d %H:%M:%S %z %Y") else _e -> "" end end + + defp to_boolean(false) do + false + end + + defp to_boolean(nil) do + false + end + + defp to_boolean(_) do + true + end end