private async Task SetMonth(int delta) { if (delta < 1000) { date = delta == 0 ? DateTime.Now.StartOfMonth() : date.AddMonths(delta); } var endDate = date.EndOfMonth(); var settings = new SettingsProvider(); pages = await new OneNoteProvider().GetPages( date.StartOfCalendarMonthView(), date.EndOfCalendarView(), await settings.GetNotebookIDs(), settings.Created, settings.Modified, settings.Deleted); if (monthButton.Checked) { monthView.SetRange(date, endDate, pages); } else { detailView.SetRange(date, endDate, pages); } dateLabel.Text = date.ToString("MMMM yyyy"); nextButton.Enabled = todayButton.Enabled = !DateTime.Now.EqualsMonth(date); }
public void SetRange(DateTime startDate, DateTime endDate, CalendarPages pages) { listbox.Items.Clear(); var date = startDate; while (date <= endDate) { var settings = new SettingsProvider(); var daypages = new CalendarPages(); // filtering prioritizes modified over created and prevent pages from being // displayed twice in the month if both created and modified in the same month daypages.AddRange(pages.Where(p => (settings.Modified && p.Modified.Date.Equals(date)) || (!settings.Modified && p.Created.Date.Equals(date)) )); if (daypages.Any() || settings.Empty) { listbox.Items.Add(new DayItem { Date = date, Pages = daypages }); } date = date.AddDays(1); } Invalidate(); }
/// <summary> /// Respond to the monthView Day header to show daily details /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private async void ShowDayView(object sender, CalendarDayEventArgs e) { contentPanel.Controls.Clear(); if (detailView == null) { detailView = new DetailView { Dock = DockStyle.Fill, Location = new System.Drawing.Point(0, 0), Name = "dayView", TabIndex = 0 }; detailView.HoverPage += ShowPageStatus; detailView.ClickedPage += NavigateToPage; detailView.SnappedPage += SnappedPage; } var endDate = date.EndOfMonth(); var settings = new SettingsProvider(); pages = await new OneNoteProvider().GetPages( date.StartOfCalendarMonthView(), date.EndOfCalendarView(), await settings.GetNotebookIDs(), settings.Created, settings.Modified, settings.Deleted); detailView.SetRange(date, endDate, pages); contentPanel.Controls.Add(detailView); }
/// <summary> /// /// </summary> /// <param name="startDate"></param> /// <param name="endDate"></param> /// <param name="notebookIDs"></param> /// <param name="created"></param> /// <param name="modified"></param> /// <param name="deleted"></param> /// <returns></returns> public async Task <CalendarPages> GetPages( DateTime startDate, DateTime endDate, IEnumerable <string> notebookIDs, bool created, bool modified, bool deleted) { using (one = new OneNote()) { var notebooks = await GetNotebooks(notebookIDs); var ns = notebooks.GetNamespaceOfPrefix(OneNote.Prefix); // filter to selected month... var pages = new CalendarPages(); pages.AddRange(notebooks.Descendants(ns + "Page") .Where(e => deleted || e.Attribute("isInRecycleBin") == null) // collect all pages .Select(e => new { Page = e, Created = DateTime.Parse(e.Attribute("dateTime").Value), Modified = DateTime.Parse(e.Attribute("lastModifiedTime").Value), IsDeleted = e.Attribute("isInRecycleBin") != null }) // filter by one or both filters .Where(a => (created && a.Created.InRange(startDate, endDate)) || (modified && a.Modified.InRange(startDate, endDate))) // prefer creation time .OrderBy(a => created ? a.Created : a.Modified) // pretty it up .Select(a => new CalendarPage { PageID = a.Page.Attribute("ID").Value, Path = a.Page.Ancestors() .Where(n => n.Attribute("name") != null) .Select(n => n.Attribute("name").Value) .Aggregate((name1, name2) => $"{name2} > {name1}"), Title = a.Page.Attribute("name").Value, Created = a.Created, Modified = a.Modified, IsDeleted = a.IsDeleted })); pages.ForEach(page => { var DeletedPages = "OneNote_RecycleBin > Deleted Pages"; if (page.Path.EndsWith(DeletedPages)) { page.Path = page.Path.Substring( 0, page.Path.Length - DeletedPages.Length) + "Recycle Bin"; } }); return(pages); } }
private void MakeDayList(CalendarPages pages) { days = new CalendarDays(); var settings = new SettingsProvider(); var first = date.DayOfWeek; var last = DateTime.DaysInMonth(date.Year, date.Month); var dow = firstDow == DayOfWeek.Sunday ? (int)first : first == DayOfWeek.Sunday ? 6 : (int)first - 1; var runner = date.Date; // previous month if (dow > 0) { runner = runner.AddDays(-dow); for (int i = 0; i < dow; i++) { MakeDay(days, pages, runner, settings.Modified); runner = runner.AddDays(1.0); } } // month for (int i = 1; i <= last; i++) { MakeDay(days, pages, runner, settings.Modified, true); runner = runner.AddDays(1.0); } // next month var rest = 7 - days.Count % 7; if (rest < 7) { for (int i = 0; i < rest; i++) { MakeDay(days, pages, runner, settings.Modified); runner = runner.AddDays(1.0); } } }
public void SetRange(DateTime startDate, DateTime endDate, CalendarPages pages) { date = startDate.StartOfMonth(); firstDow = Thread.CurrentThread.CurrentUICulture.DateTimeFormat.FirstDayOfWeek; MakeDayList(pages); for (int i = Controls.Count - 1; i >= 0; i--) { if (Controls[i] is MoreButton) { var c = Controls[i]; Controls.RemoveAt(i); c.Dispose(); } } Invalidate(); }
private void MakeDay( CalendarDays days, CalendarPages pages, DateTime date, bool modified, bool inMonth = false) { var day = new CalendarDay { Date = date, InMonth = inMonth }; // filtering prioritizes modified over created and prevent pages from being // displayed twice in the month if both created and modified in the same month var pags = pages.Where(p => (modified && p.Modified.Date.Equals(date)) || (!modified && p.Created.Date.Equals(date)) ); pags.ForEach(p => day.Pages.Add(p)); days.Add(day); }