Merge remote-tracking branch 'pleroma/develop' into feature/addressable-lists
[akkoma] / lib / pleroma / web / common_api / utils.ex
index 66153a105e2e6f987062f5e11344a12c8230d1f5..9c92c6cea88975723ce6d074b3a7c4db9549ff2e 100644 (file)
@@ -102,13 +102,25 @@ defmodule Pleroma.Web.CommonAPI.Utils do
     end
   end
 
+  def to_for_user_and_mentions(_user, _mentions, _inReplyTo, _), do: {[], []}
+
+  def bcc_for_list(user, {:list, list_id}) do
+    list = Pleroma.List.get(list_id, user)
+    [list.ap_id]
+  end
+
+  def bcc_for_list(_, _), do: []
+
   def make_poll_data(%{"poll" => %{"options" => options, "expires_in" => expires_in}} = data)
-      when is_list(options) and is_integer(expires_in) do
+      when is_list(options) do
     %{max_expiration: max_expiration, min_expiration: min_expiration} =
       limits = Pleroma.Config.get([:instance, :poll_limits])
 
     # XXX: There is probably a cleaner way of doing this
     try do
+      # In some cases mastofe sends out strings instead of integers
+      expires_in = if is_binary(expires_in), do: String.to_integer(expires_in), else: expires_in
+
       if Enum.count(options) > limits.max_options do
         raise ArgumentError, message: "Poll can't contain more than #{limits.max_options} options"
       end
@@ -488,4 +500,15 @@ defmodule Pleroma.Web.CommonAPI.Utils do
         {:error, "No such conversation"}
     end
   end
+
+  def make_answer_data(%User{ap_id: ap_id}, object, name) do
+    %{
+      "type" => "Answer",
+      "actor" => ap_id,
+      "cc" => [object.data["actor"]],
+      "to" => [],
+      "name" => name,
+      "inReplyTo" => object.data["id"]
+    }
+  end
 end