Merge branch 'develop' into feature/incoming_ostatus
[akkoma] / lib / pleroma / web / twitter_api / twitter_api.ex
index ad73e82ce100d9c3c4fa9cd789cbf4fba766589d..1c3396d27adf46a8fb4be0b4aeecf624b691ca01 100644 (file)
@@ -11,11 +11,11 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
       "https://www.w3.org/ns/activitystreams#Public"
     ]
 
-    to = default_to ++ Enum.map(mentions, fn ({_, %{ap_id: ap_id}}) -> ap_id end)
+    default_to ++ Enum.map(mentions, fn ({_, %{ap_id: ap_id}}) -> ap_id end)
   end
 
   def format_input(text, mentions) do
-    content = HtmlSanitizeEx.strip_tags(text)
+    HtmlSanitizeEx.strip_tags(text)
     |> String.replace("\n", "<br>")
     |> add_user_links(mentions)
   end
@@ -26,21 +26,26 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
     end)
   end
 
+  def get_replied_to_activity(id) when not is_nil(id) do
+    Repo.get(Activity, id)
+  end
+
+  def get_replied_to_activity(_), do: nil
+
   def create_status(user = %User{}, data = %{"status" => status}) do
     attachments = attachments_from_ids(data["media_ids"])
     context = ActivityPub.generate_context_id
     mentions = parse_mentions(status)
     content_html = format_input(status, mentions)
     to = to_for_user_and_mentions(user, mentions)
-
     date = make_date()
 
+    inReplyTo = get_replied_to_activity(data["in_reply_to_status_id"])
+
     # Wire up reply info.
     [to, context, object, additional] =
-      with inReplyToId when not is_nil(inReplyToId) <- data["in_reply_to_status_id"],
-                  inReplyTo <- Repo.get(Activity, inReplyToId),
-                    context <- inReplyTo.data["context"]
-      do
+      if inReplyTo do
+      context = inReplyTo.data["context"]
       to = to ++ [inReplyTo.data["actor"]]
 
       object = %{
@@ -52,7 +57,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
         "attachment" => attachments,
         "actor" => user.ap_id,
         "inReplyTo" => inReplyTo.data["object"]["id"],
-        "inReplyToStatusId" => inReplyToId,
+        "inReplyToStatusId" => inReplyTo.id,
         "statusnetConversationId" => inReplyTo.data["statusnetConversationId"]
       }
       additional = %{
@@ -60,7 +65,7 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
       }
 
       [to, context, object, additional]
-      else _e ->
+      else
       object = %{
         "type" => "Note",
         "to" => to,
@@ -119,9 +124,9 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
     end
   end
 
-  def follow(%User{} = follower, followed_id) do
-    with %User{} = followed <- Repo.get(User, followed_id),
-    { :ok, follower } <- User.follow(follower, followed),
+  def follow(%User{} = follower, params) do
+    with { :ok, %User{} = followed } <- get_user(params),
+         { :ok, follower } <- User.follow(follower, followed),
          { :ok, activity } <- ActivityPub.insert(%{
            "type" => "Follow",
            "actor" => follower.ap_id,
@@ -135,11 +140,11 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
     end
   end
 
-  def unfollow(%User{} = follower, followed_id) do
-    with %User{} = followed <- Repo.get(User, followed_id),
-         { :ok, follower } <- User.unfollow(follower, followed)
+  def unfollow(%User{} = follower, params) do
+    with { :ok, %User{} = unfollowed } <- get_user(params),
+         { :ok, follower } <- User.unfollow(follower, unfollowed)
     do
-      { :ok, follower, followed }
+      { :ok, follower, unfollowed}
     else
       err -> err
     end
@@ -230,24 +235,6 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
     Enum.reduce(mentions, text, fn ({match, %User{ap_id: ap_id}}, text) -> String.replace(text, match, "<a href='#{ap_id}'>#{match}</a>") end)
   end
 
-  defp add_conversation_id(activity) do
-    if is_integer(activity.data["statusnetConversationId"]) do
-      {:ok, activity}
-    else
-      data = activity.data
-      |> put_in(["object", "statusnetConversationId"], activity.id)
-      |> put_in(["statusnetConversationId"], activity.id)
-
-      object = Object.get_by_ap_id(activity.data["object"]["id"])
-
-      changeset = Ecto.Changeset.change(object, data: data["object"])
-      Repo.update(changeset)
-
-      changeset = Ecto.Changeset.change(activity, data: data)
-      Repo.update(changeset)
-    end
-  end
-
   def register_user(params) do
     params = %{
       nickname: params["nickname"],
@@ -266,11 +253,11 @@ defmodule Pleroma.Web.TwitterAPI.TwitterAPI do
       {:error, changeset} ->
         errors = Ecto.Changeset.traverse_errors(changeset, fn {msg, _opts} -> msg end)
       |> Poison.encode!
-        {:error, %{error: errors}}
+      {:error, %{error: errors}}
     end
   end
 
-  def get_user(user, params) do
+  def get_user(user \\ nil, params) do
     case params do
       %{ "user_id" => user_id } ->
         case target = Repo.get(User, user_id) do