void SavedataParam::SetFileInfo(int idx, PSPFileInfo &info, std::string saveName) { saveDataList[idx].size = info.size; saveDataList[idx].saveName = saveName; saveDataList[idx].idx = 0; saveDataList[idx].modif_time = info.mtime; // Start with a blank slate. saveDataList[idx].textureData = 0; saveDataList[idx].title[0] = 0; saveDataList[idx].saveTitle[0] = 0; saveDataList[idx].saveDetail[0] = 0; // 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(pspParam) + saveName + "/" + icon0Name; PSPFileInfo info2 = pspFileSystem.GetFileInfo(fileDataPath2); if (info2.exists) { u8 *textureDataPNG = new u8[(size_t)info2.size]; ReadPSPFile(fileDataPath2, textureDataPNG, info2.size, NULL); CreatePNGIcon(textureDataPNG, (int)info2.size, saveDataList[idx]); delete[] textureDataPNG; } // Load info in PARAM.SFO fileDataPath2 = savePath + GetGameName(pspParam) + saveName + "/" + sfoName; info2 = pspFileSystem.GetFileInfo(fileDataPath2); if (info2.exists) { u8 *sfoParam = new u8[(size_t)info2.size]; ReadPSPFile(fileDataPath2, sfoParam, info2.size, NULL); ParamSFOData sfoFile; if (sfoFile.ReadSFO(sfoParam,(size_t)info2.size)) { SetStringFromSFO(sfoFile, "TITLE", saveDataList[idx].title, sizeof(saveDataList[idx].title)); SetStringFromSFO(sfoFile, "SAVEDATA_TITLE", saveDataList[idx].saveTitle, sizeof(saveDataList[idx].saveTitle)); SetStringFromSFO(sfoFile, "SAVEDATA_DETAIL", saveDataList[idx].saveDetail, sizeof(saveDataList[idx].saveDetail)); } delete [] sfoParam; } }
void SavedataParam::ClearFileInfo(SaveFileInfo &saveInfo, std::string saveName) { saveInfo.size = 0; saveInfo.saveName = saveName; saveInfo.idx = 0; saveInfo.textureData = 0; if (GetPspParam()->newData.Valid() && GetPspParam()->newData->buf.Valid()) { // We have a png to show if (!noSaveIcon) { noSaveIcon = new SaveFileInfo(); PspUtilitySavedataFileData *newData = GetPspParam()->newData; CreatePNGIcon(newData->buf, (int)newData->size, *noSaveIcon); } saveInfo.textureData = noSaveIcon->textureData; saveInfo.textureWidth = noSaveIcon->textureWidth; saveInfo.textureHeight = noSaveIcon->textureHeight; } }
int SavedataParam::SetPspParam(SceUtilitySavedataParam *param) { pspParam = param; if (!pspParam) { Clear(); return 0; } bool listEmptyFile = true; if (param->mode == SCE_UTILITY_SAVEDATA_TYPE_LISTLOAD || param->mode == SCE_UTILITY_SAVEDATA_TYPE_LISTDELETE) { listEmptyFile = false; } char (*saveNameListData)[20]; bool hasMultipleFileName = false; if (param->saveNameList != 0) { Clear(); saveNameListData = (char(*)[20])Memory::GetPointer(param->saveNameList); // Get number of fileName in array saveDataListCount = 0; while(saveNameListData[saveDataListCount][0] != 0) { saveDataListCount++; } if(saveDataListCount > 0) { hasMultipleFileName = true; saveDataList = new SaveFileInfo[saveDataListCount]; // get and stock file info for each file int realCount = 0; for (int i = 0; i < saveDataListCount; i++) { DEBUG_LOG(HLE,"Name : %s",saveNameListData[i]); std::string fileDataPath = savePath+GetGameName(param)+saveNameListData[i]+"/"+param->fileName; PSPFileInfo info = pspFileSystem.GetFileInfo(fileDataPath); if (info.exists) { SetFileInfo(realCount, info, saveNameListData[i]); DEBUG_LOG(HLE,"%s Exist",fileDataPath.c_str()); realCount++; } else { if (listEmptyFile) { saveDataList[realCount].size = 0; saveDataList[realCount].saveName = saveNameListData[i]; saveDataList[realCount].idx = i; saveDataList[realCount].textureData = 0; if(Memory::IsValidAddress(param->newData)) { // We have a png to show PspUtilitySavedataFileData newData; Memory::ReadStruct(param->newData, &newData); CreatePNGIcon(Memory::GetPointer(newData.buf), (int)newData.size, saveDataList[realCount]); } DEBUG_LOG(HLE,"Don't Exist"); realCount++; } } } saveNameListDataCount = realCount; } } if(!hasMultipleFileName) // Load info on only save { saveNameListData = 0; Clear(); saveDataList = new SaveFileInfo[1]; saveDataListCount = 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) { SetFileInfo(0, info, GetSaveName(pspParam)); 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; if(Memory::IsValidAddress(param->newData)) { // We have a png to show PspUtilitySavedataFileData newData; Memory::ReadStruct(param->newData, &newData); CreatePNGIcon(Memory::GetPointer(newData.buf), (int)newData.size, saveDataList[0]); } DEBUG_LOG(HLE,"Don't Exist"); } saveNameListDataCount = 0; return 0; } } return 0; }