forked from AkkomaGang/akkoma
Add favoriting to twitter api.
This commit is contained in:
parent
1388054796
commit
653d605e14
4 changed files with 34 additions and 4 deletions
|
@ -25,6 +25,7 @@ def to_map(%Activity{} = activity, %{user: user} = opts) do
|
||||||
content = get_in(activity.data, ["object", "content"])
|
content = get_in(activity.data, ["object", "content"])
|
||||||
created_at = get_in(activity.data, ["object", "published"])
|
created_at = get_in(activity.data, ["object", "published"])
|
||||||
|> date_to_asctime
|
|> date_to_asctime
|
||||||
|
like_count = get_in(activity.data, ["object", "like_count"]) || 0
|
||||||
|
|
||||||
mentions = opts[:mentioned] || []
|
mentions = opts[:mentioned] || []
|
||||||
|
|
||||||
|
@ -45,14 +46,15 @@ def to_map(%Activity{} = activity, %{user: user} = opts) do
|
||||||
"in_reply_to_status_id" => activity.data["object"]["inReplyToStatusId"],
|
"in_reply_to_status_id" => activity.data["object"]["inReplyToStatusId"],
|
||||||
"statusnet_conversation_id" => activity.data["object"]["statusnetConversationId"],
|
"statusnet_conversation_id" => activity.data["object"]["statusnetConversationId"],
|
||||||
"attachments" => (activity.data["object"]["attachment"] || []) |> ObjectRepresenter.enum_to_list(opts),
|
"attachments" => (activity.data["object"]["attachment"] || []) |> ObjectRepresenter.enum_to_list(opts),
|
||||||
"attentions" => attentions
|
"attentions" => attentions,
|
||||||
|
"fave_num" => like_count
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
defp date_to_asctime(date) do
|
defp date_to_asctime(date) do
|
||||||
with {:ok, date, _offset} <- date |> DateTime.from_iso8601 do
|
with {:ok, date, _offset} <- date |> DateTime.from_iso8601 do
|
||||||
Calendar.Strftime.strftime!(date, "%a %b %d %H:%M:%S %z %Y")
|
Calendar.Strftime.strftime!(date, "%a %b %d %H:%M:%S %z %Y")
|
||||||
else e ->
|
else _e ->
|
||||||
""
|
""
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -124,6 +124,19 @@ def unfollow(%User{} = follower, followed_id) do
|
||||||
end
|
end
|
||||||
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
|
def upload(%Plug.Upload{} = file) do
|
||||||
{:ok, object} = ActivityPub.upload(file)
|
{:ok, object} = ActivityPub.upload(file)
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,8 @@ test "an activity" do
|
||||||
"statusnetConversationId" => 4711,
|
"statusnetConversationId" => 4711,
|
||||||
"attachment" => [
|
"attachment" => [
|
||||||
object
|
object
|
||||||
]
|
],
|
||||||
|
"like_count" => 5
|
||||||
},
|
},
|
||||||
"published" => date
|
"published" => date
|
||||||
}
|
}
|
||||||
|
@ -68,7 +69,8 @@ test "an activity" do
|
||||||
],
|
],
|
||||||
"attentions" => [
|
"attentions" => [
|
||||||
UserRepresenter.to_map(mentioned_user, %{for: follower})
|
UserRepresenter.to_map(mentioned_user, %{for: follower})
|
||||||
]
|
],
|
||||||
|
"fave_num" => 5
|
||||||
}
|
}
|
||||||
|
|
||||||
assert ActivityRepresenter.to_map(activity, %{user: user, for: follower, mentioned: [mentioned_user]}) == expected_status
|
assert ActivityRepresenter.to_map(activity, %{user: user, for: follower, mentioned: [mentioned_user]}) == expected_status
|
||||||
|
|
|
@ -5,6 +5,8 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPITest do
|
||||||
alias Pleroma.{Activity, User, Object, Repo}
|
alias Pleroma.{Activity, User, Object, Repo}
|
||||||
alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter
|
alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter
|
||||||
|
|
||||||
|
import Pleroma.Factory
|
||||||
|
|
||||||
test "create a status" do
|
test "create a status" do
|
||||||
user = UserBuilder.build(%{ap_id: "142344"})
|
user = UserBuilder.build(%{ap_id: "142344"})
|
||||||
_mentioned_user = UserBuilder.insert(%{nickname: "shp", ap_id: "shp"})
|
_mentioned_user = UserBuilder.insert(%{nickname: "shp", ap_id: "shp"})
|
||||||
|
@ -177,4 +179,15 @@ test "it adds user links to an existing text" do
|
||||||
|
|
||||||
assert TwitterAPI.add_user_links(text, mentions) == expected_text
|
assert TwitterAPI.add_user_links(text, mentions) == expected_text
|
||||||
end
|
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
|
end
|
||||||
|
|
Loading…
Reference in a new issue