using LibW4M; using LibW4M.PS2; using LibW4M.XBOX; using LibXom; using System; using System.CodeDom; using System.Collections.Generic; using System.IO.Compression; using System.Linq; using System.Text; using System.Threading.Tasks; using W4Gui.Tabs; namespace W4Gui { public static class DataManager { public static SaveType LoadedSaveType; public static string LoadedSavePath; public static bool SaveLoaded = false; public static W4SaveFile SaveFile; public static void CommitData() { foreach(TabEntry control in SaveComponents) { try { control.SaveFromControl(); } catch { }; } } public static void ParseData() { foreach (TabEntry control in SaveComponents) { try { control.LoadIntoControl(); } catch { }; } } public static void SavePS2(Stream ps2PsuSaveStream) { using (ps2PsuSaveStream) { Ps2Save.CreateSaveFile(DataManager.SaveFile, ps2PsuSaveStream); } } public static void SaveXBOX(Stream xboxSaveStream, XboxRegion region) { using (xboxSaveStream) { XboxSave.CreateSaveZipFile(DataManager.SaveFile, xboxSaveStream, region); } } public static void SavePC(string newXom) { SaveFile.Save(File.OpenWrite(newXom)); } public static void SaveXBOX(string newXom, XboxRegion region) { SaveXBOX(File.OpenWrite(newXom), region); } public static void SavePS2(string newXom) { SavePS2(File.OpenWrite(newXom)); } public static void LoadPC(string filename) { SaveFile = new W4SaveFile(XomReader.ReadXomFile(filename)); } public static void LoadPS2(string filename) { SaveFile = Ps2Save.ReadPS2Save(filename); } public static SaveType LoadXBOX(string filename) { XboxRegion region = XboxRegion.UNKNOWN; SaveFile = XboxSave.ReadXboxSave(filename, ref region); if (region == XboxRegion.USA) return SaveType.XBOX_US; if (region == XboxRegion.EU) return SaveType.XBOX_EU; return SaveType.UNKNOWN; } public static SaveType LoadGuessType(string filename) { switch (Path.GetExtension(filename)) { case ".xom": LoadPC(filename); return SaveType.PC; case ".psu": LoadPS2(filename); return SaveType.PS2; case ".zip": return LoadXBOX(filename); } return SaveType.UNKNOWN; } public static void Load(string filename, SaveType saveType) { switch (saveType) { case SaveType.PC: LoadPC(filename); break; case SaveType.PS2: LoadPS2(filename); break; case SaveType.XBOX_US: case SaveType.XBOX_EU: saveType = LoadXBOX(filename); break; case SaveType.UNKNOWN: default: saveType = LoadGuessType(filename); break; } if(saveType != SaveType.UNKNOWN) { DataManager.LoadedSavePath = filename; DataManager.LoadedSaveType = saveType; } else { throw new Exception("unable to determine save type."); } } public static void Save(string filename, SaveType saveType) { switch (saveType) { case SaveType.PC: DataManager.SavePC(filename); break; case SaveType.PS2: DataManager.SavePS2(filename); break; case SaveType.XBOX_US: DataManager.SaveXBOX(filename, XboxRegion.USA); break; case SaveType.XBOX_EU: DataManager.SaveXBOX(filename, XboxRegion.EU); break; } DataManager.LoadedSavePath = filename; DataManager.LoadedSaveType = saveType; } public static List SaveComponents = new List(); } }