Пример #1
0
		public IEnumerable<SEvent> GetRecurringEvents(IEvent evnt, IRecurrencePattern recur)
		{
			if (evnt == null || recur == null || evnt.UID.IsNullOrEmpty())
				yield break;
			SEvent rEvent = ToEvent(evnt, true);
			if (rEvent == null)
				yield break;

			rEvent.RRuleStr = recur.ToString();
			if (rEvent.RRuleStr.IsNullOrEmpty())
				yield break;

			DateTime maxDT = _now.AddMonths(3);

			IList<Occurrence> occurrences = evnt.GetOccurrences(EarliestIncludeEventTime, maxDT);

			if (occurrences == null)
				yield break;

			//if (occurrences.Count < 2) {
			//	occurrences = evnt.GetOccurrences(EarliestIncludeEventTime, maxDT);
			//	if (occurrences == null || occurrences.Count == 0)
			//		yield break;
			//}
			if (occurrences.IsNullOrEmpty())
				yield break;

			if (occurrences.Count > 9)
				occurrences = occurrences.Take(9).ToList();

			DateTime updated = evnt.LastModified.ToDateTime(evnt.Start.ToDateTime(_now));

			for (int i = 0; i < occurrences.Count; i++) {
	
				IPeriod period = occurrences[i].Period;
				if (period == null || period.StartTime == null)
					continue;
				if (period.EndTime == null)
					period.EndTime = period.StartTime;

				bool hasTime;
				DateTimeOffset start = GetLocalTime(period.StartTime, _currentTZ, out hasTime);
				
				string idAppend = i < 1 ? null : "_recur-" + i + "-" + start.Date.XmlTime();
				var ev = rEvent.Copy(idAppend);

				ev.Start = start;
				ev.End = GetLocalTime(period.EndTime, _currentTZ, out hasTime);
				ev.Updated = SetUpdatedEventTimeToStartTime ? ev.Start.DateTime : updated;
				ev.IsAllDay = ev.Start.TimeOfDay == con_EmptyTime && ev.End.TimeOfDay == con_EmptyTime;

				yield return ev;
			}
		}