From: Kazuhiro Fujieda Date: Sat, 16 Jun 2018 12:32:00 +0000 (+0900) Subject: 大破警告をリピート可能にする X-Git-Tag: v11.0~9 X-Git-Url: http://git.osdn.net/view?p=kancollesniffer%2FKancolleSniffer.git;a=commitdiff_plain;h=03997ac63250b267597f7c3ee0904d0585bbb71c 大破警告をリピート可能にする --- diff --git a/KancolleSniffer.Test/NotificationManagerTest.cs b/KancolleSniffer.Test/NotificationManagerTest.cs index c35c6a2..242f052 100644 --- a/KancolleSniffer.Test/NotificationManagerTest.cs +++ b/KancolleSniffer.Test/NotificationManagerTest.cs @@ -326,6 +326,59 @@ namespace KancolleSniffer.Test } /// + /// リピートを例外付きで中断・再開する + /// + [TestMethod] + public void SuspendRepeatWithException() + { + var time = new TimeProvider(); + Message result = null; + var manager = + new NotificationManager((t, b, n) => { result = new Message {Title = t, Body = b, Name = n}; }, time.GetNow); + var ensei = new Message {Title = "遠征が終わりました", Body = "第二艦隊 防空射撃演習", Name = "遠征終了"}; + var taiha = new Message {Title = "大破した艦娘がいます", Body = "摩耶改二", Name = "大破警告"}; + var elapsed = 0; + while (true) + { + switch (elapsed) + { + case 0: + manager.Enqueue("遠征終了", 1, "防空射撃演習", 10); + manager.Flash(); + PAssert.That(() => ensei.Equals(result)); + break; + case 1000: + manager.Flash(); + manager.SuspendRepeat("大破警告"); + break; + case 2000: + manager.Enqueue("大破警告", "摩耶改二", 8); + manager.Flash(); + PAssert.That(() => taiha.Equals(result)); + break; + case 10000: + manager.Flash(); + PAssert.That(() => taiha.Repeat.Equals(result)); + break; + case 11000: + manager.Flash(); + manager.ResumeRepeat(); + break; + case 12000: + manager.Flash(); + PAssert.That(() => ensei.Repeat.Equals(result)); + return; + default: + manager.Flash(); + PAssert.That(() => result == null, elapsed.ToString()); + break; + } + result = null; + elapsed += 1000; + } + } + + /// /// リピート中の特定の通知を止める /// [TestMethod] diff --git a/KancolleSniffer/MainForm.cs b/KancolleSniffer/MainForm.cs index 21b1c84..7b7a89b 100644 --- a/KancolleSniffer/MainForm.cs +++ b/KancolleSniffer/MainForm.cs @@ -159,7 +159,7 @@ namespace KancolleSniffer public void Stop(string key, int fleet) => _manager.StopRepeat(key, fleet); - public void Suspend() => _manager.SuspendRepeat(); + public void Suspend(string exception = null) => _manager.SuspendRepeat(exception); public void Resume() => _manager.ResumeRepeat(); } @@ -661,7 +661,7 @@ namespace KancolleSniffer { if (!_sniffer.BadlyDamagedShips.Any()) return; - _notificationManager.Enqueue("大破警告", string.Join(" ", _sniffer.BadlyDamagedShips)); + SetNotification("大破警告", string.Join(" ", _sniffer.BadlyDamagedShips)); _notificationManager.Flash(); } diff --git a/KancolleSniffer/NotificationConfigDialog.cs b/KancolleSniffer/NotificationConfigDialog.cs index 8b20b12..0c67c7b 100644 --- a/KancolleSniffer/NotificationConfigDialog.cs +++ b/KancolleSniffer/NotificationConfigDialog.cs @@ -40,7 +40,6 @@ namespace KancolleSniffer { case "艦娘数超過": case "装備数超過": - case "大破警告": textBoxPreliminary.Visible = labelPreliminary.Visible = checkBoxPreliminary.Visible = textBoxRepeat.Visible = labelRepeat.Visible = checkBoxRepeat.Visible = checkBoxCont.Visible = false; diff --git a/KancolleSniffer/NotificationManager.cs b/KancolleSniffer/NotificationManager.cs index e9fdef1..1114ec6 100644 --- a/KancolleSniffer/NotificationManager.cs +++ b/KancolleSniffer/NotificationManager.cs @@ -78,9 +78,9 @@ namespace KancolleSniffer _notificationQueue.StopRepeat(key, fleet); } - public void SuspendRepeat() + public void SuspendRepeat(string exception = "") { - _notificationQueue.SuspendRepeat(); + _notificationQueue.SuspendRepeat(exception); } public void ResumeRepeat() @@ -278,6 +278,7 @@ namespace KancolleSniffer private readonly NotificationConfig _notificationConfig = new NotificationConfig(); private DateTime _lastAlarm; private bool _suspend; + private string _suspendException; public NotificationQueue(Action alarm, Func nowFunc = null) { @@ -320,9 +321,10 @@ namespace KancolleSniffer private bool IsMatch(Notification n, string key) => n.Key.Substring(0, 4) == key.Substring(0, 4) && n.Schedule != default; - public void SuspendRepeat() + public void SuspendRepeat(string exception = null) { _suspend = true; + _suspendException = exception; } public void ResumeRepeat() @@ -336,7 +338,7 @@ namespace KancolleSniffer if (now - _lastAlarm < TimeSpan.FromSeconds(2)) return; var first = _queue.FirstOrDefault(n => n.Schedule.CompareTo(now) <= 0 && - !(_suspend && n.Schedule != default)); + !(n.Schedule != default && _suspend && n.Key != _suspendException)); if (first == null) return; var message = _notificationConfig.GenerateMessage(first); diff --git a/KancolleSniffer/Sniffer.cs b/KancolleSniffer/Sniffer.cs index f492fe2..3f0b306 100644 --- a/KancolleSniffer/Sniffer.cs +++ b/KancolleSniffer/Sniffer.cs @@ -45,7 +45,7 @@ namespace KancolleSniffer { void Stop(string key); void Stop(string key, int fleet); - void Suspend(); + void Suspend(string exception = null); void Resume(); } @@ -170,7 +170,7 @@ namespace KancolleSniffer _cellInfo.Port(); SaveState(); RepeatingTimerController?.Resume(); - foreach (var s in new[] {"遠征終了", "入渠終了", "疲労回復", "泊地修理"}) + foreach (var s in new[] {"遠征終了", "入渠終了", "疲労回復", "泊地修理", "大破警告"}) RepeatingTimerController?.Stop(s); return Update.All; } @@ -517,7 +517,7 @@ namespace KancolleSniffer _miscTextInfo.InspectMapStart(data); _questInfo.InspectMapStart(data); _cellInfo.InspectMapStart(data); - RepeatingTimerController?.Suspend(); + RepeatingTimerController?.Suspend("大破警告"); return Update.Timer | Update.Ship | Update.Cell; } if (url.EndsWith("api_req_map/next"))