OSDN Git Service

継続リピートの通知を艦隊やドックの番号のみにする
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 15 Dec 2017 11:57:48 +0000 (20:57 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 27 Jan 2018 08:33:54 +0000 (17:33 +0900)
KancolleSniffer.Test/NotificationManagerTest.cs
KancolleSniffer/MainForm.cs
KancolleSniffer/NotificationManager.cs

index 2307522..316e351 100644 (file)
@@ -377,5 +377,46 @@ namespace KancolleSniffer.Test
                 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
index 5d3e18f..25b5de2 100644 (file)
@@ -106,8 +106,9 @@ namespace KancolleSniffer
 \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
index 3f28922..ccef210 100644 (file)
@@ -54,9 +54,9 @@ namespace KancolleSniffer
             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
@@ -263,7 +263,7 @@ namespace KancolleSniffer
             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
@@ -327,17 +327,27 @@ namespace KancolleSniffer
                     _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