\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
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
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