/// <summary> /// Creates the event. /// </summary> /// <param name="eventInfo"></param> /// <returns></returns> public CalendarEventInfo CreateEvent(ulong eventId) { //Is create primary event only if (eventId != 0) return null; CalendarEventInfo retVal = null; if (_calendar != null) { retVal = new CalendarEventInfo(); CalendarEvent calEvent = new CalendarEvent(); calEvent.PrimaryCalendarId = _calendar.PrimaryKeyId.Value; //Raise event CalendarEvent.RaiseCreateEvent(calEvent); calEvent.Save(); retVal.CalendarEvent = calEvent; retVal.EventProvider = this; retVal.SetEventId(EventProviderHelper.MakeEventId(GetEventType(), (ulong)(int)calEvent.PrimaryKeyId.Value)); } return retVal; }
/// <summary> /// Deletes the event. /// </summary> /// <param name="eventId">The event id.</param> public void DeleteEvent(ulong eventId) { if (EventProviderHelper.CheckEventBelong(GetEventType(), eventId)) { if (_calendar == null) throw new NullReferenceException("calendar"); try { int eventKey = (int)EventProviderHelper.GetEventKey(eventId); CalendarEvent calEvent = new CalendarEvent(eventKey); //Raise event CalendarEvent.RaiseDeleteEvent(calEvent); calEvent.Delete(); } catch (ObjectNotFoundException) { throw; } } }
/// <summary> /// Creates the event. /// </summary> /// <param name="eventInfo"></param> /// <returns></returns> public CalendarEventInfo CreateEvent(ulong eventId) { CalendarEventInfo retVal = null; //Is create link only if (eventId == 0) return retVal; if (_calendarId != 0) { try { int eventKey = (int)EventProviderHelper.GetEventKey(eventId); CalendarEvent calEvent = new CalendarEvent(eventKey); retVal = new CalendarEventInfo(this, calEvent); CalendarEventLink eventLink = new CalendarEventLink(); eventLink.CalendarId = _calendarId; eventLink.EventId = (int)EventProviderHelper.GetEventKey(eventId); eventLink.Save(); //Set event key retVal.SetEventId(EventProviderHelper.MakeEventId(GetEventType(), (ulong)(int)eventLink.PrimaryKeyId.Value)); } catch(ObjectNotFoundException) { } } return retVal; }
/// <summary> /// Raises the delete event. /// </summary> public static void RaiseDeleteEvent(CalendarEvent calEvent) { CalendarEventArgs args = new CalendarEventArgs(); args.CalEvent = calEvent; OnEventDelete(args); }
/// <summary> /// Gets the event info collection. /// </summary> /// <param name="dtStart">The dt start.</param> /// <param name="dtEnd">The dt end.</param> /// <returns></returns> public EventInfoCollections GetEventInfoCollection(DateTime dtStart, DateTime dtEnd) { EventInfoCollections retVal = new EventInfoCollections(); if (_calendarId == -1) throw new NullReferenceException("calendarId"); CalendarEventLink[] eventLinks = CalendarEventLink.List(new FilterElement("CalendarId", FilterElementType.Equal, _calendarId)); foreach (CalendarEventLink eventLink in eventLinks) { try { CalendarEvent calEvent = new CalendarEvent(eventLink.EventId); if ((calEvent.DtStart >= dtStart) && (calEvent.DtEnd <= dtEnd)) { CalendarEventInfo eventInfo = new CalendarEventInfo(this, calEvent); eventInfo.SetEventId(EventProviderHelper.MakeEventId(GetEventType(), (ulong)(int)eventLink.PrimaryKeyId.Value)); retVal.Add(eventInfo); } } catch(ObjectNotFoundException) { throw; } } return retVal; }
/// <summary> /// Gets the event info. /// </summary> /// <param name="eventId">The event id.</param> /// <returns></returns> public CalendarEventInfo GetEventInfo(ulong eventId) { CalendarEventInfo retVal = null; if (EventProviderHelper.CheckEventBelong(GetEventType(), eventId)) { try { int linkKey = (int)EventProviderHelper.GetEventKey(eventId); CalendarEventLink eventLink = new CalendarEventLink(linkKey); CalendarEvent calEvent = new CalendarEvent(eventLink.EventId); retVal = new CalendarEventInfo(this, calEvent); retVal.SetEventId(eventId); } catch (ObjectNotFoundException) { throw; } } return retVal; }
/// <summary> /// Makes the event info. /// </summary> /// <param name="dtStart">The dt start.</param> /// <param name="calEvent">The cal event.</param> /// <returns></returns> private CalendarEventInfo MakeEventInfo(DateTime dtStart, CalendarEvent calEvent) { CalendarEventInfo retVal = new CalendarEventInfo(); dtStart = new DateTime(dtStart.Year, dtStart.Month, dtStart.Day, calEvent.DtStart.Hour, calEvent.DtStart.Minute, calEvent.DtStart.Second); ulong eventId = EncryptId(calEvent, dtStart); //TODO: Use Clone CalendarEvent virtualEvent = (CalendarEvent)calEvent.Clone(); TimeSpan eventDuration = calEvent.DtEnd - calEvent.DtStart; virtualEvent.DtStart = dtStart; virtualEvent.DtEnd = virtualEvent.DtStart + eventDuration; retVal.EventProvider = this; retVal.CalendarEvent = virtualEvent; retVal.SetEventId(EventProviderHelper.MakeEventId(GetEventType(), eventId)); return retVal; }
/// <summary> /// Hashes the function. /// </summary> /// <param name="dateTime">The date time.</param> /// <param name="eventKey">The event key.</param> /// <returns></returns> private ulong EncryptId(CalendarEvent calEvent, DateTime recurrDate) { TimeSpan offset = recurrDate - calEvent.DtStart; //Is mus be overflow !!! ulong passedDays = (ulong)offset.TotalDays; return ((passedDays << 32) | (ulong)(int)calEvent.PrimaryKeyId.Value); }
/// <summary> /// Decrypts the id. /// </summary> /// <param name="ecryptId">The ecrypt id.</param> /// <returns></returns> private bool DecryptId(ulong encryptId, out DateTime recurrDate, out CalendarEvent calEvent) { int passedDays = (int)(encryptId >> 32); int eventKey = (int)(encryptId & int.MaxValue); try { calEvent = new CalendarEvent(eventKey); recurrDate = calEvent.DtStart.AddDays((Double)passedDays); } catch(ObjectNotFoundException) { recurrDate = DateTime.MinValue; calEvent = null; return false; } return true; }
internal CalendarEventInfo(IEventProvider eventProvider, CalendarEvent calEvent) { EventProvider = eventProvider; CalendarEvent = calEvent; }