1
0

BacklogNotificatin.xaml.cs 4.5 KB

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