EventComponent.fromCrawledBlock constructor

EventComponent.fromCrawledBlock(
  1. CrawledBlock block
)

Implementation

factory EventComponent.fromCrawledBlock(CrawledBlock block) {
  assert(
    block.blockName.toUpperCase() == "VEVENT",
    "Received invalid block: ${block.blockName}",
  );

  ClassificationProperty? classification;
  DateTimeCreatedProperty? dateTimeCreated;
  DescriptionProperty? description;
  DateTimeStartProperty? dateTimeStart;
  GeographicPositionProperty? geographicPosition;
  LastModifiedProperty? lastModified;
  LocationProperty? location;
  OrganizerProperty? organizer;
  PriorityProperty? priority;
  DateTimeStampProperty? dateTimeStamp;
  SequenceProperty? sequence;
  StatusProperty? status;
  SummaryProperty? summary;
  TimeTransparencyProperty? timeTransparency;
  UniqueIdentifierProperty? uniqueIdentifier;
  URLProperty? url;
  RecurrenceIdProperty? recurrenceId;
  DateTimeEndProperty? end;
  DurationProperty? duration;
  List<UriAttachmentProperty>? uriAttachments;
  List<BinaryAttachmentProperty>? binaryAttachments;
  List<AttendeeProperty>? attendees;
  List<CategoriesProperty>? categories;
  List<CommentProperty>? comments;
  List<ContactProperty>? contacts;
  List<ExceptionDateTimesProperty>? exceptionDateTimes;
  List<ExceptionRuleProperty>? exceptionRules;
  List<RequestStatusProperty>? requestStatuses;
  List<RelatedToProperty>? relatedTo;
  List<ResourcesProperty>? resources;
  List<RecurrenceDateTimesProperty>? recurrenceDateTimes;
  List<RecurrenceRuleProperty>? recurrenceRules;
  List<AudioAlarmComponent>? audioAlarms;
  List<DisplayAlarmComponent>? displayAlarms;
  List<EmailAlarmComponent>? emailAlarms;
  List<ProcedureAlarmComponent>? procedureAlarms;

  for (var e in block.properties) {
    switch (e.name.toUpperCase()) {
      case "CLASS":
        classification = ClassificationProperty.fromCrawledProperty(e);
        break;
      case "CREATED":
        dateTimeCreated = DateTimeCreatedProperty.fromCrawledProperty(e);
        break;
      case "DESCRIPTION":
        description = DescriptionProperty.fromCrawledProperty(e);
        break;
      case "DTSTART":
        dateTimeStart = DateTimeStartProperty.fromCrawledProperty(e);
        break;
      case "GEO":
        geographicPosition =
            GeographicPositionProperty.fromCrawledProperty(e);
        break;
      case "LAST-MODIFIED":
        lastModified = LastModifiedProperty.fromCrawledProperty(e);
        break;
      case "LOCATION":
        location = LocationProperty.fromCrawledProperty(e);
        break;
      case "ORGANIZER":
        organizer = OrganizerProperty.fromCrawledProperty(e);
        break;
      case "PRIORITY":
        priority = PriorityProperty.fromCrawledProperty(e);
        break;
      case "DTSTAMP":
        dateTimeStamp = DateTimeStampProperty.fromCrawledProperty(e);
        break;
      case "SEQUENCE":
        sequence = SequenceProperty.fromCrawledProperty(e);
        break;
      case "STATUS":
        status = StatusProperty.fromCrawledProperty(e);
        break;
      case "SUMMARY":
        summary = SummaryProperty.fromCrawledProperty(e);
        break;
      case "TRANSP":
        timeTransparency = TimeTransparencyProperty.fromCrawledProperty(e);
        break;
      case "UID":
        uniqueIdentifier = UniqueIdentifierProperty.fromCrawledProperty(e);
        break;
      case "URL":
        url = URLProperty.fromCrawledProperty(e);
        break;
      case "RECURRENCE-ID":
        recurrenceId = RecurrenceIdProperty.fromCrawledProperty(e);
        break;
      case "DTEND":
        end = DateTimeEndProperty.fromCrawledProperty(e);
        break;
      case "DURATION":
        duration = DurationProperty.fromCrawledProperty(e);
        break;
      case "ATTACH":
        {
          final isBinary = e.parameters.any(
            (element) =>
                element.name.toUpperCase() == "VALUE" &&
                ValueDataTypeParameter.fromCrawledParameter(element).type ==
                    ValueType.binary,
          );

          if (isBinary) {
            binaryAttachments ??= [];
            binaryAttachments
                .add(BinaryAttachmentProperty.fromCrawledProperty(e));
          } else {
            uriAttachments ??= [];
            uriAttachments.add(UriAttachmentProperty.fromCrawledProperty(e));
          }
          break;
        }
      case "ATTENDEE":
        attendees ??= [];
        attendees.add(AttendeeProperty.fromCrawledProperty(e));
        break;
      case "CATEGORIES":
        categories ??= [];
        categories.add(CategoriesProperty.fromCrawledProperty(e));
        break;
      case "COMMENT":
        comments ??= [];
        comments.add(CommentProperty.fromCrawledProperty(e));
        break;
      case "CONTACT":
        contacts ??= [];
        contacts.add(ContactProperty.fromCrawledProperty(e));
        break;
      case "EXDATE":
        exceptionDateTimes ??= [];
        exceptionDateTimes
            .add(ExceptionDateTimesProperty.fromCrawledProperty(e));
        break;
      case "EXRULE":
        exceptionRules ??= [];
        exceptionRules.add(ExceptionRuleProperty.fromCrawledProperty(e));
        break;
      case "REQUEST-STATUS":
        requestStatuses ??= [];
        requestStatuses.add(RequestStatusProperty.fromCrawledProperty(e));
        break;
      case "RELATED-TO":
        relatedTo ??= [];
        relatedTo.add(RelatedToProperty.fromCrawledProperty(e));
        break;
      case "RESOURCES":
        resources ??= [];
        resources.add(ResourcesProperty.fromCrawledProperty(e));
        break;
      case "RDATE":
        recurrenceDateTimes ??= [];
        recurrenceDateTimes
            .add(RecurrenceDateTimesProperty.fromCrawledProperty(e));
        break;
      case "RRULE":
        recurrenceRules ??= [];
        recurrenceRules.add(RecurrenceRuleProperty.fromCrawledProperty(e));
        break;
      default:
        print("Unknown property encountered in EventComponent: ${e.name}");
    }
  }

  for (var e in block.nestedBlocks) {
    switch (e.blockName.toUpperCase()) {
      case "VALARM":
        {
          final action = ActionProperty.fromCrawledProperty(
            e.properties.firstWhere(
                (element) => element.name.toUpperCase() == "ACTION"),
          );
          switch (action.type) {
            case ActionType.audio:
              audioAlarms ??= [];
              audioAlarms.add(AudioAlarmComponent.fromCrawledBlock(e));
              break;
            case ActionType.display:
              displayAlarms ??= [];
              displayAlarms.add(DisplayAlarmComponent.fromCrawledBlock(e));
              break;
            case ActionType.email:
              emailAlarms ??= [];
              emailAlarms.add(EmailAlarmComponent.fromCrawledBlock(e));
              break;
            case ActionType.procedure:
              procedureAlarms ??= [];
              procedureAlarms
                  .add(ProcedureAlarmComponent.fromCrawledBlock(e));
              break;
          }
          break;
        }
      default:
        print(
            "Unknown component encountered in EventComponent: ${e.blockName}");
    }
  }

  return EventComponent(
    classification: classification,
    dateTimeCreated: dateTimeCreated,
    description: description,
    dateTimeStart: dateTimeStart,
    geographicPosition: geographicPosition,
    lastModified: lastModified,
    location: location,
    organizer: organizer,
    priority: priority,
    dateTimeStamp: dateTimeStamp,
    sequence: sequence,
    status: status,
    summary: summary,
    timeTransparency: timeTransparency,
    uniqueIdentifier: uniqueIdentifier,
    url: url,
    recurrenceId: recurrenceId,
    end: end,
    duration: duration,
    uriAttachments: uriAttachments,
    binaryAttachments: binaryAttachments,
    attendees: attendees,
    categories: categories,
    comments: comments,
    contacts: contacts,
    exceptionDateTimes: exceptionDateTimes,
    exceptionRules: exceptionRules,
    requestStatuses: requestStatuses,
    relatedTo: relatedTo,
    resources: resources,
    recurrenceDateTimes: recurrenceDateTimes,
    recurrenceRules: recurrenceRules,
    audioAlarms: audioAlarms,
    displayAlarms: displayAlarms,
    emailAlarms: emailAlarms,
    procedureAlarms: procedureAlarms,
  );
}