OSDN Git Service

プロキシの自動設定を実装する
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / Config.cs
1 // Copyright (C) 2014, 2015 Kazuhiro Fujieda <fujieda@users.osdn.me>\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.Collections.Generic;\r
19 using System.Drawing;\r
20 using System.IO;\r
21 using System.Windows.Forms;\r
22 using Codeplex.Data;\r
23 \r
24 namespace KancolleSniffer\r
25 {\r
26     public class ProxyConfig\r
27     {\r
28         public const int DefaultListenPort = 8080;\r
29         public const string AutoConfigUrl = "http://kancollesniffer.osdn.jp/proxy.pac";\r
30         public bool Auto { get; set; }\r
31         public int Listen { get; set; }\r
32         public bool UseUpstream { get; set; }\r
33         public int UpstreamPort { get; set; }\r
34 \r
35         public ProxyConfig()\r
36         {\r
37             Auto = true;\r
38             Listen = DefaultListenPort;\r
39             UseUpstream = false;\r
40             UpstreamPort = 8888;\r
41         }\r
42 \r
43         public ProxyConfig Clone()\r
44         {\r
45             return (ProxyConfig)MemberwiseClone();\r
46         }\r
47     }\r
48 \r
49     public class ShipListConfig\r
50     {\r
51         public Point Location { get; set; }\r
52         public Size Size { get; set; }\r
53         public bool ShipType { get; set; }\r
54         public List<int>[] ShipGroup { get; set; }\r
55 \r
56         public ShipListConfig()\r
57         {\r
58             Location = new Point(int.MinValue, int.MinValue);\r
59             ShipGroup = new List<int>[ShipListForm.GroupCount];\r
60             for (var i = 0; i < ShipGroup.Length; i++)\r
61                 ShipGroup[i] = new List<int>();\r
62         }\r
63     }\r
64 \r
65     public class LogConfig\r
66     {\r
67         public bool On { get; set; }\r
68         public string OutputDir { get; set; }\r
69         public int MaterialLogInterval { get; set; }\r
70         public bool ServerOn { get; set; }\r
71         public int Listen { get; set; }\r
72 \r
73         public LogConfig()\r
74         {\r
75             On = true;\r
76             OutputDir = Path.GetDirectoryName(Application.ExecutablePath);\r
77             MaterialLogInterval = 10;\r
78             ServerOn = true;\r
79             Listen = 8008;\r
80         }\r
81     }\r
82 \r
83     public class Config\r
84     {\r
85         private readonly string _configFileName =\r
86             Path.Combine(Path.GetDirectoryName(Application.ExecutablePath) ?? "", "config.json");\r
87 \r
88         public Point Location { get; set; }\r
89         public bool TopMost { get; set; }\r
90         public bool HideOnMinimized { get; set; }\r
91         public bool FlashWindow { get; set; }\r
92         public bool ShowBaloonTip { get; set; }\r
93         public bool PlaySound { get; set; }\r
94         public int MarginShips { get; set; }\r
95         public int MarginEquips { get; set; }\r
96         public List<int> NotifyConditions { get; set; }\r
97         public List<int> ResetHours { get; set; }\r
98         public bool AlwaysShowResultRank { get; set; }\r
99         public int SoundVolume { get; set; }\r
100         public string MissionSoundFile { get; set; }\r
101         public string NDockSoundFile { get; set; }\r
102         public string KDockSoundFile { get; set; }\r
103         public string MaxShipsSoundFile { get; set; }\r
104         public string MaxEquipsSoundFile { get; set; }\r
105         public string DamagedShipSoundFile { get; set; }\r
106         public string Akashi20MinSoundFile { get; set; }\r
107         public string AkashiProgressSoundFile { get; set; }\r
108         public string ConditionSoundFile { get; set; }\r
109         public bool DebugLogging { get; set; }\r
110         public string DebugLogFile { get; set; }\r
111         public ProxyConfig Proxy { get; set; }\r
112         public ShipListConfig ShipList { get; set; }\r
113         public LogConfig Log { get; set; }\r
114 \r
115         public Config()\r
116         {\r
117             Location = new Point(int.MinValue, int.MinValue);\r
118             FlashWindow = ShowBaloonTip = PlaySound = true;\r
119             MarginShips = 4;\r
120             MarginEquips = 10;\r
121             NotifyConditions = new List<int>(new[] {40, 49});\r
122             ResetHours = new List<int>(new[] {2});\r
123             AlwaysShowResultRank = false;\r
124             SoundVolume = 100;\r
125             var dir = Path.GetDirectoryName(Application.ExecutablePath) ?? "";\r
126             MissionSoundFile = Path.Combine(dir, "ensei.mp3");\r
127             NDockSoundFile = Path.Combine(dir, "nyuukyo.mp3");\r
128             KDockSoundFile = Path.Combine(dir, "kenzou.mp3");\r
129             MaxShipsSoundFile = Path.Combine(dir, "kanmusu.mp3");\r
130             MaxEquipsSoundFile = Path.Combine(dir, "soubi.mp3");\r
131             DamagedShipSoundFile = Path.Combine(dir, "taiha.mp3");\r
132             Akashi20MinSoundFile = Path.Combine(dir, "20min.mp3");\r
133             AkashiProgressSoundFile = Path.Combine(dir, "syuuri.mp3");\r
134             ConditionSoundFile = Path.Combine(dir, "hirou.mp3");\r
135             DebugLogFile = Path.Combine(dir, "log.txt");\r
136             Proxy = new ProxyConfig();\r
137             ShipList = new ShipListConfig();\r
138             Log = new LogConfig();\r
139         }\r
140 \r
141         public void Load()\r
142         {\r
143             try\r
144             {\r
145                 var config = (Config)DynamicJson.Parse(File.ReadAllText(_configFileName));\r
146                 foreach (var property in GetType().GetProperties())\r
147                     property.SetValue(this, property.GetValue(config, null), null);\r
148             }\r
149             catch (FileNotFoundException)\r
150             {\r
151             }\r
152         }\r
153 \r
154         public void Save()\r
155         {\r
156             File.WriteAllText(_configFileName, DynamicJson.Serialize(this));\r
157         }\r
158     }\r
159 }