Event.fromICalStrings constructor
Implementation
factory Event.fromICalStrings(List<String> icalStrings) {
String? uid;
String? summary;
String? description;
List<Attachment>? attachments;
List<Attendee>? attendees;
Organizer? organizer;
DateTime? created;
DateTime? lastModified;
DateTime? startDate;
DateTime? endDate;
DateTime? stamp;
int? sequence;
String? transparency;
EventStatus? status;
TimeZone? timezone;
RecurrenceRule? recurrenceRule;
List<XDate>? exDates;
Location? location;
String? recurrenceId;
String? eventClass;
Map<String, String>? customProperties;
List<Attachment>? attachFiles;
List<int> indicesToSkip = [];
for (int i = 0; i < icalStrings.length; i++) {
if (indicesToSkip.contains(i)) {
continue;
}
var icalString = icalStrings[i];
int j = i + 1;
while (j < icalStrings.length && icalStrings[j].startsWith(' ')) {
String stringToAdd = icalStrings[j].substring(1);
icalString += stringToAdd;
indicesToSkip.add(j);
j++;
}
if (icalString.startsWith('UID:')) {
uid = icalString.split('UID:').last.trim();
} else if (icalString.startsWith('SUMMARY:')) {
summary = icalString.split('SUMMARY:').last.trim();
} else if (icalString.startsWith('DESCRIPTION:')) {
description = icalString.split('DESCRIPTION:').last.trim();
} else if (icalString.startsWith('ATTACH:')) {
attachments ??= [];
attachments.add(Attachment.fromICalString(icalString));
} else if (icalString.startsWith('ATTENDEE;')) {
attendees ??= [];
attendees.add(Attendee.fromICalString(icalString));
} else if (icalString.startsWith('ORGANIZER')) {
organizer = Organizer.fromICalString(icalString);
} else if (icalString.startsWith('CREATED:')) {
final createdString = icalString.split('CREATED:').last.trim();
created = DateTime.parse(createdString);
} else if (icalString.startsWith('LAST-MODIFIED:')) {
final lastModifiedString =
icalString.split('LAST-MODIFIED:').last.trim();
lastModified = DateTime.parse(lastModifiedString);
} else if (icalString.startsWith(
'DTSTART:',
)) {
final startDateString = icalString.split('DTSTART:').last.trim();
startDate = DateTime.parse(startDateString);
} else if (icalString.startsWith('DTEND:')) {
final endDateString = icalString.split('DTEND:').last.trim();
endDate = DateTime.parse(endDateString);
} else if (icalString.startsWith('RRULE:')) {
recurrenceRule = RecurrenceRule.fromICalString(icalString);
} else if (icalString.startsWith('DTSTAMP:')) {
final stampString = icalString.split('DTSTAMP:').last.trim();
stamp = DateTime.parse(stampString);
} else if (icalString.startsWith('SEQUENCE:')) {
sequence = int.parse(icalString.split('SEQUENCE:').last.trim());
} else if (icalString.startsWith('STATUS:')) {
String statusString = icalString.split('STATUS:').last.trim();
status = EventStatus.fromStatusString(statusString);
} else if (icalString.startsWith('TRANSP:')) {
transparency = icalString.split('TRANSP:').last.trim();
} else if (icalString.startsWith('DTSTART;')) {
timezone = TimeZone.fromICalString(icalString.split('DTSTART;').last);
startDate = DateTime.parse(
icalString.split('DTSTART;TZID=').last.split(':').last.trim(),
);
} else if (icalString.startsWith('DTEND;')) {
timezone = TimeZone.fromICalString(icalString.split('DTEND;').last);
endDate = DateTime.parse(
icalString.split('DTEND;TZID=').last.split(':').last.trim(),
);
} else if (icalString.startsWith('EXDATE;')) {
exDates ??= [];
exDates.add(XDate.fromICalString(icalString));
} else if (icalString.startsWith('LOCATION:')) {
location = Location.fromICalString(icalString);
} else if (icalString.startsWith('RECURRENCE-ID;')) {
recurrenceId = icalString.split('RECURRENCE-ID;').last.trim();
} else if (icalString.startsWith('X-')) {
customProperties ??= {};
List<String> parts = icalString.split(':');
if (parts.length > 1) {
String propertyName = parts[0];
String propertyValue = parts.sublist(1).join(':').trim();
customProperties[propertyName] = propertyValue;
}
} else if (icalString.startsWith('CLASS:')) {
eventClass = icalString.split('CLASS:').last.trim();
} else if (icalString.startsWith('ATTACH;')) {
attachFiles ??= [];
attachFiles.add(Attachment.fromICalString(icalString));
}
}
return Event(
uid: uid ?? '',
summary: summary,
description: description,
attachments: attachments,
attendees: attendees,
organizer: organizer,
created: created,
lastModified: lastModified,
startDate: startDate,
endDate: endDate,
stamp: stamp,
sequence: sequence,
status: status,
timeZone: timezone,
transparency: transparency,
recurrenceRule: recurrenceRule,
xDates: exDates,
location: location,
recurrenceId: recurrenceId,
customProperties: customProperties,
eventClass: eventClass,
attachFiles: attachFiles,
);
}