Organizer.fromICalString constructor

Organizer.fromICalString(
  1. String icalString
)

Implementation

factory Organizer.fromICalString(String icalString) {
  final separatorIndex = icalString.indexOf(':');
  if (separatorIndex < 0) {
    throw FormatException('Invalid iCalendar string for Organizer');
  }

  final colonIndex = icalString.indexOf(':');
  final semiColonIndex = icalString.indexOf(';');
  final delimiterIndex = (semiColonIndex >= 0 && semiColonIndex < colonIndex)
      ? semiColonIndex
      : colonIndex;

  if (delimiterIndex < 0) {
    throw FormatException('Invalid iCalendar string for Organizer');
  }

  final mailtoIndex = icalString.indexOf('mailto:', delimiterIndex);
  if (mailtoIndex < 0) {
    throw FormatException('Invalid iCalendar string for Organizer');
  }

  final nameAndEmail = icalString.substring(delimiterIndex + 1, mailtoIndex);
  final parts = nameAndEmail.split('=');
  String name = (parts.length == 2 && parts[0] == 'CN')
      ? parts[1].replaceAll('"', '')
      : '';
  String email = icalString.substring(mailtoIndex + 'mailto:'.length).trim();

  name = name.replaceAll(RegExp(r'[:;]$'), '');
  email = email.replaceAll(RegExp(r'[:;]$'), '');

  return Organizer(
    name: name,
    email: email,
  );
}