diff --git a/UI/GameInfoCache.cpp b/UI/GameInfoCache.cpp index ec8f803060..f619305473 100644 --- a/UI/GameInfoCache.cpp +++ b/UI/GameInfoCache.cpp @@ -421,8 +421,16 @@ public: std::lock_guard lock(info_->lock); pbp.GetSubFileAsString(PBP_ICON0_PNG, &info_->icon.data); } else { - // Read standard icon - ReadVFSToString("unknown.png", &info_->icon.data, &info_->lock); + std::string screenshot_jpg = GetSysDirectory(DIRECTORY_SCREENSHOT) + info_->id + "_00000.jpg"; + std::string screenshot_png = GetSysDirectory(DIRECTORY_SCREENSHOT) + info_->id + "_00000.png"; + // Try using png/jpg screenshots first + if (File::Exists(screenshot_png)) + readFileToString(false, screenshot_png.c_str(), info_->icon.data); + else if (File::Exists(screenshot_jpg)) + readFileToString(false, screenshot_jpg.c_str(), info_->icon.data); + else + // Read standard icon + ReadVFSToString("unknown.png", &info_->icon.data, &info_->lock); } info_->icon.dataLoaded = true; @@ -459,11 +467,21 @@ handleELF: info_->paramSFOLoaded = true; } - - // Read standard icon - DEBUG_LOG(LOADER, "Loading unknown.png because there was an ELF"); - ReadVFSToString("unknown.png", &info_->icon.data, &info_->lock); - info_->icon.dataLoaded = true; + { + std::string screenshot_jpg = GetSysDirectory(DIRECTORY_SCREENSHOT) + info_->id + "_00000.jpg"; + std::string screenshot_png = GetSysDirectory(DIRECTORY_SCREENSHOT) + info_->id + "_00000.png"; + // Try using png/jpg screenshots first + if (File::Exists(screenshot_png)) + readFileToString(false, screenshot_png.c_str(), info_->icon.data); + else if (File::Exists(screenshot_jpg)) + readFileToString(false, screenshot_jpg.c_str(), info_->icon.data); + else { + // Read standard icon + DEBUG_LOG(LOADER, "Loading unknown.png because there was an ELF"); + ReadVFSToString("unknown.png", &info_->icon.data, &info_->lock); + } + info_->icon.dataLoaded = true; + } break; case IdentifiedFileType::PSP_SAVEDATA_DIRECTORY: @@ -570,8 +588,17 @@ handleELF: // Fall back to unknown icon if ISO is broken/is a homebrew ISO, override is allowed though if (!ReadFileToString(&umd, "/PSP_GAME/ICON0.PNG", &info_->icon.data, &info_->lock)) { - DEBUG_LOG(LOADER, "Loading unknown.png because no icon was found"); - ReadVFSToString("unknown.png", &info_->icon.data, &info_->lock); + std::string screenshot_jpg = GetSysDirectory(DIRECTORY_SCREENSHOT) + info_->id + "_00000.jpg"; + std::string screenshot_png = GetSysDirectory(DIRECTORY_SCREENSHOT) + info_->id + "_00000.png"; + // Try using png/jpg screenshots first + if (File::Exists(screenshot_png)) + readFileToString(false, screenshot_png.c_str(), info_->icon.data); + else if (File::Exists(screenshot_jpg)) + readFileToString(false, screenshot_jpg.c_str(), info_->icon.data); + else { + DEBUG_LOG(LOADER, "Loading unknown.png because no icon was found"); + ReadVFSToString("unknown.png", &info_->icon.data, &info_->lock); + } } info_->icon.dataLoaded = true; break;