using System;\r
using System.Collections.Generic;\r
using System.Linq;\r
-using System.Web;\r
\r
namespace KancolleSniffer\r
{\r
Reparing = 4\r
}\r
\r
- public void SetTimer(bool port = false)\r
+ public void Port()\r
{\r
+ CheckFleet();\r
var now = DateTime.Now;\r
- for (var fleet = 0; fleet < ShipInfo.FleetCount; fleet++)\r
- CheckFleet(fleet);\r
- if (_repairStatuses.Any(r => (r.State & State.Reset) == State.Reset))\r
- {\r
- _start = now;\r
- return;\r
- }\r
- if (port && now - _start > TimeSpan.FromMinutes(20))\r
+ var reparing = _repairStatuses.Any(r => (r.State & State.Reparing) != 0);\r
+ var stop = _repairStatuses.All(r => (r.State & State.Continue) == 0);\r
+ if (now - _start > TimeSpan.FromMinutes(20))\r
{\r
- if (_repairStatuses.Any(r => (r.State & State.Reparing) == State.Reparing))\r
+ if (reparing)\r
_start = now;\r
- else if (_repairStatuses.All(r => (r.State & State.Continue) == 0))\r
+ else if (stop)\r
_start = DateTime.MinValue;\r
}\r
- else if (_repairStatuses.Any(r => (r.State & State.Continue) != 0))\r
+ else if (!stop && _start == DateTime.MinValue)\r
{\r
- if (_start == DateTime.MinValue)\r
- _start = now;\r
+ _start = now;\r
}\r
}\r
\r
+ public void DeckChanged()\r
+ {\r
+ CheckFleet();\r
+ if (_repairStatuses.Any(r => (r.State & State.Reset) != 0))\r
+ _start = DateTime.Now;\r
+ }\r
+\r
+ public void CheckFleet()\r
+ {\r
+ for (var fleet = 0; fleet < ShipInfo.FleetCount; fleet++)\r
+ CheckFleet(fleet);\r
+ }\r
+\r
private void CheckFleet(int fleet)\r
{\r
var deck = _shipInfo.GetDeck(fleet).ToArray();\r
repair.Deck = deck;\r
}\r
\r
- public void InspectPresetSelect(string request)\r
- {\r
- var values = HttpUtility.ParseQueryString(request);\r
- var deck = int.Parse(values["api_deck_id"]) - 1;\r
- _repairStatuses[deck].Deck = _shipInfo.GetDeck(deck);\r
- SetTimer();\r
- }\r
-\r
public RepairSpan[] GetTimers(int fleet)\r
=> _start == DateTime.MinValue ? new RepairSpan[0] : _repairStatuses[fleet].GetTimers(_start, DateTime.Now);\r
\r
_conditionTimer.CalcRegenTime();\r
_missionInfo.InspectDeck(data.api_deck_port);\r
_dockInfo.InspectNDock(data.api_ndock);\r
- _akashiTimer.SetTimer(true);\r
+ _akashiTimer.Port();\r
_achievement.InspectBasic(data.api_basic);\r
if (data.api_parallel_quest_count()) // 昔のログにはないので\r
_questInfo.QuestCount = (int)data.api_parallel_quest_count;\r
{\r
_dockInfo.InspectNDock(data);\r
_conditionTimer.CheckCond();\r
- _akashiTimer.SetTimer();\r
+ _akashiTimer.CheckFleet();\r
return Update.NDock | Update.Timer | Update.Ship;\r
}\r
if (url.EndsWith("api_get_member/questlist"))\r
{\r
_shipInfo.InspectDeck(data);\r
_missionInfo.InspectDeck(data);\r
- _akashiTimer.SetTimer();\r
+ _akashiTimer.DeckChanged();\r
return Update.Mission | Update.Timer;\r
}\r
if (url.EndsWith("api_get_member/ship2"))\r
{\r
// ここだけjsonなので注意\r
_shipInfo.InspectShip(json);\r
- _akashiTimer.SetTimer();\r
+ _akashiTimer.CheckFleet();\r
_battleInfo.InBattle = false;\r
return Update.Item | Update.Ship | Update.Battle;\r
}\r
if (url.EndsWith("api_get_member/ship_deck"))\r
{\r
_shipInfo.InspectShip(data);\r
- _akashiTimer.SetTimer();\r
+ _akashiTimer.CheckFleet();\r
_battleInfo.InBattle = false;\r
return Update.Ship | Update.Battle;\r
}\r
if (url.EndsWith("api_get_member/ship3"))\r
{\r
_shipInfo.InspectShip(data);\r
- _akashiTimer.SetTimer();\r
+ _akashiTimer.CheckFleet();\r
_conditionTimer.CheckCond();\r
return Update.Ship;\r
}\r
_shipInfo.InspectDestroyShip(request, data);\r
_materialInfo.InspectDestroyShip(data);\r
_conditionTimer.CheckCond();\r
- _akashiTimer.SetTimer();\r
+ _akashiTimer.CheckFleet();\r
return Update.Item | Update.Ship;\r
}\r
if (url.EndsWith("api_req_kousyou/destroyitem2"))\r
if (url.EndsWith("api_req_hensei/change"))\r
{\r
_shipInfo.InspectChange(request);\r
- _akashiTimer.SetTimer();\r
+ _akashiTimer.DeckChanged();\r
return Update.Ship;\r
}\r
if (url.EndsWith("api_req_hensei/preset_select"))\r
{\r
_shipInfo.InspectDeck(new[] {data});\r
- _akashiTimer.InspectPresetSelect(request);\r
+ _akashiTimer.CheckFleet();\r
return Update.Ship;\r
}\r
if (url.EndsWith("api_req_hokyu/charge"))\r
{\r
_shipInfo.InspectPowerup(request, data);\r
_conditionTimer.CheckCond();\r
- _akashiTimer.SetTimer();\r
+ _akashiTimer.CheckFleet();\r
return Update.Item | Update.Ship;\r
}\r
if (url.EndsWith("api_req_kaisou/slot_exchange_index"))\r
{\r
_dockInfo.InspectNyukyo(request);\r
_conditionTimer.CheckCond();\r
- _akashiTimer.SetTimer();\r
+ _akashiTimer.CheckFleet();\r
return Update.Item | Update.Ship;\r
}\r
if (url.EndsWith("api_req_nyukyo/speedchange"))\r