172 lines
4.7 KiB
C#
172 lines
4.7 KiB
C#
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<TabEntry> SaveComponents = new List<TabEntry>();
|
|
}
|
|
}
|