Attendee.fromICalString constructor
Attendee.fromICalString(
- 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,
);
}