Attendee.fromICalString constructor

Attendee.fromICalString(
  1. String icalString
)

Implementation

factory Attendee.fromICalString(String icalString) {
  String name = '';
  String email = '';
  String? cutype;
  String? rsvp;
  int? numGuests;
  String? mailTo;
  var fields = icalString.split(';');

  for (int i = 0; i < fields.length; i++) {
    fields[i] = removeNonPrintableChars(fields[i]);
  }

  for (final field in fields) {
    if (field.startsWith('CN=')) {
      final cnMatch = RegExp(r'(^|\s)CN=([^;]+)').firstMatch(field);
      if (cnMatch != null) {
        name = cnMatch.group(2) ?? '';
      }
    } else if (field.startsWith('EMAIL=')) {
      email = field.substring(6);
    } else if (field.startsWith('CUTYPE=')) {
      cutype = field.substring(7);
    } else if (field.startsWith('RSVP=')) {
      rsvp = field.substring(5);
    } else if (field.trim().startsWith('X-NUM-GUESTS=')) {
      numGuests = int.tryParse(field.substring(13).split(':')[0]);
      mailTo = field.substring(13).split(':').last;
    }
  }
  final role = fields
      .firstWhere((field) => field.startsWith('ROLE='),
          orElse: () => 'ROLE=REQ-PARTICIPANT')
      .substring(5);
  final partstatField = fields.firstWhere(
      (field) => field.startsWith('PARTSTAT='),
      orElse: () => 'PARTSTAT=NEEDS-ACTION');
  final partstat = partstatField.substring(9);

  String? delegate = fields.firstWhere(
      (field) => field.startsWith('DELEGATED-TO='),
      orElse: () => 'null');
  if (delegate != 'null') {
    delegate = delegate.substring(13);
  } else {
    delegate = null;
  }

  return Attendee(
    name: name,
    email: email,
    role: role,
    partstat: partstat,
    rsvp: rsvp != null ? rsvp == 'TRUE' : null,
    delegate: delegate,
    cutype: cutype,
    numGuests: numGuests,
    mailTo: mailTo,
  );
}