public async Task DoLoadCalendarEventsGrouped(DateTime dStart, DateTime dEnd, int iMax = 0) { try { var newEvents = new SortedDictionary <DateTime, SortedDictionary <DateTime, CalendarEvent> >(); await DoLoadCalendarEventsListed(dStart, dEnd, iMax); int iMs = 0; foreach (CalendarEvent calEvent in ListedDates) { DateTime tFirstDay = calEvent.Start; if (tFirstDay < dStart) { tFirstDay = dStart; } DateTime tLastDay = calEvent.End; if (tFirstDay > dEnd) { tLastDay = dEnd; } for (DateTime tDay = tFirstDay.Date; tDay < tLastDay; tDay = tDay.AddDays(1)) { iMs++; if (!newEvents.ContainsKey(tDay)) { newEvents.Add(tDay, new SortedDictionary <DateTime, CalendarEvent>()); } newEvents[tDay].Add(calEvent.SortTime.AddMilliseconds(iMs), calEvent); } } base.Clear(); int iCount = 0; var allEvents = new List <CalendarEvent>(); var allDatesAndEvents = new List <object>(); foreach (DateTime d in newEvents.Keys) { base[d] = newEvents[d].Values; iCount += newEvents[d].Count; allDatesAndEvents.Add(d); allDatesAndEvents.AddRange(newEvents[d].Values); allEvents.AddRange(newEvents[d].Values); } AllEvents.Clear(); AllEvents.AddRange(allEvents); AllDatesAndEvents.Clear(); AllDatesAndEvents.AddRange(allDatesAndEvents); allEvents.Clear(); allDatesAndEvents.Clear(); } catch (Exception ex) { base.Clear(); ex.ToString(); xLog.Debug("Error reading Calendar Events: " + ex.GetType().Name + ": " + ex.Message); } }
async Task ExecuteRefreshCommand() { if (IsBusy) { return; } IsBusy = true; try { var table = await CloudService.GetTableAsync <Event>(); var list = await table.ReadAllEventsAsync(); AllEvents.Clear(); DatesWithEvents.Clear(); foreach (var currentEvent in list) { AllEvents.Add(currentEvent); SpecialDate specialDate = new SpecialDate(currentEvent.Date); specialDate.Selectable = true; specialDate.BorderColor = Color.White; specialDate.BorderWidth = 2; DatesWithEvents.Add(specialDate); } ShowEventsOfTheDay(); await CloudService.SyncOfflineCacheAsync(); } catch (Exception ex) { Debug.WriteLine($"[EventsViewModel] Error loading events: {ex.Message}"); } finally { IsBusy = false; } }