예제 #1
0
 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;
     }
 }
예제 #2
0
        // 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);
                });
            });
        }
예제 #3
0
        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");
                }
            }
        }
예제 #4
0
        /// <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);
        }