RecurrenceRuleValue.fromCrawledStringValue constructor
RecurrenceRuleValue.fromCrawledStringValue(
- String value, {
- 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,
);
}