getPollResponses method
Returns a Map of user IDs to a Set of answer IDs.
Implementation
Map<String, Set<String>> getPollResponses(Timeline timeline) {
assert(type == PollEventContent.startType);
final aggregatedEvents = timeline.aggregatedEvents[eventId]
?[RelationshipTypes.reference]
?.toList();
if (aggregatedEvents == null || aggregatedEvents.isEmpty) return {};
aggregatedEvents
.removeWhere((event) => event.type != PollEventContent.responseType);
final responses = <String, Event>{};
final endPollEvent = _getEndPollEvent(timeline);
for (final event in aggregatedEvents) {
// Ignore older responses if we already have a newer one:
final existingEvent = responses[event.senderId];
if (existingEvent != null &&
existingEvent.originServerTs.isAfter(event.originServerTs)) {
continue;
}
// Ignore all responses sent **after** the poll end event:
if (endPollEvent != null &&
event.originServerTs.isAfter(endPollEvent.originServerTs)) {
continue;
}
responses[event.senderId] = event;
}
return responses.map(
(userId, event) => MapEntry(
userId,
event.content
.tryGetMap<String, Object?>(PollEventContent.responseType)
?.tryGetList<String>('answers')
?.toSet() ??
{},
),
);
}