Sfoglia il codice sorgente

Render polls in statuses

tags/v1.1.4
rinpatch 5 anni fa
parent
commit
642a67dd44
1 ha cambiato i file con 52 aggiunte e 0 eliminazioni
  1. +52
    -0
      lib/pleroma/web/mastodon_api/views/status_view.ex

+ 52
- 0
lib/pleroma/web/mastodon_api/views/status_view.ex Vedi File

@@ -232,6 +232,7 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
spoiler_text: summary_html,
visibility: get_visibility(object),
media_attachments: attachments,
poll: render("poll.json", %{object: object, for: opts[:for]}),
mentions: mentions,
tags: build_tags(tags),
application: %{
@@ -321,6 +322,57 @@ defmodule Pleroma.Web.MastodonAPI.StatusView do
}
end

# TODO: Add tests for this view
def render("poll.json", %{object: object} = opts) do
{multiple, options} =
case object.data do
%{"anyOf" => options} when is_list(options) -> {true, options}
%{"oneOf" => options} when is_list(options) -> {false, options}
_ -> {nil, nil}
end

if options do
end_time =
(object.data["closed"] || object.data["endTime"])
|> NaiveDateTime.from_iso8601!()

votes_count = object.data["votes_count"] || 0

expired =
end_time
|> NaiveDateTime.compare(NaiveDateTime.utc_now())
|> case do
:lt -> true
_ -> false
end

options =
Enum.map(options, fn %{"name" => name} = option ->
name =
HTML.filter_tags(
name,
User.html_filter_policy(opts[:for])
)

%{title: name, votes_count: option["replies"]["votes_count"] || 0}
end)

%{
# Mastodon uses separate ids for polls, but an object can't have more than one poll embedded so object id is fine
id: object.id,
expires_at: Utils.to_masto_date(end_time),
expired: expired,
multiple: multiple,
votes_count: votes_count,
options: options,
voted: false,
emojis: build_emojis(object.data["emoji"])
}
else
nil
end
end

def get_reply_to(activity, %{replied_to_activities: replied_to_activities}) do
object = Object.normalize(activity)



Loading…
Annulla
Salva