akkoma/lib/pleroma/web/twitter_api/twitter_api.ex

61 lines
1.6 KiB
Elixir
Raw Normal View History

2017-03-21 16:53:20 +00:00
defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
alias Pleroma.User
alias Pleroma.Web.ActivityPub.ActivityPub
alias Pleroma.Repo
alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter
def create_status(user = %User{}, data = %{}) do
2017-03-22 15:51:20 +00:00
date = DateTime.utc_now() |> DateTime.to_iso8601
2017-03-21 16:53:20 +00:00
activity = %{
2017-03-21 17:17:35 +00:00
"type" => "Create",
"to" => [
2017-03-21 16:53:20 +00:00
User.ap_followers(user),
"https://www.w3.org/ns/activitystreams#Public"
],
2017-03-21 17:17:35 +00:00
"actor" => User.ap_id(user),
"object" => %{
"type" => "Note",
2017-03-22 15:51:20 +00:00
"content" => data["status"],
"published" => date
},
"published" => date
2017-03-21 16:53:20 +00:00
}
ActivityPub.insert(activity)
end
2017-03-22 15:51:20 +00:00
def fetch_friend_statuses(user, opts \\ %{}) do
ActivityPub.fetch_activities(user.following, opts)
|> activities_to_statuses
end
2017-03-21 20:09:20 +00:00
def fetch_public_statuses(opts \\ %{}) do
2017-03-22 15:51:20 +00:00
ActivityPub.fetch_public_activities(opts)
|> activities_to_statuses
end
2017-03-21 16:53:20 +00:00
2017-03-22 17:36:08 +00:00
def follow(%User{} = follower, followed_id) do
with %User{} = followed <- Repo.get(User, followed_id),
{ :ok, follower } <- User.follow(follower, followed)
do
{ :ok, follower, followed }
end
end
2017-03-23 12:13:09 +00:00
def unfollow(%User{} = follower, followed_id) do
with %User{} = followed <- Repo.get(User, followed_id),
{ :ok, follower } <- User.unfollow(follower, followed)
do
{ :ok, follower, followed }
end
end
2017-03-22 15:51:20 +00:00
defp activities_to_statuses(activities) do
2017-03-21 16:53:20 +00:00
Enum.map(activities, fn(activity) ->
actor = get_in(activity.data, ["actor"])
user = Repo.get_by!(User, ap_id: actor)
ActivityRepresenter.to_map(activity, %{user: user})
end)
end
end