timer.ElapseTime(1000);\r
}\r
}\r
+\r
+ /// <summary>\r
+ /// 継続中のリピートは艦隊やドックの番号だけ通知する\r
+ /// </summary>\r
+ [TestMethod]\r
+ public void ContinueRepeatWithoutSubject()\r
+ {\r
+ var timer = new MockTimer();\r
+ Message result = null;\r
+ var manager =\r
+ new NotificationManager((t, b, n) => { result = new Message {Title = t, Body = b, Name = n}; }, timer);\r
+ var expected1 = new Message {Title = "遠征が終わりました", Body = "第二艦隊 防空射撃演習", Name = "遠征終了"};\r
+ var expected2 = new Message {Title = "遠征が終わりました", Body = "第二艦隊 ", Name = "遠征終了"};\r
+ while (true)\r
+ {\r
+ switch (timer.Elapsed)\r
+ {\r
+ case 0:\r
+ manager.Enqueue("遠征終了", 1, "防空射撃演習", 10);\r
+ PAssert.That(() => expected1.Equals(result));\r
+ break;\r
+ case 2000:\r
+ manager.StopRepeat("遠征終了", true);\r
+ break;\r
+ case 10000:\r
+ PAssert.That(() => expected2.Equals(result));\r
+ break;\r
+ case 11000:\r
+ manager.StopRepeat("遠征終了", 1);\r
+ break;\r
+ case 21000:\r
+ return;\r
+ default:\r
+ PAssert.That(() => result == null, timer.Elapsed.ToString());\r
+ break;\r
+\r
+ }\r
+ result = null;\r
+ timer.ElapseTime(1000);\r
+ }\r
+ }\r
}\r
}
\ No newline at end of file
\r
public void Stop(string key)\r
{\r
- if ((_config.Notifications[key].Flags & NotificationType.Cont) == 0)\r
- _manager.StopRepeat(key);\r
+ _manager.StopRepeat(key,\r
+ (key == "入渠終了" || key == "遠征終了") &&\r
+ (_config.Notifications[key].Flags & NotificationType.Cont) != 0);\r
}\r
\r
public void Stop(string key, int fleet) => _manager.StopRepeat(key, fleet);\r
Enqueue(key, 0, subject, repeat);\r
}\r
\r
- public void StopRepeat(string key)\r
+ public void StopRepeat(string key, bool cont = false)\r
{\r
- _notificationQueue.StopRepeat(key);\r
+ _notificationQueue.StopRepeat(key, cont);\r
}\r
\r
public void StopRepeat(string key, int fleet)\r
DateTime Now { get; }\r
}\r
\r
- public class TimerWrapper : ITimer\r
+ private class TimerWrapper : ITimer\r
{\r
private readonly Timer _timer = new Timer();\r
\r
_timer.Start();\r
}\r
\r
- public void StopRepeat(string key)\r
+ public void StopRepeat(string key, bool cont = false)\r
{\r
- _queue.RemoveAll(n => n.Key.Substring(0, 4) == key.Substring(0, 4) && n.Schedule != default);\r
+ if (!cont)\r
+ {\r
+ _queue.RemoveAll(n => IsMatch(n, key));\r
+ }\r
+ else\r
+ {\r
+ foreach (var n in _queue.Where(n => IsMatch(n, key)))\r
+ n.Subject = "";\r
+ }\r
}\r
\r
public void StopRepeat(string key, int fleet)\r
{\r
- _queue.RemoveAll(n =>\r
- n.Key.Substring(0, 4) == key.Substring(0, 4) && n.Fleet == fleet && n.Schedule != default);\r
+ _queue.RemoveAll(n => IsMatch(n, key) && n.Fleet == fleet);\r
}\r
\r
+ private bool IsMatch(Notification n, string key) =>\r
+ n.Key.Substring(0, 4) == key.Substring(0, 4) && n.Schedule != default;\r
+\r
public void SuspendRepeat()\r
{\r
_suspend = true;\r