static void SelectUnregisteredEvents(List <Calendar> events) { foreach (var item in events) { NSDate startDate = DateTimeToNSDate(item.Start).AddSeconds(-(3600 * 2)); NSDate endDate = DateTimeToNSDate(item.End).AddSeconds(-(3600 * 2)); NSPredicate query = EventStore.PredicateForEvents(startDate, endDate, new [] { Calendar }); EKEvent[] queryresult = EventStore.EventsMatching(query); bool exist = false; if (queryresult == null) { item.RegisterEventForStoring = true; continue; } foreach (var evt in queryresult) { if (evt.Location == (item.Room.Code ?? String.Empty) && evt.Title == item.ActiTitle) { exist = true; item.EventKitID = evt.EventIdentifier; } } item.RegisterEventForStoring |= !exist; } }
// updates data structures to only unclude events with the default title in our calendar. public void FetchPokerEvents() { ThreadPool.QueueUserWorkItem((v) => { // create NSDates to represent arbitrary fetch date range. //approximately 2 days ago: var yesterday = DateTime.Now - TimeSpan.FromDays(1); var twoMonthsInFuture = DateTime.Now + TimeSpan.FromDays(60); var predicate = EventStore.PredicateForEvents(yesterday, twoMonthsInFuture, null); var allEvents = EventStore.EventsMatching(predicate); if (allEvents == null) { return; } var result = allEvents.Where(evt => evt.Title == DefaultEventTitle); // update our internal data structures UpdateDataStructuresWithMatchingEvents(result); // notify the UI (on the main thread) that our model has changed BeginInvokeOnMainThread(delegate { NSNotificationCenter.DefaultCenter.PostNotificationName(PNVModelChangedNotification, this); }); }); }
static void DeleteUnregisteredEvent(List <Calendar> events) { NSDate startDate = DateTimeToNSDate(DateTime.Now).AddSeconds(-(3600 * 2)); NSDate endDate = DateTimeToNSDate(DateTime.Now.AddMonths(1)).AddSeconds(-(3600 * 2)); NSPredicate query = EventStore.PredicateForEvents(startDate, endDate, new [] { Calendar }); EKEvent[] queryresult = EventStore.EventsMatching(query); if (queryresult == null) { return; } EKEvent[] todelete = Array.FindAll(queryresult, x => { foreach (var item in events) { if (item.EventKitID == x.EventIdentifier || x.StartDate.SecondsSinceReferenceDate < NSDate.Now.SecondsSinceReferenceDate) { return(false); } } return(true); }); NSError err; bool succes; foreach (var item in todelete) { succes = EventStore.RemoveEvent(item, EKSpan.ThisEvent, true, out err); if (!succes) { throw new Exception("Delete failed"); } } }
/// <summary> /// Returns the Events for a specific date range /// </summary> /// <returns>The for date.</returns>> /// <param name="StartDate">Start date.</param> /// <param name="EndDate">End date.</param> public DSCalendarEventCollection EventsForDates(DateTime StartDate, DateTime EndDate) { var results = new DSCalendarEventCollection(); NSPredicate query = EventStore.PredicateForEvents(StartDate, EndDate, EKCalendarsInList(mVisibleCalendars)); EKEvent[] events = EventStore.EventsMatching(query); if (events != null) { foreach (EKEvent anEvent in events) { var aDsEvent = new DSCalendarEvent(); aDsEvent.EventID = anEvent.EventIdentifier; aDsEvent.Title = anEvent.Title; aDsEvent.StartDate = anEvent.StartDate; aDsEvent.EndDate = anEvent.EndDate; if (anEvent.TimeZone == null) { aDsEvent.StartDate = aDsEvent.StartDate.ToLocalTime(); aDsEvent.EndDate = aDsEvent.EndDate.ToLocalTime(); } aDsEvent.EventColor = new UIColor(anEvent.Calendar.CGColor).ToDSColor(); aDsEvent.IsAllDay = anEvent.AllDay; results.Add(aDsEvent); } } return(results); }