Improve poll support
Misskey polls/questions don't have an endTime or the Mastodon-specific votersCount attribute.main
parent
4f0d819a41
commit
96cf0f9aa2
|
@ -196,14 +196,36 @@ class Object:
|
|||
|
||||
@property
|
||||
def is_poll_ended(self) -> bool:
|
||||
if self.ap_object.get("endTime"):
|
||||
return now() > parse_isoformat(self.ap_object["endTime"])
|
||||
if self.poll_end_time:
|
||||
return now() > self.poll_end_time
|
||||
return False
|
||||
|
||||
@cached_property
|
||||
def poll_items(self) -> list[ap.RawObject] | None:
|
||||
return self.ap_object.get("oneOf") or self.ap_object.get("anyOf")
|
||||
|
||||
@cached_property
|
||||
def poll_end_time(self) -> datetime | None:
|
||||
# Some polls may not have an end time
|
||||
if self.ap_object.get("endTime"):
|
||||
return parse_isoformat(self.ap_object["endTime"])
|
||||
|
||||
return None
|
||||
|
||||
@cached_property
|
||||
def poll_voters_count(self) -> int | None:
|
||||
if not self.poll_items:
|
||||
return None
|
||||
# Only Mastodon set this attribute
|
||||
if self.ap_object.get("votersCount"):
|
||||
return self.ap_object["votersCount"]
|
||||
else:
|
||||
voters_count = 0
|
||||
for item in self.poll_items:
|
||||
voters_count += item.get("replies", {}).get("totalItems", 0)
|
||||
|
||||
return voters_count
|
||||
|
||||
@cached_property
|
||||
def is_one_of_poll(self) -> bool:
|
||||
return bool(self.ap_object.get("oneOf"))
|
||||
|
|
|
@ -381,7 +381,7 @@
|
|||
<ul style="list-style-type: none;padding:0;">
|
||||
{% for item in object.poll_items %}
|
||||
<li style="display:block;">
|
||||
{% set pct = item | poll_item_pct(object.ap_object.votersCount) %}
|
||||
{% set pct = item | poll_item_pct(object.poll_voters_count) %}
|
||||
<p style="margin:20px 0 10px 0;">
|
||||
{% if can_vote %}
|
||||
<input type="{% if object.is_one_of_poll %}radio{% else %}checkbox{% endif %}" name="name" value="{{ item.name }}" id="{{object.permalink_id}}-{{item.name}}">
|
||||
|
@ -435,12 +435,16 @@
|
|||
</li>
|
||||
{% endif %}
|
||||
{% if object.ap_type == "Question" %}
|
||||
{% set endAt = object.ap_object.endTime | parse_datetime %}
|
||||
{% if object.poll_end_time %}
|
||||
<li>
|
||||
{% if object.is_poll_ended %}ended{% else %}ends{% endif %}
|
||||
<time title="{{ object.poll_end_time.replace(microsecond=0).isoformat() }}">
|
||||
{{ object.poll_end_time | timeago }}
|
||||
</time>
|
||||
</li>
|
||||
{% endif %}
|
||||
<li>
|
||||
{% if object.is_poll_ended %}ended{% else %}ends{% endif %} <time title="{{ endAt.replace(microsecond=0).isoformat() }}">{{ endAt | timeago }}</time>
|
||||
</li>
|
||||
<li>
|
||||
{{ object.ap_object.votersCount }} voters
|
||||
{{ object.poll_voters_count }} voters
|
||||
</li>
|
||||
{% endif %}
|
||||
{% if is_admin %}
|
||||
|
|
Loading…
Reference in New Issue