OSDN Git Service

モデルとビューの分離
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / QuestInfo.cs
1 // Copyright (C) 2013 Kazuhiro Fujieda <fujieda@users.sourceforge.jp>\r
2 // \r
3 // This program is part of KancolleSniffer.\r
4 //\r
5 // KancolleSniffer is free software: you can redistribute it and/or modify\r
6 // it under the terms of the GNU General Public License as published by\r
7 // the Free Software Foundation, either version 3 of the License, or\r
8 // (at your option) any later version.\r
9 //\r
10 // This program is distributed in the hope that it will be useful,\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 // GNU General Public License for more details.\r
14 //\r
15 // You should have received a copy of the GNU General Public License\r
16 // along with this program; if not, see <http://www.gnu.org/licenses/>.\r
17 \r
18 using System;\r
19 using System.Collections.Generic;\r
20 using System.Linq;\r
21 \r
22 namespace KancolleSniffer\r
23 {\r
24     public class QuestInfo\r
25     {\r
26         private DateTime _lastCreared;\r
27         private readonly SortedDictionary<int, NameAndProgress> _quests = new SortedDictionary<int, NameAndProgress>();\r
28 \r
29         public void Inspect(dynamic json)\r
30         {\r
31             var resetTime = DateTime.Today.AddHours(5);\r
32             if (DateTime.Now >= resetTime && _lastCreared < resetTime)\r
33             {\r
34                 _quests.Clear(); // 前日に未消化のデイリーを消す。\r
35                 _lastCreared = DateTime.Now;\r
36             }\r
37             foreach (var entry in json.api_list)\r
38             {\r
39                 if (entry is double) // -1の場合がある。\r
40                     continue;\r
41 \r
42                 var id = (int)entry.api_no;\r
43                 var state = (int)entry.api_state;\r
44                 var progress = (int)entry.api_progress_flag;\r
45                 var name = (string)entry.api_title;\r
46 \r
47                 switch (progress)\r
48                 {\r
49                     case 0:\r
50                         break;\r
51                     case 1:\r
52                         progress = 50;\r
53                         break;\r
54                     case 2:\r
55                         progress = 80;\r
56                         break;\r
57                 }\r
58                 switch (state)\r
59                 {\r
60                     case 2:\r
61                         _quests[id] = new NameAndProgress {Name = name, Progress = progress};\r
62                         break;\r
63                     case 1:\r
64                     case 3:\r
65                         _quests.Remove(id);\r
66                         continue;\r
67                 }\r
68             }\r
69         }\r
70 \r
71         public NameAndProgress[] Quests\r
72         {\r
73             get { return _quests.Values.ToArray(); }\r
74         }\r
75 \r
76         public struct NameAndProgress\r
77         {\r
78             public string Name { get; set; }\r
79             public int Progress { get; set; }\r
80         }\r
81     }\r
82 }