OSDN Git Service

ステータスファイルの形式をXML変更する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Wed, 25 Nov 2015 13:51:31 +0000 (22:51 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Tue, 29 Dec 2015 12:20:52 +0000 (21:20 +0900)
KancolleSniffer/Achievement.cs
KancolleSniffer/Config.cs
KancolleSniffer/ExMapInfo.cs
KancolleSniffer/MainForm.cs
KancolleSniffer/MaterialInfo.cs
KancolleSniffer/Status.cs

index 23109d9..743d9a3 100644 (file)
@@ -14,6 +14,7 @@
 \r
 using System;\r
 using System.Collections.Generic;\r
+using System.Xml.Serialization;\r
 \r
 namespace KancolleSniffer\r
 {\r
@@ -29,7 +30,11 @@ namespace KancolleSniffer
         private const double ExpPerAch = 1428.0;\r
         public double Value => (_current - Start) / ExpPerAch;\r
         public double ValueOfMonth => (_current - StartOfMonth) / ExpPerAch;\r
-        public List<int> ResetHours { get; set; }\r
+\r
+        [XmlIgnore]\r
+        public List<int> ResetHours { private get; set; }\r
+\r
+        [XmlIgnore]\r
         public bool NeedSave { get; private set; }\r
 \r
         public Achievement()\r
@@ -88,17 +93,11 @@ namespace KancolleSniffer
         {\r
             var ac = status.Achievement;\r
             if (ac == null)\r
-            {\r
-                Start = status.ExperiencePoint;\r
-                LastReset = status.LastResetTime;\r
-            }\r
-            else\r
-            {\r
-                Start = ac.Start;\r
-                StartOfMonth = ac.StartOfMonth;\r
-                LastReset = ac.LastReset;\r
-                LastResetOfMonth = ac.LastResetOfMonth;\r
-            }\r
+                return;\r
+            Start = ac.Start;\r
+            StartOfMonth = ac.StartOfMonth;\r
+            LastReset = ac.LastReset;\r
+            LastResetOfMonth = ac.LastResetOfMonth;\r
         }\r
     }\r
 }
\ No newline at end of file
index ef8f74c..e72edd7 100644 (file)
@@ -196,7 +196,15 @@ namespace KancolleSniffer
         private void ReadOldConfig()\r
         {\r
             var old = Path.Combine(_baseDir, "config.json");\r
-            var json = (dynamic)JsonParser.Parse(File.ReadAllText(old));\r
+            dynamic json;\r
+            try\r
+            {\r
+                json = JsonParser.Parse(File.ReadAllText(old));\r
+            }\r
+            catch (FileNotFoundException)\r
+            {\r
+                return;\r
+            }\r
             Location = new Point((int)json.Location.X, (int)json.Location.Y);\r
             foreach (var property in (from prop in GetType().GetProperties()\r
                 let type = prop.PropertyType\r
index 806f9b2..b6d6fc8 100644 (file)
@@ -119,7 +119,7 @@ namespace KancolleSniffer
             NeedSave = false;\r
             status.ExMapState = new ExMapState\r
             {\r
-                ClearStatusList = _clearStatus.Values.ToArray(),\r
+                ClearStatusList = _clearStatus.Values.ToList(),\r
                 LastReset = _lastReset\r
             };\r
         }\r
@@ -135,7 +135,7 @@ namespace KancolleSniffer
 \r
         public class ExMapState\r
         {\r
-            public ClearStatus[] ClearStatusList { get; set; }\r
+            public List<ClearStatus> ClearStatusList { get; set; }\r
             public DateTime LastReset { get; set; }\r
         }\r
     }\r
index aa087bb..2431199 100644 (file)
@@ -84,6 +84,7 @@ namespace KancolleSniffer
             _shipListForm = new ShipListForm(_sniffer, _config) {Owner = this};\r
             _noticeQueue = new NoticeQueue(Ring);\r
             _config.Load();\r
+            _sniffer.LoadState();\r
         }\r
 \r
         private void HttpProxy_AfterSessionComplete(HttpProxy.Session session)\r
@@ -206,7 +207,6 @@ namespace KancolleSniffer
             ApplyConfig();\r
             ApplyDebugLogSetting();\r
             ApplyLogSetting();\r
-            _sniffer.LoadState();\r
             ApplyProxySetting();\r
             SystemEvents.PowerModeChanged += SystemEvents_PowerModeChanged;\r
             if (_config.KancolleDb.On)\r
index 4901d59..d8f6168 100644 (file)
@@ -14,6 +14,7 @@
 \r
 using System;\r
 using System.Linq;\r
+using System.Xml.Serialization;\r
 \r
 namespace KancolleSniffer\r
 {\r
@@ -131,12 +132,12 @@ namespace KancolleSniffer
         public void SaveState(Status status)\r
         {\r
             NeedSave = false;\r
-            status.MatreialHistory = MaterialHistory;\r
+            status.MaterialHistory = MaterialHistory.ToList();\r
         }\r
 \r
         public void LoadState(Status status)\r
         {\r
-            status.MatreialHistory?.CopyTo(MaterialHistory, 0);\r
+            status.MaterialHistory?.CopyTo(MaterialHistory, 0);\r
         }\r
     }\r
 \r
@@ -160,6 +161,7 @@ namespace KancolleSniffer
         public int BegOfDay { get; set; }\r
         public int BegOfWeek { get; set; }\r
         public DateTime LastSet { get; set; }\r
+        [XmlIgnore]\r
         public bool NeedSave { get; set; }\r
 \r
         public int Now\r
index 1ed9713..f507316 100644 (file)
@@ -13,8 +13,9 @@
 // limitations under the License.\r
 \r
 using System;\r
+using System.Collections.Generic;\r
 using System.IO;\r
-using Codeplex.Data;\r
+using System.Xml.Serialization;\r
 \r
 namespace KancolleSniffer\r
 {\r
@@ -27,17 +28,17 @@ namespace KancolleSniffer
 \r
     public class Status\r
     {\r
-        private readonly string _statusFileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "status.json");\r
+        private readonly string _baseDir = AppDomain.CurrentDomain.BaseDirectory;\r
+        private readonly string _statusFileName;\r
         public static bool Restoring { get; set; }\r
-        public int ExperiencePoint { get; set; }\r
-        public DateTime LastResetTime { get; set; }\r
         public Achievement Achievement { get; set; }\r
-        public MaterialCount[] MatreialHistory { get; set; }\r
+        public List<MaterialCount> MaterialHistory { get; set; }\r
         public double CondRegenTime { get; set; }\r
         public ExMapInfo.ExMapState ExMapState { get; set; }\r
 \r
         public Status()\r
         {\r
+            _statusFileName = Path.Combine(_baseDir, "status.xml");\r
             CondRegenTime = double.MinValue;\r
         }\r
 \r
@@ -46,12 +47,16 @@ namespace KancolleSniffer
             try\r
             {\r
                 Restoring = true;\r
-                var obj = (Status)DynamicJson.Parse(File.ReadAllText(_statusFileName));\r
+                var serializer = new XmlSerializer(typeof(Status));\r
+                Status status;\r
+                using (var file = File.OpenText(_statusFileName))\r
+                    status = (Status)serializer.Deserialize(file);\r
                 foreach (var property in GetType().GetProperties())\r
-                    property.SetValue(this, property.GetValue(obj, null), null);\r
+                    property.SetValue(this, property.GetValue(status, null), null);\r
             }\r
             catch (FileNotFoundException)\r
             {\r
+                ReadOldStatus();\r
             }\r
             finally\r
             {\r
@@ -61,7 +66,58 @@ namespace KancolleSniffer
 \r
         public void Save()\r
         {\r
-            File.WriteAllText(_statusFileName, DynamicJson.Serialize(this));\r
+            var serializer = new XmlSerializer(typeof(Status));\r
+            using (var file = File.CreateText(_statusFileName))\r
+                serializer.Serialize(file, this);\r
+        }\r
+\r
+        public void ReadOldStatus()\r
+        {\r
+            var old = Path.Combine(_baseDir, "status.json");\r
+            dynamic json;\r
+            try\r
+            {\r
+                json = JsonParser.Parse(File.ReadAllText(old));\r
+            }\r
+            catch (FileNotFoundException)\r
+            {\r
+                return;\r
+            }\r
+            var ac = json.Achievement;\r
+            Achievement = new Achievement\r
+            {\r
+                Start = (int)ac.Start,\r
+                StartOfMonth = (int)ac.StartOfMonth,\r
+                LastReset = DateTime.Parse(ac.LastReset),\r
+                LastResetOfMonth = DateTime.Parse(ac.LastResetOfMonth),\r
+                ResetHours = new List<int>((int[])ac.ResetHours),\r
+            };\r
+            var history = new List<MaterialCount>();\r
+            foreach (var h in json.MatreialHistory)\r
+            {\r
+                history.Add(new MaterialCount\r
+                {\r
+                    BegOfDay = (int)h.BegOfDay,\r
+                    BegOfWeek = (int)h.BegOfWeek,\r
+                    Now = (int)h.Now,\r
+                    LastSet = DateTime.Parse(h.LastSet)\r
+                });\r
+            }\r
+            MaterialHistory = history;\r
+            CondRegenTime = json.CondRegenTime;\r
+            ExMapState = new ExMapInfo.ExMapState();\r
+            var clear = new List<ExMapInfo.ClearStatus>();\r
+            foreach (var cs in json.ExMapState.ClearStatusList)\r
+            {\r
+                clear.Add(new ExMapInfo.ClearStatus\r
+                {\r
+                    Map = (int)cs.Map,\r
+                    Cleared = cs.Cleared,\r
+                    Rate = (int)cs.Rate,\r
+                });\r
+            }\r
+            ExMapState.ClearStatusList = clear;\r
+            Save();\r
         }\r
     }\r
 }
\ No newline at end of file