public static GameEntry HandleIso(string IsoFile)
{
var IsoFileInfo = new FileInfo(IsoFile);
Psf ParamSfo;
var Entry = new GameEntry();
byte[] Icon0Png;
string UmdData = string.Empty;
if (DefaultIcon == null)
{
var TempMemoryStream = new MemoryStream();
Properties.Resources.icon0.Save(TempMemoryStream, ImageFormat.Png);
DefaultIcon = TempMemoryStream.ToArray();
}
using (var IsoStream = File.OpenRead(IsoFile))
{
switch (new FormatDetector().DetectSubType(IsoStream))
{
case FormatDetector.SubType.Pbp:
var PBP = new Pbp().Load(File.OpenRead(IsoFile));
ParamSfo = new Psf(PBP[Pbp.Types.ParamSfo]);
Icon0Png = PBP.ContainsKey(Pbp.Types.Icon0Png) ? PBP[Pbp.Types.Icon0Png].ReadAll() : DefaultIcon;
UmdData = "---";
break;
case FormatDetector.SubType.Iso:
case FormatDetector.SubType.Cso:
case FormatDetector.SubType.Dax:
using (var Iso = IsoLoader.GetIso(IsoFile))
{
var FileSystem = new HleIoDriverIso(Iso);
if (!FileSystem.FileExists("/PSP_GAME/PARAM.SFO"))
{
throw (new Exception(String.Format("Not a PSP ISO '{0}'", IsoFile)));
}
ParamSfo = new Psf(new MemoryStream(FileSystem.OpenRead("/PSP_GAME/PARAM.SFO").ReadAll()));
if (FileSystem.FileExists("/UMD_DATA.BIN")) UmdData = FileSystem.OpenRead("/UMD_DATA.BIN").ReadAllContentsAsString();
Icon0Png = FileSystem.FileExists("/PSP_GAME/ICON0.PNG") ? FileSystem.OpenRead("/PSP_GAME/ICON0.PNG").ReadAll() : DefaultIcon;
Entry.PatchedWithPrometheus = FileSystem.FileExists("/PSP_GAME/SYSDIR/prometheus.prx") || FileSystem.FileExists("/PSP_GAME/SYSDIR/EBOOT.OLD");
}
break;
default: return null;
}
}
FillGameEntryFromSfo(Entry, ParamSfo);
Entry.IsoSize = IsoFileInfo.Length;
Entry.Hash = GetHash(IsoFile);
Entry.IsoFile = IsoFile;
Entry.DiscId0 = UmdData.Split('|')[0];
Entry.Icon0Png = Icon0Png;
return Entry;
}