void System.Windows.Markup.IComponentConnector.Connect(int connectionId, object target) { switch (connectionId) { case 1: this.DlgOverdue = ((PNotes.NET.WndOverdue)(target)); #line 16 "..\..\WndOverdue.xaml" this.DlgOverdue.Loaded += new System.Windows.RoutedEventHandler(this.DlgOverdue_Loaded); #line default #line hidden return; case 2: this.grdOverdue = ((System.Windows.Controls.ListView)(target)); #line 24 "..\..\WndOverdue.xaml" this.grdOverdue.MouseDoubleClick += new System.Windows.Input.MouseButtonEventHandler(this.grdOverdue_MouseDoubleClick); #line default #line hidden #line 24 "..\..\WndOverdue.xaml" this.grdOverdue.SelectionChanged += new System.Windows.Controls.SelectionChangedEventHandler(this.grdOverdue_SelectionChanged); #line default #line hidden return; case 3: this.brdHost = ((System.Windows.Controls.Border)(target)); return; case 4: this.cmdOK = ((System.Windows.Controls.Button)(target)); #line 36 "..\..\WndOverdue.xaml" this.cmdOK.Click += new System.Windows.RoutedEventHandler(this.cmdOK_Click); #line default #line hidden return; } this._contentLoaded = true; }
private void checkOverdueNotes() { try { if (!PNStatic.Settings.Schedule.TrackOverdue) return; if (PNSingleton.Instance.InOverdueChecking) return; PNSingleton.Instance.InOverdueChecking = true; var now = DateTime.Now; var list = new List<PNote>(); var days = 0; var notes = PNStatic.Notes.Where(n => n.Schedule.Type != ScheduleType.None && n.Schedule.Track); foreach (var n in notes) { DateTime start, alarmDate, startDate; long seconds; var changeZone = n.Schedule.TimeZone != TimeZoneInfo.Local; switch (n.Schedule.Type) { case ScheduleType.Once: alarmDate = changeZone ? TimeZoneInfo.ConvertTime(n.Schedule.AlarmDate, TimeZoneInfo.Local, n.Schedule.TimeZone) : n.Schedule.AlarmDate; if (now > alarmDate) { list.Add(n); } break; case ScheduleType.EveryDay: alarmDate = changeZone ? TimeZoneInfo.ConvertTime(n.Schedule.AlarmDate, TimeZoneInfo.Local, n.Schedule.TimeZone) : n.Schedule.AlarmDate; if ((n.Schedule.LastRun == DateTime.MinValue || n.Schedule.LastRun <= now.AddDays(-1)) && now.IsTimeMore(alarmDate)) { list.Add(n); } break; case ScheduleType.After: start = n.Schedule.StartFrom == ScheduleStart.ExactTime ? (changeZone ? TimeZoneInfo.ConvertTime(n.Schedule.StartDate, TimeZoneInfo.Local, n.Schedule.TimeZone) : n.Schedule.StartDate) : PNStatic.StartTime; PNStatic.NormalizeStartDate(ref start); seconds = (now - start).Ticks / TimeSpan.TicksPerSecond; if (seconds > n.Schedule.AlarmAfter.TotalSeconds) { list.Add(n); } break; case ScheduleType.RepeatEvery: if (n.Schedule.LastRun == DateTime.MinValue) { start = n.Schedule.StartFrom == ScheduleStart.ExactTime ? (changeZone ? TimeZoneInfo.ConvertTime(n.Schedule.StartDate, TimeZoneInfo.Local, n.Schedule.TimeZone) : n.Schedule.StartDate) : PNStatic.StartTime; } else { start = n.Schedule.LastRun; } PNStatic.NormalizeStartDate(ref start); seconds = (now - start).Ticks / TimeSpan.TicksPerSecond; if (seconds > n.Schedule.AlarmAfter.TotalSeconds) { list.Add(n); } break; case ScheduleType.Weekly: alarmDate = changeZone ? TimeZoneInfo.ConvertTime(n.Schedule.AlarmDate, TimeZoneInfo.Local, n.Schedule.TimeZone) : n.Schedule.AlarmDate; var dayMin = n.Schedule.Weekdays.Min(); // if schedule has not been triggered yet if (n.Schedule.LastRun == DateTime.MinValue && (now.DayOfWeek > dayMin || (now.DayOfWeek == dayMin && now.IsTimeMore(alarmDate)))) { list.Add(n); } // else else if (now > n.Schedule.LastRun.AddDays(-1)) { var diffDays = (int)Math.Floor((now - n.Schedule.LastRun).TotalDays); if (n.Schedule.Weekdays.Count == 1) { days = 7; } else { for (var i = 0; i < n.Schedule.Weekdays.Count; i++) { if (n.Schedule.Weekdays[i] != now.DayOfWeek) continue; if (i == n.Schedule.Weekdays.Count - 1) days = Math.Abs((int)n.Schedule.Weekdays[0] - (int)n.Schedule.Weekdays[i]); else days = (int)n.Schedule.Weekdays[i + 1] - (int)n.Schedule.Weekdays[i]; break; } } if (diffDays > days) { list.Add(n); } else if (diffDays == days) { if (now.IsTimeMore(alarmDate)) { list.Add(n); } } } break; case ScheduleType.MonthlyDayOfWeek: // if schedule has not been triggered yet if (n.Schedule.LastRun == DateTime.MinValue) { alarmDate = changeZone ? TimeZoneInfo.ConvertTime(n.Schedule.AlarmDate, TimeZoneInfo.Local, n.Schedule.TimeZone) : n.Schedule.AlarmDate; startDate = changeZone ? TimeZoneInfo.ConvertTime(n.Schedule.StartDate, TimeZoneInfo.Local, n.Schedule.TimeZone) : n.Schedule.StartDate; if (now.DayOfWeek == n.Schedule.MonthDay.WeekDay) { var isLast = false; var ordinal = PNStatic.WeekdayOrdinal(now, n.Schedule.MonthDay.WeekDay, ref isLast); if (n.Schedule.MonthDay.OrdinalNumber == DayOrdinal.Last) { if (isLast) { if (now.IsTimeMore(alarmDate)) { list.Add(n); } } } else { if ((int)n.Schedule.MonthDay.OrdinalNumber == ordinal) { if (now.IsTimeMore(alarmDate)) { list.Add(n); } } } } else { if (weekdayOccured(startDate, now.AddDays(-1), n.Schedule.MonthDay.WeekDay, n.Schedule.MonthDay.OrdinalNumber)) { list.Add(n); } } } else { if (weekdayOccured(n.Schedule.LastRun.AddDays(1), now, n.Schedule.MonthDay.WeekDay, n.Schedule.MonthDay.OrdinalNumber)) { list.Add(n); } } break; case ScheduleType.MonthlyExact: alarmDate = changeZone ? TimeZoneInfo.ConvertTime(n.Schedule.AlarmDate, TimeZoneInfo.Local, n.Schedule.TimeZone) : n.Schedule.AlarmDate; startDate = changeZone ? TimeZoneInfo.ConvertTime(n.Schedule.StartDate, TimeZoneInfo.Local, n.Schedule.TimeZone) : n.Schedule.StartDate; // if schedule has not been triggered yet if (n.Schedule.LastRun == DateTime.MinValue) { // if now is exactly the day if (now.Day == alarmDate.Day) { if (now.IsTimeMore(alarmDate)) { list.Add(n); } } else { // check for day occurence if (dayOcurred(startDate, now.AddDays(-1), alarmDate.Day)) { list.Add(n); } } } else { // check for day occurence if (dayOcurred(n.Schedule.LastRun, now, alarmDate.Day)) { list.Add(n); } } break; case ScheduleType.MultipleAlerts: foreach (var ma in n.Schedule.MultiAlerts.Where(a => !a.Raised)) { alarmDate = changeZone ? TimeZoneInfo.ConvertTime(ma.Date, TimeZoneInfo.Local, n.Schedule.TimeZone) : ma.Date; if (now <= alarmDate) continue; list.Add(n); break; } break; } } if (list.Count <= 0) return; var dov = new WndOverdue(list); dov.ShowDialog(); } catch (Exception ex) { PNStatic.LogException(ex); } finally { PNSingleton.Instance.InOverdueChecking = false; } }