mirror of
https://github.com/hrydgard/ppsspp.git
synced 2025-04-02 11:01:50 -04:00
Make Save/Load List work when there is no multiple save files in the
request.
This commit is contained in:
parent
4683d84206
commit
bd1a9c2b1a
2 changed files with 91 additions and 5 deletions
|
@ -433,6 +433,95 @@ void SavedataParam::SetPspParam(SceUtilitySavedataParam* param)
|
||||||
}
|
}
|
||||||
saveNameListDataCount = realCount;
|
saveNameListDataCount = realCount;
|
||||||
}
|
}
|
||||||
|
else // Load info on only save
|
||||||
|
{
|
||||||
|
saveNameListData == 0;
|
||||||
|
|
||||||
|
Clear();
|
||||||
|
saveDataList = new SaveFileInfo[1];
|
||||||
|
|
||||||
|
// get and stock file info for each file
|
||||||
|
DEBUG_LOG(HLE,"Name : %s",GetSaveName(param).c_str());
|
||||||
|
|
||||||
|
std::string fileDataPath = savePath+GetGameName(param)+GetSaveName(param)+"/"+param->fileName;
|
||||||
|
PSPFileInfo info = pspFileSystem.GetFileInfo(fileDataPath);
|
||||||
|
if(info.exists)
|
||||||
|
{
|
||||||
|
saveDataList[0].size = info.size;
|
||||||
|
saveDataList[0].saveName = GetSaveName(param);
|
||||||
|
saveDataList[0].idx = 0;
|
||||||
|
saveDataList[0].modif_time = info.mtime;
|
||||||
|
|
||||||
|
// Search save image icon0
|
||||||
|
// TODO : If icon0 don't exist, need to use icon1 which is a moving icon. Also play sound
|
||||||
|
std::string fileDataPath2 = savePath+GetGameName(param)+GetSaveName(param)+"/"+icon0Name;
|
||||||
|
PSPFileInfo info2 = pspFileSystem.GetFileInfo(fileDataPath2);
|
||||||
|
if(info2.exists)
|
||||||
|
{
|
||||||
|
u8* textureDataPNG = new u8[info2.size];
|
||||||
|
int handle = pspFileSystem.OpenFile(fileDataPath2,FILEACCESS_READ);
|
||||||
|
pspFileSystem.ReadFile(handle,textureDataPNG,info2.size);
|
||||||
|
pspFileSystem.CloseFile(handle);
|
||||||
|
unsigned char* textureData;
|
||||||
|
int w,h;
|
||||||
|
pngLoadPtr(textureDataPNG, info2.size, &w, &h, &textureData, false);
|
||||||
|
delete[] textureDataPNG;
|
||||||
|
u32 texSize = w*h*4;
|
||||||
|
u32 atlasPtr = kernelMemory.Alloc(texSize, true, "SaveData Icon");
|
||||||
|
saveDataList[0].textureData = atlasPtr;
|
||||||
|
Memory::Memcpy(atlasPtr, textureData, texSize);
|
||||||
|
free(textureData);
|
||||||
|
saveDataList[0].textureWidth = w;
|
||||||
|
saveDataList[0].textureHeight = h;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
saveDataList[0].textureData = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load info in PARAM.SFO
|
||||||
|
fileDataPath2 = savePath+GetGameName(param)+GetSaveName(param)+"/"+sfoName;
|
||||||
|
info2 = pspFileSystem.GetFileInfo(fileDataPath2);
|
||||||
|
if(info2.exists)
|
||||||
|
{
|
||||||
|
u8* sfoParam = new u8[info2.size];
|
||||||
|
int handle = pspFileSystem.OpenFile(fileDataPath2,FILEACCESS_READ);
|
||||||
|
pspFileSystem.ReadFile(handle,sfoParam,info2.size);
|
||||||
|
pspFileSystem.CloseFile(handle);
|
||||||
|
ParamSFOData sfoFile;
|
||||||
|
if(sfoFile.ReadSFO(sfoParam,info2.size))
|
||||||
|
{
|
||||||
|
std::string title = sfoFile.GetValueString("TITLE");
|
||||||
|
memcpy(saveDataList[0].title,title.c_str(),title.size());
|
||||||
|
saveDataList[0].title[title.size()] = 0;
|
||||||
|
|
||||||
|
std::string savetitle = sfoFile.GetValueString("SAVEDATA_TITLE");
|
||||||
|
memcpy(saveDataList[0].saveTitle,savetitle.c_str(),savetitle.size());
|
||||||
|
saveDataList[0].saveTitle[savetitle.size()] = 0;
|
||||||
|
|
||||||
|
std::string savedetail = sfoFile.GetValueString("SAVEDATA_DETAIL");
|
||||||
|
memcpy(saveDataList[0].saveDetail,savedetail.c_str(),savedetail.size());
|
||||||
|
saveDataList[0].saveDetail[savedetail.size()] = 0;
|
||||||
|
}
|
||||||
|
delete sfoParam;
|
||||||
|
}
|
||||||
|
|
||||||
|
DEBUG_LOG(HLE,"%s Exist",fileDataPath.c_str());
|
||||||
|
saveNameListDataCount = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(listEmptyFile)
|
||||||
|
{
|
||||||
|
saveDataList[0].size = 0;
|
||||||
|
saveDataList[0].saveName = GetSaveName(param);
|
||||||
|
saveDataList[0].idx = 0;
|
||||||
|
saveDataList[0].textureData = 0;
|
||||||
|
DEBUG_LOG(HLE,"Don't Exist");
|
||||||
|
}
|
||||||
|
saveNameListDataCount = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SceUtilitySavedataParam* SavedataParam::GetPspParam()
|
SceUtilitySavedataParam* SavedataParam::GetPspParam()
|
||||||
|
@ -451,10 +540,7 @@ const SaveFileInfo& SavedataParam::GetFileInfo(int idx)
|
||||||
}
|
}
|
||||||
std::string SavedataParam::GetFilename(int idx)
|
std::string SavedataParam::GetFilename(int idx)
|
||||||
{
|
{
|
||||||
char fileName[21];
|
return saveDataList[idx].saveName;
|
||||||
memcpy(fileName,saveDataList[idx].saveName,20);
|
|
||||||
fileName[20] = 0;
|
|
||||||
return fileName;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int SavedataParam::GetSelectedSave()
|
int SavedataParam::GetSelectedSave()
|
||||||
|
|
|
@ -121,7 +121,7 @@ struct SceUtilitySavedataParam
|
||||||
struct SaveFileInfo
|
struct SaveFileInfo
|
||||||
{
|
{
|
||||||
int size;
|
int size;
|
||||||
char* saveName;
|
std::string saveName;
|
||||||
int idx;
|
int idx;
|
||||||
|
|
||||||
char title[128];
|
char title[128];
|
||||||
|
|
Loading…
Add table
Reference in a new issue