+ private void NotifyAkashiTimer()\r
+ {\r
+ var akashi = _sniffer.AkashiTimer;\r
+ var msgs = akashi.GetNotice(_prev, _now);\r
+ if (msgs.Length == 0)\r
+ {\r
+ _notificationManager.StopRepeat("泊地修理");\r
+ return;\r
+ }\r
+ if (!akashi.CheckRepairing(_now) && !(akashi.CheckPresetRepairing() && _config.UsePresetAkashi))\r
+ {\r
+ _notificationManager.StopRepeat("泊地修理");\r
+ return;\r
+ }\r
+ var skipPreliminary = false;\r
+ if (msgs[0].Proceeded == "20分経過しました。")\r
+ {\r
+ SetNotification("泊地修理20分経過", msgs[0].Proceeded);\r
+ msgs[0].Proceeded = "";\r
+ skipPreliminary = true;\r
+ // 修理完了がいるかもしれないので続ける\r
+ }\r
+ for (var i = 0; i < ShipInfo.FleetCount; i++)\r
+ {\r
+ if (msgs[i].Proceeded != "")\r
+ SetNotification("泊地修理進行", i, msgs[i].Proceeded);\r
+ if (msgs[i].Completed != "")\r
+ SetNotification("泊地修理完了", i, msgs[i].Completed);\r
+ }\r
+ var pre = TimeSpan.FromSeconds(_config.Notifications["泊地修理20分経過"].PreliminaryPeriod);\r
+ if (skipPreliminary || pre == TimeSpan.Zero)\r
+ return;\r
+ if ((msgs = akashi.GetNotice(_prev + pre, _now + pre))[0].Proceeded == "20分経過しました。")\r
+ SetPreNotification("泊地修理20分経過", 0, msgs[0].Proceeded);\r
+ }\r
+\r
+ private void SetNotification(string key, string subject)\r
+ {\r
+ SetNotification(key, 0, subject);\r
+ }\r
+\r
+ private void SetNotification(string key, int fleet, string subject)\r
+ {\r
+ var spec = _config.Notifications[_notificationManager.KeyToName(key)];\r
+ _notificationManager.Enqueue(key, fleet, subject,\r
+ (spec.Flags & _config.NotificationFlags & NotificationType.Repeat) == 0 ? 0 : spec.RepeatInterval);\r
+ }\r
+\r
+ private void SetPreNotification(string key, int fleet, string subject)\r
+ {\r
+ var spec = _config.Notifications[_notificationManager.KeyToName(key)];\r
+ if ((spec.Flags & NotificationType.Preliminary) != 0)\r
+ _notificationManager.Enqueue(key, fleet, subject, 0, true);\r
+ }\r
+\r