OSDN Git Service

艦隊に関する責務をShipInfoからFleetクラスに移す
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / Status.cs
index f507316..d76f28e 100644 (file)
@@ -28,17 +28,20 @@ namespace KancolleSniffer
 \r
     public class Status\r
     {\r
-        private readonly string _baseDir = AppDomain.CurrentDomain.BaseDirectory;\r
-        private readonly string _statusFileName;\r
         public static bool Restoring { get; set; }\r
         public Achievement Achievement { get; set; }\r
         public List<MaterialCount> MaterialHistory { get; set; }\r
         public double CondRegenTime { get; set; }\r
         public ExMapInfo.ExMapState ExMapState { get; set; }\r
+        public QuestStatus[] QuestList { get; set; }\r
+        public QuestCount[] QuestCountList { get; set; }\r
+        public DateTime QuestLastReset { get; set; }\r
+\r
+        private const string FileName = "status.xml";\r
+        private static readonly string StatusFile = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, FileName);\r
 \r
         public Status()\r
         {\r
-            _statusFileName = Path.Combine(_baseDir, "status.xml");\r
             CondRegenTime = double.MinValue;\r
         }\r
 \r
@@ -49,14 +52,17 @@ namespace KancolleSniffer
                 Restoring = true;\r
                 var serializer = new XmlSerializer(typeof(Status));\r
                 Status status;\r
-                using (var file = File.OpenText(_statusFileName))\r
+                using (var file = File.OpenText(StatusFile))\r
                     status = (Status)serializer.Deserialize(file);\r
                 foreach (var property in GetType().GetProperties())\r
                     property.SetValue(this, property.GetValue(status, null), null);\r
             }\r
             catch (FileNotFoundException)\r
             {\r
-                ReadOldStatus();\r
+            }\r
+            catch (InvalidOperationException ex)\r
+            {\r
+                throw new Exception(FileName + "が壊れています。", ex);\r
             }\r
             finally\r
             {\r
@@ -67,57 +73,10 @@ namespace KancolleSniffer
         public void Save()\r
         {\r
             var serializer = new XmlSerializer(typeof(Status));\r
-            using (var file = File.CreateText(_statusFileName))\r
+            using (var file = File.CreateText(StatusFile + ".tmp"))\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
+            File.Copy(StatusFile + ".tmp", StatusFile, true);\r
+            File.Delete(StatusFile + ".tmp");\r
         }\r
     }\r
 }
\ No newline at end of file