\r
using System;\r
using System.Collections.Generic;\r
+using System.Xml.Serialization;\r
\r
namespace KancolleSniffer\r
{\r
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
{\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
\r
using System;\r
using System.Linq;\r
+using System.Xml.Serialization;\r
\r
namespace KancolleSniffer\r
{\r
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
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
// 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
\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
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
\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