Exemplo n.º 1
0
        /// <summary>
        /// Gets all events for a calendar within the specified time range.
        /// </summary>
        /// <param name="calendar">Calendar containing events</param>
        /// <param name="start">Start of event range</param>
        /// <param name="end">End of event range</param>
        /// <returns>Calendar events</returns>
        /// <exception cref="System.ArgumentException">Calendar does not exist on device</exception>
        /// <exception cref="System.UnauthorizedAccessException">Calendar access denied</exception>
        /// <exception cref="Plugin.Calendars.Abstractions.PlatformException">Unexpected platform-specific error</exception>
        public async Task <IList <CalendarEvent> > GetEventsAsync(Calendar calendar, DateTime start, DateTime end)
        {
            await RequestCalendarAccess().ConfigureAwait(false);

            var deviceCalendar = _eventStore.GetCalendar(calendar.ExternalID);

            if (deviceCalendar == null)
            {
                throw new ArgumentException("Specified calendar not found on device");
            }

            var query  = _eventStore.PredicateForEvents(start.ToNSDate(), end.ToNSDate(), new EKCalendar[] { deviceCalendar });
            var events = await Task.Run(() =>
            {
                var iosEvents = _eventStore.EventsMatching(query);
                return(iosEvents == null ? new List <CalendarEvent>() : iosEvents.Select(e => e.ToCalendarEvent()).ToList());
            }).ConfigureAwait(false);

            return(events);
        }
Exemplo n.º 2
0
        protected override List <CalendarDatum> GetCalendarEventsAsync()
        {
            List <CalendarDatum> datums = new List <CalendarDatum>();
            EKEventStore         store  = new EKEventStore();

            EKCalendar[] calendars = store.GetCalendars(EKEntityType.Event);

            NSDate last = (NSDate)LastPollTime;
            NSDate now  = (NSDate)DateTime.Now;

            NSPredicate predicate = store.PredicateForEvents(last, now, calendars);

            EKEvent[] items = store.EventsMatching(predicate);

            foreach (EKEvent item in items)
            {
                CalendarDatum datum = new CalendarDatum(item.EventIdentifier, item.Title, (DateTime)item.StartDate, (DateTime)item.EndDate, ((DateTime)item.EndDate - (DateTime)item.StartDate).TotalMilliseconds, item.Description, item.Location, item.Organizer?.Name, item.Organizer == null || item.Organizer?.IsCurrentUser == true, DateTimeOffset.UtcNow);

                datums.Add(datum);
            }

            return(datums);
        }
Exemplo n.º 3
0
        public static EKEvent[] FetchEvents(DateTime startDate, DateTime endDate)
        {
            // Create the predicate. Pass it the default calendar.
            //Util.WriteLine ("Getting Calendars");
            EKEventStore store = new EKEventStore();

            store.RequestAccess(EKEntityType.Event, (bool granted, NSError e) => {
                if (granted)
                {
#if DEBUG
                    Console.WriteLine("Access Granted!");
#endif
                    //Do add events calendars and any calendar stuff here
                }
                else
                {
                    new UIAlertView("Access Denied", "User Denied Access to Calendar Data", null, "ok", null).Show();
                }
            }
                                );
            var calendarArray = store.Calendars;
            //Util.WriteLine ("Predicate");
            //Convert to NSDate
            NSDate      nstartDate = Util.DateTimeToNSDate(startDate);
            NSDate      nendDate   = Util.DateTimeToNSDate(endDate);
            NSPredicate predicate  = store.PredicateForEvents(nstartDate, nendDate, calendarArray);

            //Util.WriteLine ("Fetching Events");
            // Fetch all events that match the predicate.
            var eventsArray = store.EventsMatching(predicate);
            //Util.WriteLine ("Returning results");
            if (eventsArray == null)
            {
                eventsArray = new List <EKEvent> ().ToArray();
            }
            return(eventsArray);
        }
Exemplo n.º 4
0
        public static EKEvent[] FetchEvents(DateTime startDate, DateTime endDate)
        {
            // Create the predicate. Pass it the default calendar.
            //Util.WriteLine ("Getting Calendars");
            EKEventStore store = new EKEventStore ();
            store.RequestAccess (EKEntityType.Event, (bool granted, NSError e) => {
                if (granted)
                {
            #if DEBUG
                    Console.WriteLine("Access Granted!");
            #endif
                    //Do add events calendars and any calendar stuff here
                }
                else
                    new UIAlertView ( "Access Denied", "User Denied Access to Calendar Data", null, "ok", null).Show ();
            }
            );
            var calendarArray = store.Calendars;
            //Util.WriteLine ("Predicate");
            //Convert to NSDate
            NSDate nstartDate = startDate.DateTimeToNSDate();
            NSDate nendDate = endDate.DateTimeToNSDate();
            NSPredicate predicate = store.PredicateForEvents (nstartDate, nendDate, calendarArray);

            //Util.WriteLine ("Fetching Events");
            // Fetch all events that match the predicate.
            var eventsArray = store.EventsMatching (predicate);
            //Util.WriteLine ("Returning results");
            if (eventsArray == null) {
                eventsArray = new List<EKEvent> ().ToArray ();
            }
            return eventsArray;
        }
Exemplo n.º 5
0
        public async void AddEventToCalender(object sender, EventArgs e)
        {
            try
            {
                var store = new EKEventStore();
                if (EKEventStore.GetAuthorizationStatus(EKEntityType.Reminder) == EKAuthorizationStatus.Authorized)
                {
                    if (EKEventStore.GetAuthorizationStatus(EKEntityType.Event) == EKAuthorizationStatus.Authorized)
                    {
                        NSDate           startDate = ConvertDateTimeToNSDate(BaseFunctions.GetDateTimeFull(App.reminderEvent.eventStartDate + " " + App.reminderEvent.eventStartTime));
                        NSDate           endDate   = ConvertDateTimeToNSDate(BaseFunctions.GetDateTimeFull(App.reminderEvent.eventEndDate + " " + App.reminderEvent.eventEndTime));
                        NSPredicate      query     = store.PredicateForEvents(startDate, endDate, null);
                        EKCalendarItem[] events    = store.EventsMatching(query);
                        bool             exists    = false;
                        for (int i = 0; i < events.Length; i++)
                        {
                            if (events[i].Title == App.reminderEvent.eventName)
                            {
                                exists = true;
                            }
                        }
                        if (!exists)
                        {
                            EKEvent eEvent = EKEvent.FromStore(store);
                            eEvent.AddAlarm(EKAlarm.FromDate(ConvertDateTimeToNSDate(BaseFunctions.GetDateTimeFull(App.reminderEvent.eventStartDate + " " + App.reminderEvent.eventStartTime))));
                            eEvent.StartDate = startDate;
                            eEvent.EndDate   = endDate;
                            eEvent.Title     = App.reminderEvent.eventName;
                            eEvent.TimeZone  = new NSTimeZone("UTC");
                            eEvent.Location  = App.reminderEvent.eventAddress;
                            eEvent.Notes     = App.reminderEvent.eventDescription;
                            eEvent.Calendar  = store.DefaultCalendarForNewEvents;
                            NSError eventError;
                            store.SaveEvent(eEvent, EKSpan.ThisEvent, out eventError);

                            EKReminder reminder = EKReminder.Create(store);
                            reminder.Title = App.reminderEvent.eventName;
                            reminder.AddAlarm(EKAlarm.FromDate(ConvertDateTimeToNSDate(BaseFunctions.GetDateTimeFull(App.reminderEvent.eventStartDate + " " + App.reminderEvent.eventStartTime))));
                            reminder.TimeZone = new NSTimeZone("UTC");
                            reminder.Calendar = store.DefaultCalendarForNewEvents;
                            await App.Current.MainPage.DisplayAlert("Alert", "This event is added to your calender", "Ok");
                        }
                        else
                        {
                            await App.Current.MainPage.DisplayAlert("Alert", "This event is already added to your calender", "Ok");
                        }
                    }
                    else
                    {
                        store.RequestAccess(EKEntityType.Event, StoreAcceptRequest);
                    }
                }
                else
                {
                    store.RequestAccess(EKEntityType.Reminder, StoreAcceptRequest);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
            }
        }
Exemplo n.º 6
0
        public static EKEvent[] FetchEvents(DateTime startDate, DateTime endDate)
        {
            // Create the predicate. Pass it the default calendar.
            //Util.WriteLine ("Getting Calendars");
            EKEventStore store = new EKEventStore ();
            var calendarArray = store.Calendars;
            //Util.WriteLine ("Predicate");
            //Convert to NSDate
            NSDate nstartDate = Util.DateTimeToNSDate (startDate);
            NSDate nendDate = Util.DateTimeToNSDate (endDate);
            NSPredicate predicate = store.PredicateForEvents (nstartDate, nendDate, calendarArray);

            //Util.WriteLine ("Fetching Events");
            // Fetch all events that match the predicate.
            var eventsArray = store.EventsMatching (predicate);
            //Util.WriteLine ("Returning results");
            if (eventsArray == null) {
                eventsArray = new List<EKEvent> ().ToArray ();
            }
            return eventsArray;
        }