RecurrenceRuleValue.fromCrawledStringValue constructor

RecurrenceRuleValue.fromCrawledStringValue(
  1. String value, {
  2. String? timeZoneIdentifier,
})

Implementation

factory RecurrenceRuleValue.fromCrawledStringValue(
  String value, {
  String? timeZoneIdentifier,
}) {
  RecurrenceFrequency? frequency;
  int interval = RecurrenceRule.defaultInterval;
  RecurrenceWeekday startOfWorkWeek = RecurrenceRule.defaultStartOfWorkWeek;
  DateTime? until;
  int? count;
  Set<int>? bySeconds;
  Set<int>? byMinutes;
  Set<int>? byHours;
  Set<RecurrenceByDay>? byDays;
  Set<int>? byMonthDays;
  Set<int>? byYearDays;
  Set<int>? byWeekNumbers;
  Set<int>? byMonths;
  Set<int>? bySetPositions;

  value.split(";").forEach((e) {
    final name = e.split("=").first;
    final value = e.split("=").last;

    switch (name.toUpperCase()) {
      case "FREQ":
        frequency = RecurrenceFrequency.values.firstWhere(
          (element) => element.value.toUpperCase() == value.toUpperCase(),
        );
        break;
      case "UNTIL":
        until = DateTimeValue.fromCrawledStringValue(
          value,
          timeZoneIdentifier: timeZoneIdentifier,
        ).value;
        break;
      case "COUNT":
        count = IntegerValue.fromCrawledStringValue(value).value;
        break;
      case "INTERVAL":
        interval = IntegerValue.fromCrawledStringValue(value).value;
        break;
      case "BYSECOND":
        bySeconds = value
            .split(",")
            .map((e) => IntegerValue.fromCrawledStringValue(e).value)
            .toSet();
        break;
      case "BYMINUTE":
        byMinutes = value
            .split(",")
            .map((e) => IntegerValue.fromCrawledStringValue(e).value)
            .toSet();
        break;
      case "BYHOUR":
        byHours = value
            .split(",")
            .map((e) => IntegerValue.fromCrawledStringValue(e).value)
            .toSet();
        break;
      case "BYDAY":
        byDays = _ByDayValuePart.fromCrawledStringValue(value).value;
        break;
      case "BYMONTHDAY":
        byMonthDays = value
            .split(",")
            .map((e) => IntegerValue.fromCrawledStringValue(e).value)
            .toSet();
        break;
      case "BYYEARDAY":
        byYearDays = value
            .split(",")
            .map((e) => IntegerValue.fromCrawledStringValue(e).value)
            .toSet();
        break;
      case "BYWEEKNO":
        byWeekNumbers = value
            .split(",")
            .map((e) => IntegerValue.fromCrawledStringValue(e).value)
            .toSet();
        break;
      case "BYMONTH":
        byMonths = value
            .split(",")
            .map((e) => IntegerValue.fromCrawledStringValue(e).value)
            .toSet();
        break;
      case "BYSETPOS":
        bySetPositions = value
            .split(",")
            .map((e) => IntegerValue.fromCrawledStringValue(e).value)
            .toSet();
        break;
      case "WKST":
        startOfWorkWeek = RecurrenceWeekday.values.firstWhere(
            (element) => element.value.toUpperCase() == value.toUpperCase());
        break;
    }
  });

  assert(frequency != null, "Frequency must be provided");

  return RecurrenceRuleValue(
    frequency: frequency!,
    interval: interval,
    startOfWorkWeek: startOfWorkWeek,
    until: until,
    count: count,
    bySeconds: bySeconds,
    byMinutes: byMinutes,
    byHours: byHours,
    byDays: byDays,
    byMonthDays: byMonthDays,
    byYearDays: byYearDays,
    byWeekNumbers: byWeekNumbers,
    byMonths: byMonths,
    bySetPositions: bySetPositions,
  );
}