ActivityDraft: allow quoting

This commit is contained in:
Alex Gleason 2022-01-22 22:15:54 -06:00 committed by tusooa
parent 6ac19c3999
commit d4fea8b559
No known key found for this signature in database
GPG Key ID: 42AEC43D48433C51
3 changed files with 29 additions and 1 deletions

View File

@ -217,6 +217,7 @@ def note(%ActivityDraft{} = draft) do
"tag" => Keyword.values(draft.tags) |> Enum.uniq() "tag" => Keyword.values(draft.tags) |> Enum.uniq()
} }
|> add_in_reply_to(draft.in_reply_to) |> add_in_reply_to(draft.in_reply_to)
|> add_quote(draft.quote_post)
|> Map.merge(draft.extra) |> Map.merge(draft.extra)
{:ok, data, []} {:ok, data, []}
@ -232,6 +233,16 @@ defp add_in_reply_to(object, in_reply_to) do
end end
end end
defp add_quote(object, nil), do: object
defp add_quote(object, quote_post) do
with %Object{} = quote_object <- Object.normalize(quote_post, fetch: false) do
Map.put(object, "quoteUrl", quote_object.data["id"])
else
_ -> object
end
end
def chat_message(actor, recipient, content, opts \\ []) do def chat_message(actor, recipient, content, opts \\ []) do
basic = %{ basic = %{
"id" => Utils.generate_object_id(), "id" => Utils.generate_object_id(),

View File

@ -581,7 +581,12 @@ defp create_request do
type: :string, type: :string,
description: description:
"Will reply to a given conversation, addressing only the people who are part of the recipient set of that conversation. Sets the visibility to `direct`." "Will reply to a given conversation, addressing only the people who are part of the recipient set of that conversation. Sets the visibility to `direct`."
} },
quote_id: %Schema{
nullable: true,
allOf: [FlakeID],
description: "ID of the status being quoted, if any"
},
}, },
example: %{ example: %{
"status" => "What time is it?", "status" => "What time is it?",

View File

@ -796,6 +796,18 @@ test "it can handle activities that expire" do
scheduled_at: expires_at scheduled_at: expires_at
) )
end end
test "it allows allows quote posting" do
user = insert(:user)
{:ok, quoted} = CommonAPI.post(user, %{status: "Hello world"})
{:ok, quote_post} = CommonAPI.post(user, %{status: "nice post", quote_id: quoted.id})
quoted = Object.normalize(quoted)
quote_post = Object.normalize(quote_post)
assert quote_post.data["quoteUrl"] == quoted.data["id"]
end
end end
describe "reactions" do describe "reactions" do