BacklogNotificatin.xaml.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. using GeekDesk.Constant;
  2. using GeekDesk.Task;
  3. using GeekDesk.Util;
  4. using GeekDesk.ViewModel;
  5. using HandyControl.Controls;
  6. using Quartz;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows;
  13. using System.Windows.Controls;
  14. using System.Windows.Data;
  15. using System.Windows.Documents;
  16. using System.Windows.Input;
  17. using System.Windows.Media;
  18. using System.Windows.Media.Imaging;
  19. using System.Windows.Shapes;
  20. namespace GeekDesk.Control.Other
  21. {
  22. /// <summary>
  23. /// BacklogNotificatin.xaml 的交互逻辑
  24. /// </summary>
  25. public partial class BacklogNotificatin
  26. {
  27. private AppData appData = MainWindow.appData;
  28. public BacklogNotificatin(ToDoInfo info)
  29. {
  30. InitializeComponent();
  31. this.DataContext = info;
  32. }
  33. private void BacklogDone_Click(object sender, RoutedEventArgs e)
  34. {
  35. ToDoInfo info = this.DataContext as ToDoInfo;
  36. info.DoneTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  37. if (info.ExecType == TodoTaskExecType.CRON)
  38. {
  39. CronExpression exp = new CronExpression(info.Cron);
  40. DateTime nowTime = DateTime.Now;
  41. //计算下次执行时间
  42. DateTime nextTime = DateTime.SpecifyKind(exp.GetNextValidTimeAfter(nowTime).Value.LocalDateTime, DateTimeKind.Local);
  43. string nextTimeStr = nextTime.ToString("yyyy-MM-dd HH:mm:ss");
  44. info.ExeTime = nextTimeStr;
  45. TimeSpan ts = nextTime.Subtract(nowTime);
  46. int minutes = (int)Math.Ceiling(ts.TotalMinutes);
  47. if (minutes < 0)
  48. {
  49. minutes = 0;
  50. }
  51. if (minutes > 60)
  52. {
  53. int m = minutes % 60;
  54. int h = minutes / 60;
  55. Growl.SuccessGlobal("下次任务将在 " + h + " 小时零 " + m + " 分钟后提醒您!");
  56. }
  57. else
  58. {
  59. Growl.SuccessGlobal("下次任务将在 " + minutes + " 分钟后提醒您!");
  60. }
  61. }
  62. else
  63. {
  64. appData.ToDoList.Remove(info); //执行任务删除
  65. appData.HiToDoList.Add(info); //添加历史任务
  66. }
  67. ToDoTask.activityBacklog[info].Close(); //关闭桌面通知
  68. ToDoTask.activityBacklog.Remove(info);//激活任务删除
  69. CommonCode.SaveAppData(appData);
  70. }
  71. /// <summary>
  72. /// 只允许输入数字
  73. /// </summary>
  74. /// <param name="sender"></param>
  75. /// <param name="e"></param>
  76. private void DelayTime_PreviewTextInput(object sender, TextCompositionEventArgs e)
  77. {
  78. int textBoxInt;
  79. //转化按下的键为数字,如果不是数字则会抓取到报错信息,不键入,反之则键入
  80. try
  81. {
  82. textBoxInt = int.Parse($"{e.Text}");
  83. }
  84. catch (FormatException)
  85. {
  86. e.Handled = true;
  87. }
  88. }
  89. /// <summary>
  90. /// 失去焦点前如果为空
  91. /// </summary>
  92. /// <param name="sender"></param>
  93. /// <param name="e"></param>
  94. private void DelayTime_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
  95. {
  96. int textBoxInt;
  97. //转化val为数字,如果不是数字则会抓取到报错信息
  98. try
  99. {
  100. textBoxInt = int.Parse(DelayTime.Text.Trim());
  101. }
  102. catch (FormatException)
  103. {
  104. DelayTime.Text = "10";
  105. }
  106. }
  107. /// <summary>
  108. /// 推迟提醒
  109. /// </summary>
  110. /// <param name="sender"></param>
  111. /// <param name="e"></param>
  112. private void DelayButton_Click(object sender, RoutedEventArgs e)
  113. {
  114. ToDoInfo info = this.DataContext as ToDoInfo;
  115. int time = int.Parse(DelayTime.Text);
  116. string type = DelayType.Text;
  117. switch (type)
  118. {
  119. case "分":
  120. info.ExeTime = DateTime.Now.AddMinutes(time).ToString("yyyy-MM-dd HH:mm:ss");
  121. Growl.SuccessGlobal("将在 " + time + " 分钟后再次提醒您!");
  122. break;
  123. case "时":
  124. info.ExeTime = DateTime.Now.AddHours(time).ToString("yyyy-MM-dd HH:mm:ss");
  125. Growl.SuccessGlobal("将在 " + time + " 小时后再次提醒您!");
  126. break;
  127. }
  128. ToDoTask.activityBacklog[info].Close(); //关闭桌面通知
  129. ToDoTask.activityBacklog.Remove(info);//激活任务删除
  130. }
  131. }
  132. }