GameListItem::GameListItem(const std::string& _rFileName) : m_FileName(_rFileName) , m_emu_state(0) , m_FileSize(0) , m_Revision(0) , m_Valid(false) , m_BlobCompressed(false) , m_ImageWidth(0) , m_ImageHeight(0) { if (LoadFromCache()) { m_Valid = true; } else { DiscIO::IVolume* pVolume = DiscIO::CreateVolumeFromFilename(_rFileName); if (pVolume != nullptr) { m_Platform = pVolume->GetVolumeType(); m_names = pVolume->GetNames(true); m_descriptions = pVolume->GetDescriptions(); m_company = pVolume->GetCompany(); m_Country = pVolume->GetCountry(); m_FileSize = pVolume->GetRawSize(); m_VolumeSize = pVolume->GetSize(); m_UniqueID = pVolume->GetUniqueID(); m_BlobCompressed = DiscIO::IsCompressedBlob(_rFileName); m_disc_number = pVolume->GetDiscNumber(); m_Revision = pVolume->GetRevision(); std::vector<u32> Buffer = pVolume->GetBanner(&m_ImageWidth, &m_ImageHeight); u32* pData = Buffer.data(); m_pImage.resize(m_ImageWidth * m_ImageHeight * 3); for (int i = 0; i < m_ImageWidth * m_ImageHeight; i++) { m_pImage[i * 3 + 0] = (pData[i] & 0xFF0000) >> 16; m_pImage[i * 3 + 1] = (pData[i] & 0x00FF00) >> 8; m_pImage[i * 3 + 2] = (pData[i] & 0x0000FF) >> 0; } delete pVolume; m_Valid = true; // Create a cache file only if we have an image. // Wii ISOs create their images after you have generated the first savegame if (!m_pImage.empty()) SaveToCache(); } }
bool Plugin::Load() { if (WorkFlags.Check(PIWF_DONTLOADAGAIN)) return false; if (!WorkFlags.Check(PIWF_DATALOADED)&&!LoadData()) return false; if (WorkFlags.Check(PIWF_LOADED)) return true; WorkFlags.Set(PIWF_LOADED); bool Inited = false; if (CheckMinFarVersion()) { PluginStartupInfo info; FarStandardFunctions fsf; CreatePluginStartupInfo(this, &info, &fsf); Inited = SetStartupInfo(&info); } if (!Inited) { if (!bPendingRemove) { Unload(); } //чтоб не пытаться загрузить опять а то ошибка будет постоянно показываться. WorkFlags.Set(PIWF_DONTLOADAGAIN); return false; } SaveToCache(); return true; }