1 defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
3 alias Pleroma.Web.ActivityPub.ActivityPub
5 alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter
7 def create_status(user = %User{}, data = %{}) do
8 date = DateTime.utc_now() |> DateTime.to_iso8601
12 User.ap_followers(user),
13 "https://www.w3.org/ns/activitystreams#Public"
15 "actor" => User.ap_id(user),
18 "content" => data["status"],
24 ActivityPub.insert(activity)
27 def fetch_friend_statuses(user, opts \\ %{}) do
28 ActivityPub.fetch_activities(user.following, opts)
29 |> activities_to_statuses(%{for: user})
32 def fetch_public_statuses(user, opts \\ %{}) do
33 ActivityPub.fetch_public_activities(opts)
34 |> activities_to_statuses(%{for: user})
37 def follow(%User{} = follower, followed_id) do
38 with %User{} = followed <- Repo.get(User, followed_id),
39 { :ok, follower } <- User.follow(follower, followed)
41 { :ok, follower, followed }
45 def unfollow(%User{} = follower, followed_id) do
46 with %User{} = followed <- Repo.get(User, followed_id),
47 { :ok, follower } <- User.unfollow(follower, followed)
49 { :ok, follower, followed }
53 defp activities_to_statuses(activities, opts) do
54 Enum.map(activities, fn(activity) ->
55 actor = get_in(activity.data, ["actor"])
56 user = Repo.get_by!(User, ap_id: actor)
57 ActivityRepresenter.to_map(activity, Map.merge(opts, %{user: user}))