Add unfollowing to TwAPI.
[akkoma] / lib / pleroma / web / twitter_api / twitter_api.ex
index da707dd6ebd05348234af6c3e1a29b510776977f..2ef679397afffef6a3c852929b51e06469a22df2 100644 (file)
@@ -5,6 +5,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
   alias Pleroma.Web.TwitterAPI.Representers.ActivityRepresenter
 
   def create_status(user = %User{}, data = %{}) do
+    date = DateTime.utc_now() |> DateTime.to_iso8601
     activity = %{
       "type" => "Create",
       "to" => [
@@ -14,16 +15,42 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
       "actor" => User.ap_id(user),
       "object" => %{
         "type" => "Note",
-        "content" => data["status"]
-      }
+        "content" => data["status"],
+        "published" => date
+      },
+      "published" => date
     }
 
     ActivityPub.insert(activity)
   end
 
+  def fetch_friend_statuses(user, opts \\ %{}) do
+    ActivityPub.fetch_activities(user.following, opts)
+    |> activities_to_statuses
+  end
+
   def fetch_public_statuses(opts \\ %{}) do
-    activities = ActivityPub.fetch_public_activities(opts)
+    ActivityPub.fetch_public_activities(opts)
+    |> activities_to_statuses
+  end
+
+  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
+
+  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
 
+  defp activities_to_statuses(activities) do
     Enum.map(activities, fn(activity) ->
       actor = get_in(activity.data, ["actor"])
       user = Repo.get_by!(User, ap_id: actor)