getPollResponses method

Map<String, Set<String>> getPollResponses(
  1. Timeline timeline
)

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() ??
          {},
    ),
  );
}