Expose content type of status sources
This commit is contained in:
parent
3a24185dd4
commit
3865ed5e0b
6 changed files with 70 additions and 4 deletions
|
@ -40,6 +40,10 @@ Has these additional fields under the `pleroma` object:
|
|||
- `parent_visible`: If the parent of this post is visible to the user or not.
|
||||
- `pinned_at`: a datetime (iso8601) when status was pinned, `null` otherwise.
|
||||
|
||||
The `GET /api/v1/statuses/:id/source` endpoint additionally has the following attributes:
|
||||
|
||||
- `content_type`: The content type of the status source.
|
||||
|
||||
## Scheduled statuses
|
||||
|
||||
Has these additional fields in `params`:
|
||||
|
|
|
@ -738,6 +738,10 @@ defp status_source_response do
|
|||
type: :string,
|
||||
description:
|
||||
"Subject or summary line, below which status content is collapsed until expanded"
|
||||
},
|
||||
content_type: %Schema{
|
||||
type: :string,
|
||||
description: "The content type of the source"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -222,6 +222,7 @@ defp object(draft) do
|
|||
|> Map.put("source", %{
|
||||
"content" => draft.status,
|
||||
"mediaType" => draft.params[:content_type]
|
||||
"mediaType" => Utils.get_content_type(draft.params[:content_type])
|
||||
})
|
||||
|> Map.put("generator", draft.params[:generator])
|
||||
|
||||
|
|
|
@ -219,7 +219,7 @@ def make_content_html(%ActivityDraft{} = draft) do
|
|||
|> maybe_add_attachments(draft.attachments, attachment_links)
|
||||
end
|
||||
|
||||
defp get_content_type(content_type) do
|
||||
def get_content_type(content_type) do
|
||||
if Enum.member?(Config.get([:instance, :allowed_post_formats]), content_type) do
|
||||
content_type
|
||||
else
|
||||
|
|
|
@ -355,7 +355,7 @@ def render("show.json", %{activity: %{data: %{"object" => _object}} = activity}
|
|||
reblog: nil,
|
||||
card: card,
|
||||
content: content_html,
|
||||
text: opts[:with_source] && object.data["source"],
|
||||
text: opts[:with_source] && get_source_text(object.data["source"]),
|
||||
created_at: created_at,
|
||||
edited_at: edited_at,
|
||||
reblogs_count: announcement_count,
|
||||
|
@ -471,8 +471,9 @@ def render("source.json", %{activity: %{data: %{"object" => _object}} = activity
|
|||
|
||||
%{
|
||||
id: activity.id,
|
||||
text: Map.get(object.data, "source", ""),
|
||||
spoiler_text: Map.get(object.data, "summary", "")
|
||||
text: get_source_text(Map.get(object.data, "source", "")),
|
||||
spoiler_text: Map.get(object.data, "summary", ""),
|
||||
content_type: get_source_content_type(object.data["source"])
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -709,4 +710,24 @@ defp maybe_render_quote(quote, opts) do
|
|||
render("show.json", opts)
|
||||
end
|
||||
end
|
||||
|
||||
defp get_source_text(%{"content" => content} = _source) do
|
||||
content
|
||||
end
|
||||
|
||||
defp get_source_text(source) when is_binary(source) do
|
||||
source
|
||||
end
|
||||
|
||||
defp get_source_text(_) do
|
||||
""
|
||||
end
|
||||
|
||||
defp get_source_content_type(%{"mediaType" => type} = _source) do
|
||||
type
|
||||
end
|
||||
|
||||
defp get_source_content_type(_source) do
|
||||
Utils.get_content_type(nil)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -767,4 +767,40 @@ test "it shows edited_at" do
|
|||
status = StatusView.render("show.json", activity: edited)
|
||||
assert status.edited_at
|
||||
end
|
||||
|
||||
test "with a source object" do
|
||||
note =
|
||||
insert(:note,
|
||||
data: %{"source" => %{"content" => "object source", "mediaType" => "text/markdown"}}
|
||||
)
|
||||
|
||||
activity = insert(:note_activity, note: note)
|
||||
|
||||
status = StatusView.render("show.json", activity: activity, with_source: true)
|
||||
assert status.text == "object source"
|
||||
end
|
||||
|
||||
describe "source.json" do
|
||||
test "with a source object, renders both source and content type" do
|
||||
note =
|
||||
insert(:note,
|
||||
data: %{"source" => %{"content" => "object source", "mediaType" => "text/markdown"}}
|
||||
)
|
||||
|
||||
activity = insert(:note_activity, note: note)
|
||||
|
||||
status = StatusView.render("source.json", activity: activity)
|
||||
assert status.text == "object source"
|
||||
assert status.content_type == "text/markdown"
|
||||
end
|
||||
|
||||
test "with a source string, renders source and put text/plain as the content type" do
|
||||
note = insert(:note, data: %{"source" => "string source"})
|
||||
activity = insert(:note_activity, note: note)
|
||||
|
||||
status = StatusView.render("source.json", activity: activity)
|
||||
assert status.text == "string source"
|
||||
assert status.content_type == "text/plain"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue