Merge pull request #3097 from JosJuice/blob-type
Fix blob type detection for game right-click menu
This commit is contained in:
commit
aaa48e19fe
|
@ -20,12 +20,23 @@
|
||||||
namespace DiscIO
|
namespace DiscIO
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// Increment CACHE_REVISION if the enum below is modified (ISOFile.cpp & GameFile.cpp)
|
||||||
|
enum class BlobType
|
||||||
|
{
|
||||||
|
PLAIN,
|
||||||
|
DRIVE,
|
||||||
|
DIRECTORY,
|
||||||
|
GCZ,
|
||||||
|
CISO,
|
||||||
|
WBFS
|
||||||
|
};
|
||||||
|
|
||||||
class IBlobReader
|
class IBlobReader
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual ~IBlobReader() {}
|
virtual ~IBlobReader() {}
|
||||||
|
|
||||||
virtual bool IsCompressed() const = 0;
|
virtual BlobType GetBlobType() const = 0;
|
||||||
virtual u64 GetRawSize() const = 0;
|
virtual u64 GetRawSize() const = 0;
|
||||||
virtual u64 GetDataSize() const = 0;
|
virtual u64 GetDataSize() const = 0;
|
||||||
// NOT thread-safe - can't call this from multiple threads.
|
// NOT thread-safe - can't call this from multiple threads.
|
||||||
|
|
|
@ -36,7 +36,7 @@ class CISOFileReader : public IBlobReader
|
||||||
public:
|
public:
|
||||||
static CISOFileReader* Create(const std::string& filename);
|
static CISOFileReader* Create(const std::string& filename);
|
||||||
|
|
||||||
bool IsCompressed() const override { return true; }
|
BlobType GetBlobType() const override { return BlobType::CISO; }
|
||||||
u64 GetDataSize() const override;
|
u64 GetDataSize() const override;
|
||||||
u64 GetRawSize() const override;
|
u64 GetRawSize() const override;
|
||||||
bool Read(u64 offset, u64 nbytes, u8* out_ptr) override;
|
bool Read(u64 offset, u64 nbytes, u8* out_ptr) override;
|
||||||
|
|
|
@ -49,7 +49,7 @@ public:
|
||||||
static CompressedBlobReader* Create(const std::string& filename);
|
static CompressedBlobReader* Create(const std::string& filename);
|
||||||
~CompressedBlobReader();
|
~CompressedBlobReader();
|
||||||
const CompressedBlobHeader &GetHeader() const { return m_header; }
|
const CompressedBlobHeader &GetHeader() const { return m_header; }
|
||||||
bool IsCompressed() const override { return true; }
|
BlobType GetBlobType() const override { return BlobType::GCZ; }
|
||||||
u64 GetDataSize() const override { return m_header.data_size; }
|
u64 GetDataSize() const override { return m_header.data_size; }
|
||||||
u64 GetRawSize() const override { return m_file_size; }
|
u64 GetRawSize() const override { return m_file_size; }
|
||||||
u64 GetBlockCompressedSize(u64 block_num) const;
|
u64 GetBlockCompressedSize(u64 block_num) const;
|
||||||
|
|
|
@ -23,7 +23,7 @@ class DriveReader : public SectorReader
|
||||||
public:
|
public:
|
||||||
static DriveReader* Create(const std::string& drive);
|
static DriveReader* Create(const std::string& drive);
|
||||||
~DriveReader();
|
~DriveReader();
|
||||||
bool IsCompressed() const override { return false; }
|
BlobType GetBlobType() const override { return BlobType::DRIVE; }
|
||||||
u64 GetDataSize() const override { return m_size; }
|
u64 GetDataSize() const override { return m_size; }
|
||||||
u64 GetRawSize() const override { return m_size; }
|
u64 GetRawSize() const override { return m_size; }
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ class PlainFileReader : public IBlobReader
|
||||||
public:
|
public:
|
||||||
static PlainFileReader* Create(const std::string& filename);
|
static PlainFileReader* Create(const std::string& filename);
|
||||||
|
|
||||||
bool IsCompressed() const override { return false; }
|
BlobType GetBlobType() const override { return BlobType::PLAIN; }
|
||||||
u64 GetDataSize() const override { return m_size; }
|
u64 GetDataSize() const override { return m_size; }
|
||||||
u64 GetRawSize() const override { return m_size; }
|
u64 GetRawSize() const override { return m_size; }
|
||||||
bool Read(u64 offset, u64 nbytes, u8* out_ptr) override;
|
bool Read(u64 offset, u64 nbytes, u8* out_ptr) override;
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "Common/CommonFuncs.h"
|
#include "Common/CommonFuncs.h"
|
||||||
#include "Common/CommonTypes.h"
|
#include "Common/CommonTypes.h"
|
||||||
#include "Common/StringUtil.h"
|
#include "Common/StringUtil.h"
|
||||||
|
#include "DiscIO/Blob.h"
|
||||||
|
|
||||||
namespace DiscIO
|
namespace DiscIO
|
||||||
{
|
{
|
||||||
|
@ -101,7 +102,7 @@ public:
|
||||||
virtual bool ChangePartition(u64 offset) { return false; }
|
virtual bool ChangePartition(u64 offset) { return false; }
|
||||||
|
|
||||||
virtual ECountry GetCountry() const = 0;
|
virtual ECountry GetCountry() const = 0;
|
||||||
virtual bool IsCompressed() const = 0;
|
virtual BlobType GetBlobType() const = 0;
|
||||||
// Size of virtual disc (not always accurate)
|
// Size of virtual disc (not always accurate)
|
||||||
virtual u64 GetSize() const = 0;
|
virtual u64 GetSize() const = 0;
|
||||||
// Size on disc (compressed size)
|
// Size on disc (compressed size)
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
#include "Common/FileUtil.h"
|
#include "Common/FileUtil.h"
|
||||||
#include "Common/MathUtil.h"
|
#include "Common/MathUtil.h"
|
||||||
#include "Common/Logging/Log.h"
|
#include "Common/Logging/Log.h"
|
||||||
|
#include "DiscIO/Blob.h"
|
||||||
#include "DiscIO/FileBlob.h"
|
#include "DiscIO/FileBlob.h"
|
||||||
#include "DiscIO/FileMonitor.h"
|
#include "DiscIO/FileMonitor.h"
|
||||||
#include "DiscIO/Volume.h"
|
#include "DiscIO/Volume.h"
|
||||||
|
@ -227,9 +228,12 @@ IVolume::EPlatform CVolumeDirectory::GetVolumeType() const
|
||||||
return m_is_wii ? WII_DISC : GAMECUBE_DISC;
|
return m_is_wii ? WII_DISC : GAMECUBE_DISC;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CVolumeDirectory::IsCompressed() const
|
BlobType CVolumeDirectory::GetBlobType() const
|
||||||
{
|
{
|
||||||
return false;
|
// VolumeDirectory isn't actually a blob, but it sort of acts
|
||||||
|
// like one, so it makes sense that it has its own blob type.
|
||||||
|
// It should be made into a proper blob in the future.
|
||||||
|
return BlobType::DIRECTORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
u64 CVolumeDirectory::GetSize() const
|
u64 CVolumeDirectory::GetSize() const
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "Common/CommonTypes.h"
|
#include "Common/CommonTypes.h"
|
||||||
|
#include "DiscIO/Blob.h"
|
||||||
#include "DiscIO/Volume.h"
|
#include "DiscIO/Volume.h"
|
||||||
|
|
||||||
namespace File { struct FSTEntry; }
|
namespace File { struct FSTEntry; }
|
||||||
|
@ -51,7 +52,7 @@ public:
|
||||||
|
|
||||||
ECountry GetCountry() const override;
|
ECountry GetCountry() const override;
|
||||||
|
|
||||||
bool IsCompressed() const override;
|
BlobType GetBlobType() const override;
|
||||||
u64 GetSize() const override;
|
u64 GetSize() const override;
|
||||||
u64 GetRawSize() const override;
|
u64 GetRawSize() const override;
|
||||||
|
|
||||||
|
|
|
@ -169,9 +169,9 @@ std::string CVolumeGC::GetApploaderDate() const
|
||||||
return DecodeString(date);
|
return DecodeString(date);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CVolumeGC::IsCompressed() const
|
BlobType CVolumeGC::GetBlobType() const
|
||||||
{
|
{
|
||||||
return m_pReader ? m_pReader->IsCompressed() : false;
|
return m_pReader ? m_pReader->GetBlobType() : BlobType::PLAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
u64 CVolumeGC::GetSize() const
|
u64 CVolumeGC::GetSize() const
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "Common/CommonTypes.h"
|
#include "Common/CommonTypes.h"
|
||||||
|
#include "DiscIO/Blob.h"
|
||||||
#include "DiscIO/Volume.h"
|
#include "DiscIO/Volume.h"
|
||||||
|
|
||||||
// --- this volume type is used for GC disc images ---
|
// --- this volume type is used for GC disc images ---
|
||||||
|
@ -17,8 +18,6 @@
|
||||||
namespace DiscIO
|
namespace DiscIO
|
||||||
{
|
{
|
||||||
|
|
||||||
class IBlobReader;
|
|
||||||
|
|
||||||
class CVolumeGC : public IVolume
|
class CVolumeGC : public IVolume
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -39,7 +38,7 @@ public:
|
||||||
|
|
||||||
EPlatform GetVolumeType() const override;
|
EPlatform GetVolumeType() const override;
|
||||||
ECountry GetCountry() const override;
|
ECountry GetCountry() const override;
|
||||||
bool IsCompressed() const override;
|
BlobType GetBlobType() const override;
|
||||||
u64 GetSize() const override;
|
u64 GetSize() const override;
|
||||||
u64 GetRawSize() const override;
|
u64 GetRawSize() const override;
|
||||||
|
|
||||||
|
|
|
@ -126,9 +126,9 @@ std::map<IVolume::ELanguage, std::string> CVolumeWAD::GetNames(bool prefer_long)
|
||||||
return ReadWiiNames(name_data);
|
return ReadWiiNames(name_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CVolumeWAD::IsCompressed() const
|
BlobType CVolumeWAD::GetBlobType() const
|
||||||
{
|
{
|
||||||
return m_pReader ? m_pReader->IsCompressed() : false;
|
return m_pReader ? m_pReader->GetBlobType() : BlobType::PLAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
u64 CVolumeWAD::GetSize() const
|
u64 CVolumeWAD::GetSize() const
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "Common/CommonTypes.h"
|
#include "Common/CommonTypes.h"
|
||||||
|
#include "DiscIO/Blob.h"
|
||||||
#include "DiscIO/Volume.h"
|
#include "DiscIO/Volume.h"
|
||||||
|
|
||||||
// --- this volume type is used for Wad files ---
|
// --- this volume type is used for Wad files ---
|
||||||
|
@ -19,8 +20,6 @@
|
||||||
namespace DiscIO
|
namespace DiscIO
|
||||||
{
|
{
|
||||||
|
|
||||||
class IBlobReader;
|
|
||||||
|
|
||||||
class CVolumeWAD : public IVolume
|
class CVolumeWAD : public IVolume
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -39,7 +38,7 @@ public:
|
||||||
EPlatform GetVolumeType() const override;
|
EPlatform GetVolumeType() const override;
|
||||||
ECountry GetCountry() const override;
|
ECountry GetCountry() const override;
|
||||||
|
|
||||||
bool IsCompressed() const override;
|
BlobType GetBlobType() const override;
|
||||||
u64 GetSize() const override;
|
u64 GetSize() const override;
|
||||||
u64 GetRawSize() const override;
|
u64 GetRawSize() const override;
|
||||||
|
|
||||||
|
|
|
@ -250,9 +250,9 @@ u8 CVolumeWiiCrypted::GetDiscNumber() const
|
||||||
return disc_number;
|
return disc_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CVolumeWiiCrypted::IsCompressed() const
|
BlobType CVolumeWiiCrypted::GetBlobType() const
|
||||||
{
|
{
|
||||||
return m_pReader ? m_pReader->IsCompressed() : false;
|
return m_pReader ? m_pReader->GetBlobType() : BlobType::PLAIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
u64 CVolumeWiiCrypted::GetSize() const
|
u64 CVolumeWiiCrypted::GetSize() const
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include <polarssl/aes.h>
|
#include <polarssl/aes.h>
|
||||||
|
|
||||||
#include "Common/CommonTypes.h"
|
#include "Common/CommonTypes.h"
|
||||||
|
#include "DiscIO/Blob.h"
|
||||||
#include "DiscIO/Volume.h"
|
#include "DiscIO/Volume.h"
|
||||||
|
|
||||||
// --- this volume type is used for encrypted Wii images ---
|
// --- this volume type is used for encrypted Wii images ---
|
||||||
|
@ -18,8 +19,6 @@
|
||||||
namespace DiscIO
|
namespace DiscIO
|
||||||
{
|
{
|
||||||
|
|
||||||
class IBlobReader;
|
|
||||||
|
|
||||||
class CVolumeWiiCrypted : public IVolume
|
class CVolumeWiiCrypted : public IVolume
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -43,7 +42,7 @@ public:
|
||||||
bool ChangePartition(u64 offset) override;
|
bool ChangePartition(u64 offset) override;
|
||||||
|
|
||||||
ECountry GetCountry() const override;
|
ECountry GetCountry() const override;
|
||||||
bool IsCompressed() const override;
|
BlobType GetBlobType() const override;
|
||||||
u64 GetSize() const override;
|
u64 GetSize() const override;
|
||||||
u64 GetRawSize() const override;
|
u64 GetRawSize() const override;
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ class WbfsFileReader : public IBlobReader
|
||||||
public:
|
public:
|
||||||
static WbfsFileReader* Create(const std::string& filename);
|
static WbfsFileReader* Create(const std::string& filename);
|
||||||
|
|
||||||
bool IsCompressed() const override { return true; }
|
BlobType GetBlobType() const override { return BlobType::WBFS; }
|
||||||
u64 GetDataSize() const override { return m_size; }
|
u64 GetDataSize() const override { return m_size; }
|
||||||
u64 GetRawSize() const override { return m_size; }
|
u64 GetRawSize() const override { return m_size; }
|
||||||
bool Read(u64 offset, u64 nbytes, u8* out_ptr) override;
|
bool Read(u64 offset, u64 nbytes, u8* out_ptr) override;
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#include "DolphinQt/GameList/GameFile.h"
|
#include "DolphinQt/GameList/GameFile.h"
|
||||||
#include "DolphinQt/Utils/Utils.h"
|
#include "DolphinQt/Utils/Utils.h"
|
||||||
|
|
||||||
static const u32 CACHE_REVISION = 0x00C; // Last changed in PR 2993
|
static const u32 CACHE_REVISION = 0x00D; // Last changed in PR 3097
|
||||||
static const u32 DATASTREAM_REVISION = 15; // Introduced in Qt 5.2
|
static const u32 DATASTREAM_REVISION = 15; // Introduced in Qt 5.2
|
||||||
|
|
||||||
static QMap<DiscIO::IVolume::ELanguage, QString> ConvertLocalizedStrings(std::map<DiscIO::IVolume::ELanguage, std::string> strings)
|
static QMap<DiscIO::IVolume::ELanguage, QString> ConvertLocalizedStrings(std::map<DiscIO::IVolume::ELanguage, std::string> strings)
|
||||||
|
@ -109,11 +109,11 @@ GameFile::GameFile(const QString& fileName)
|
||||||
m_company = QString::fromStdString(volume->GetCompany());
|
m_company = QString::fromStdString(volume->GetCompany());
|
||||||
|
|
||||||
m_country = volume->GetCountry();
|
m_country = volume->GetCountry();
|
||||||
|
m_blob_type = volume->GetBlobType();
|
||||||
m_file_size = volume->GetRawSize();
|
m_file_size = volume->GetRawSize();
|
||||||
m_volume_size = volume->GetSize();
|
m_volume_size = volume->GetSize();
|
||||||
|
|
||||||
m_unique_id = QString::fromStdString(volume->GetUniqueID());
|
m_unique_id = QString::fromStdString(volume->GetUniqueID());
|
||||||
m_compressed = volume->IsCompressed();
|
|
||||||
m_disc_number = volume->GetDiscNumber();
|
m_disc_number = volume->GetDiscNumber();
|
||||||
m_revision = volume->GetRevision();
|
m_revision = volume->GetRevision();
|
||||||
|
|
||||||
|
@ -181,6 +181,7 @@ bool GameFile::LoadFromCache()
|
||||||
|
|
||||||
u32 country;
|
u32 country;
|
||||||
u32 platform;
|
u32 platform;
|
||||||
|
u32 blob_type;
|
||||||
QMap<u8, QString> short_names;
|
QMap<u8, QString> short_names;
|
||||||
QMap<u8, QString> long_names;
|
QMap<u8, QString> long_names;
|
||||||
QMap<u8, QString> descriptions;
|
QMap<u8, QString> descriptions;
|
||||||
|
@ -189,16 +190,17 @@ bool GameFile::LoadFromCache()
|
||||||
>> descriptions
|
>> descriptions
|
||||||
>> m_company
|
>> m_company
|
||||||
>> m_unique_id
|
>> m_unique_id
|
||||||
|
>> blob_type
|
||||||
>> m_file_size
|
>> m_file_size
|
||||||
>> m_volume_size
|
>> m_volume_size
|
||||||
>> country
|
>> country
|
||||||
>> m_banner
|
>> m_banner
|
||||||
>> m_compressed
|
|
||||||
>> platform
|
>> platform
|
||||||
>> m_disc_number
|
>> m_disc_number
|
||||||
>> m_revision;
|
>> m_revision;
|
||||||
m_country = (DiscIO::IVolume::ECountry)country;
|
m_country = (DiscIO::IVolume::ECountry)country;
|
||||||
m_platform = (DiscIO::IVolume::EPlatform)platform;
|
m_platform = (DiscIO::IVolume::EPlatform)platform;
|
||||||
|
m_blob_type = (DiscIO::BlobType)blob_type;
|
||||||
m_short_names = CastLocalizedStrings<DiscIO::IVolume::ELanguage>(short_names);
|
m_short_names = CastLocalizedStrings<DiscIO::IVolume::ELanguage>(short_names);
|
||||||
m_long_names = CastLocalizedStrings<DiscIO::IVolume::ELanguage>(long_names);
|
m_long_names = CastLocalizedStrings<DiscIO::IVolume::ELanguage>(long_names);
|
||||||
m_descriptions = CastLocalizedStrings<DiscIO::IVolume::ELanguage>(descriptions);
|
m_descriptions = CastLocalizedStrings<DiscIO::IVolume::ELanguage>(descriptions);
|
||||||
|
@ -231,11 +233,11 @@ void GameFile::SaveToCache()
|
||||||
<< CastLocalizedStrings<u8>(m_descriptions)
|
<< CastLocalizedStrings<u8>(m_descriptions)
|
||||||
<< m_company
|
<< m_company
|
||||||
<< m_unique_id
|
<< m_unique_id
|
||||||
|
<< (u32)m_blob_type
|
||||||
<< m_file_size
|
<< m_file_size
|
||||||
<< m_volume_size
|
<< m_volume_size
|
||||||
<< (u32)m_country
|
<< (u32)m_country
|
||||||
<< m_banner
|
<< m_banner
|
||||||
<< m_compressed
|
|
||||||
<< (u32)m_platform
|
<< (u32)m_platform
|
||||||
<< m_disc_number
|
<< m_disc_number
|
||||||
<< m_revision;
|
<< m_revision;
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
#include "DiscIO/Blob.h"
|
||||||
#include "DiscIO/Volume.h"
|
#include "DiscIO/Volume.h"
|
||||||
#include "DiscIO/VolumeCreator.h"
|
#include "DiscIO/VolumeCreator.h"
|
||||||
|
|
||||||
|
@ -34,9 +35,14 @@ public:
|
||||||
const QString GetWiiFSPath() const;
|
const QString GetWiiFSPath() const;
|
||||||
DiscIO::IVolume::ECountry GetCountry() const { return m_country; }
|
DiscIO::IVolume::ECountry GetCountry() const { return m_country; }
|
||||||
DiscIO::IVolume::EPlatform GetPlatform() const { return m_platform; }
|
DiscIO::IVolume::EPlatform GetPlatform() const { return m_platform; }
|
||||||
|
DiscIO::BlobType GetBlobType() const { m_blob_type; }
|
||||||
const QString GetIssues() const { return m_issues; }
|
const QString GetIssues() const { return m_issues; }
|
||||||
int GetEmuState() const { return m_emu_state; }
|
int GetEmuState() const { return m_emu_state; }
|
||||||
bool IsCompressed() const { return m_compressed; }
|
bool IsCompressed() const
|
||||||
|
{
|
||||||
|
return m_blob_type == DiscIO::BlobType::GCZ || m_blob_type == DiscIO::BlobType::CISO ||
|
||||||
|
m_blob_type == DiscIO::BlobType::WBFS;
|
||||||
|
}
|
||||||
u64 GetFileSize() const { return m_file_size; }
|
u64 GetFileSize() const { return m_file_size; }
|
||||||
u64 GetVolumeSize() const { return m_volume_size; }
|
u64 GetVolumeSize() const { return m_volume_size; }
|
||||||
// 0 is the first disc, 1 is the second disc
|
// 0 is the first disc, 1 is the second disc
|
||||||
|
@ -68,11 +74,11 @@ private:
|
||||||
|
|
||||||
DiscIO::IVolume::ECountry m_country = DiscIO::IVolume::COUNTRY_UNKNOWN;
|
DiscIO::IVolume::ECountry m_country = DiscIO::IVolume::COUNTRY_UNKNOWN;
|
||||||
DiscIO::IVolume::EPlatform m_platform;
|
DiscIO::IVolume::EPlatform m_platform;
|
||||||
|
DiscIO::BlobType m_blob_type;
|
||||||
u16 m_revision = 0;
|
u16 m_revision = 0;
|
||||||
|
|
||||||
QPixmap m_banner;
|
QPixmap m_banner;
|
||||||
bool m_valid = false;
|
bool m_valid = false;
|
||||||
bool m_compressed = false;
|
|
||||||
u8 m_disc_number = 0;
|
u8 m_disc_number = 0;
|
||||||
|
|
||||||
bool LoadFromCache();
|
bool LoadFromCache();
|
||||||
|
|
|
@ -862,10 +862,9 @@ void CGameListCtrl::OnRightClick(wxMouseEvent& event)
|
||||||
|
|
||||||
if (platform == DiscIO::IVolume::GAMECUBE_DISC || platform == DiscIO::IVolume::WII_DISC)
|
if (platform == DiscIO::IVolume::GAMECUBE_DISC || platform == DiscIO::IVolume::WII_DISC)
|
||||||
{
|
{
|
||||||
if (selected_iso->IsCompressed())
|
if (selected_iso->GetBlobType() == DiscIO::BlobType::GCZ)
|
||||||
popupMenu.Append(IDM_COMPRESS_ISO, _("Decompress ISO..."));
|
popupMenu.Append(IDM_COMPRESS_ISO, _("Decompress ISO..."));
|
||||||
else if (selected_iso->GetFileName().substr(selected_iso->GetFileName().find_last_of(".")) != ".ciso" &&
|
else if (selected_iso->GetBlobType() == DiscIO::BlobType::PLAIN)
|
||||||
selected_iso->GetFileName().substr(selected_iso->GetFileName().find_last_of(".")) != ".wbfs")
|
|
||||||
popupMenu.Append(IDM_COMPRESS_ISO, _("Compress ISO..."));
|
popupMenu.Append(IDM_COMPRESS_ISO, _("Compress ISO..."));
|
||||||
|
|
||||||
wxMenuItem* changeDiscItem = popupMenu.Append(IDM_LIST_CHANGE_DISC, _("Change &Disc"));
|
wxMenuItem* changeDiscItem = popupMenu.Append(IDM_LIST_CHANGE_DISC, _("Change &Disc"));
|
||||||
|
@ -1152,6 +1151,7 @@ void CGameListCtrl::OnCompressISO(wxCommandEvent& WXUNUSED (event))
|
||||||
if (!iso)
|
if (!iso)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
bool is_compressed = iso->GetBlobType() == DiscIO::BlobType::GCZ;
|
||||||
wxString path;
|
wxString path;
|
||||||
|
|
||||||
std::string FileName, FilePath, FileExtension;
|
std::string FileName, FilePath, FileExtension;
|
||||||
|
@ -1159,7 +1159,7 @@ void CGameListCtrl::OnCompressISO(wxCommandEvent& WXUNUSED (event))
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (iso->IsCompressed())
|
if (is_compressed)
|
||||||
{
|
{
|
||||||
wxString FileType;
|
wxString FileType;
|
||||||
if (iso->GetPlatform() == DiscIO::IVolume::WII_DISC)
|
if (iso->GetPlatform() == DiscIO::IVolume::WII_DISC)
|
||||||
|
@ -1200,7 +1200,7 @@ void CGameListCtrl::OnCompressISO(wxCommandEvent& WXUNUSED (event))
|
||||||
|
|
||||||
{
|
{
|
||||||
wxProgressDialog dialog(
|
wxProgressDialog dialog(
|
||||||
iso->IsCompressed() ? _("Decompressing ISO") : _("Compressing ISO"),
|
is_compressed ? _("Decompressing ISO") : _("Compressing ISO"),
|
||||||
_("Working..."),
|
_("Working..."),
|
||||||
1000,
|
1000,
|
||||||
this,
|
this,
|
||||||
|
@ -1211,7 +1211,7 @@ void CGameListCtrl::OnCompressISO(wxCommandEvent& WXUNUSED (event))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
if (iso->IsCompressed())
|
if (is_compressed)
|
||||||
all_good = DiscIO::DecompressBlobToFile(iso->GetFileName(),
|
all_good = DiscIO::DecompressBlobToFile(iso->GetFileName(),
|
||||||
WxStrToStr(path), &CompressCB, &dialog);
|
WxStrToStr(path), &CompressCB, &dialog);
|
||||||
else
|
else
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
#include "DolphinWX/ISOFile.h"
|
#include "DolphinWX/ISOFile.h"
|
||||||
#include "DolphinWX/WxUtils.h"
|
#include "DolphinWX/WxUtils.h"
|
||||||
|
|
||||||
static const u32 CACHE_REVISION = 0x125; // Last changed in PR 2598
|
static const u32 CACHE_REVISION = 0x126; // Last changed in PR 3097
|
||||||
|
|
||||||
#define DVD_BANNER_WIDTH 96
|
#define DVD_BANNER_WIDTH 96
|
||||||
#define DVD_BANNER_HEIGHT 32
|
#define DVD_BANNER_HEIGHT 32
|
||||||
|
@ -70,7 +70,6 @@ GameListItem::GameListItem(const std::string& _rFileName, const std::unordered_m
|
||||||
, m_Country(DiscIO::IVolume::COUNTRY_UNKNOWN)
|
, m_Country(DiscIO::IVolume::COUNTRY_UNKNOWN)
|
||||||
, m_Revision(0)
|
, m_Revision(0)
|
||||||
, m_Valid(false)
|
, m_Valid(false)
|
||||||
, m_BlobCompressed(false)
|
|
||||||
, m_ImageWidth(0)
|
, m_ImageWidth(0)
|
||||||
, m_ImageHeight(0)
|
, m_ImageHeight(0)
|
||||||
, m_disc_number(0)
|
, m_disc_number(0)
|
||||||
|
@ -107,11 +106,11 @@ GameListItem::GameListItem(const std::string& _rFileName, const std::unordered_m
|
||||||
m_company = pVolume->GetCompany();
|
m_company = pVolume->GetCompany();
|
||||||
|
|
||||||
m_Country = pVolume->GetCountry();
|
m_Country = pVolume->GetCountry();
|
||||||
|
m_blob_type = pVolume->GetBlobType();
|
||||||
m_FileSize = pVolume->GetRawSize();
|
m_FileSize = pVolume->GetRawSize();
|
||||||
m_VolumeSize = pVolume->GetSize();
|
m_VolumeSize = pVolume->GetSize();
|
||||||
|
|
||||||
m_UniqueID = pVolume->GetUniqueID();
|
m_UniqueID = pVolume->GetUniqueID();
|
||||||
m_BlobCompressed = pVolume->IsCompressed();
|
|
||||||
m_disc_number = pVolume->GetDiscNumber();
|
m_disc_number = pVolume->GetDiscNumber();
|
||||||
m_Revision = pVolume->GetRevision();
|
m_Revision = pVolume->GetRevision();
|
||||||
|
|
||||||
|
@ -157,6 +156,7 @@ GameListItem::GameListItem(const std::string& _rFileName, const std::unordered_m
|
||||||
m_Valid = true;
|
m_Valid = true;
|
||||||
m_FileSize = File::GetSize(_rFileName);
|
m_FileSize = File::GetSize(_rFileName);
|
||||||
m_Platform = DiscIO::IVolume::ELF_DOL;
|
m_Platform = DiscIO::IVolume::ELF_DOL;
|
||||||
|
m_blob_type = DiscIO::BlobType::DIRECTORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string path, name;
|
std::string path, name;
|
||||||
|
@ -209,7 +209,7 @@ void GameListItem::DoState(PointerWrap &p)
|
||||||
p.Do(m_FileSize);
|
p.Do(m_FileSize);
|
||||||
p.Do(m_VolumeSize);
|
p.Do(m_VolumeSize);
|
||||||
p.Do(m_Country);
|
p.Do(m_Country);
|
||||||
p.Do(m_BlobCompressed);
|
p.Do(m_blob_type);
|
||||||
p.Do(m_pImage);
|
p.Do(m_pImage);
|
||||||
p.Do(m_ImageWidth);
|
p.Do(m_ImageWidth);
|
||||||
p.Do(m_ImageHeight);
|
p.Do(m_ImageHeight);
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "Common/Common.h"
|
#include "Common/Common.h"
|
||||||
|
#include "DiscIO/Blob.h"
|
||||||
#include "DiscIO/Volume.h"
|
#include "DiscIO/Volume.h"
|
||||||
|
|
||||||
#if defined(HAVE_WX) && HAVE_WX
|
#if defined(HAVE_WX) && HAVE_WX
|
||||||
|
@ -37,9 +38,14 @@ public:
|
||||||
const std::string GetWiiFSPath() const;
|
const std::string GetWiiFSPath() const;
|
||||||
DiscIO::IVolume::ECountry GetCountry() const {return m_Country;}
|
DiscIO::IVolume::ECountry GetCountry() const {return m_Country;}
|
||||||
DiscIO::IVolume::EPlatform GetPlatform() const { return m_Platform; }
|
DiscIO::IVolume::EPlatform GetPlatform() const { return m_Platform; }
|
||||||
|
DiscIO::BlobType GetBlobType() const { return m_blob_type; }
|
||||||
const std::string& GetIssues() const { return m_issues; }
|
const std::string& GetIssues() const { return m_issues; }
|
||||||
int GetEmuState() const { return m_emu_state; }
|
int GetEmuState() const { return m_emu_state; }
|
||||||
bool IsCompressed() const {return m_BlobCompressed;}
|
bool IsCompressed() const
|
||||||
|
{
|
||||||
|
return m_blob_type == DiscIO::BlobType::GCZ || m_blob_type == DiscIO::BlobType::CISO ||
|
||||||
|
m_blob_type == DiscIO::BlobType::WBFS;
|
||||||
|
}
|
||||||
u64 GetFileSize() const {return m_FileSize;}
|
u64 GetFileSize() const {return m_FileSize;}
|
||||||
u64 GetVolumeSize() const {return m_VolumeSize;}
|
u64 GetVolumeSize() const {return m_VolumeSize;}
|
||||||
// 0 is the first disc, 1 is the second disc
|
// 0 is the first disc, 1 is the second disc
|
||||||
|
@ -68,13 +74,13 @@ private:
|
||||||
|
|
||||||
DiscIO::IVolume::ECountry m_Country;
|
DiscIO::IVolume::ECountry m_Country;
|
||||||
DiscIO::IVolume::EPlatform m_Platform;
|
DiscIO::IVolume::EPlatform m_Platform;
|
||||||
|
DiscIO::BlobType m_blob_type;
|
||||||
u16 m_Revision;
|
u16 m_Revision;
|
||||||
|
|
||||||
#if defined(HAVE_WX) && HAVE_WX
|
#if defined(HAVE_WX) && HAVE_WX
|
||||||
wxBitmap m_Bitmap;
|
wxBitmap m_Bitmap;
|
||||||
#endif
|
#endif
|
||||||
bool m_Valid;
|
bool m_Valid;
|
||||||
bool m_BlobCompressed;
|
|
||||||
std::vector<u8> m_pImage;
|
std::vector<u8> m_pImage;
|
||||||
int m_ImageWidth, m_ImageHeight;
|
int m_ImageWidth, m_ImageHeight;
|
||||||
u8 m_disc_number;
|
u8 m_disc_number;
|
||||||
|
|
Loading…
Reference in New Issue