summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorflacs <tilkax@gmail.com>2015-09-27 12:57:19 +0200
committerflacs <tilkax@gmail.com>2015-09-27 12:57:19 +0200
commit34c020352fde5f23969340d31b9ff71b03bf5bb6 (patch)
treec7175758ba79d33625f1a44436b542fea6d62006 /Source/Core
parent8ea9b07b59c8b45b6cbe1c559a228f5675dea71c (diff)
parent6935d281128ea78169ecde44e869f83a7b67ddb8 (diff)
Merge pull request #3092 from JosJuice/compressed-blobs
Display all compressed formats in blue in GUI
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/DiscIO/Blob.cpp2
-rw-r--r--Source/Core/DiscIO/Blob.h3
-rw-r--r--Source/Core/DiscIO/CISOBlob.h1
-rw-r--r--Source/Core/DiscIO/CompressedBlob.cpp8
-rw-r--r--Source/Core/DiscIO/CompressedBlob.h5
-rw-r--r--Source/Core/DiscIO/DriveBlob.h1
-rw-r--r--Source/Core/DiscIO/FileBlob.h1
-rw-r--r--Source/Core/DiscIO/Volume.h3
-rw-r--r--Source/Core/DiscIO/VolumeDirectory.cpp5
-rw-r--r--Source/Core/DiscIO/VolumeDirectory.h1
-rw-r--r--Source/Core/DiscIO/VolumeGC.cpp5
-rw-r--r--Source/Core/DiscIO/VolumeGC.h1
-rw-r--r--Source/Core/DiscIO/VolumeWad.cpp5
-rw-r--r--Source/Core/DiscIO/VolumeWad.h3
-rw-r--r--Source/Core/DiscIO/VolumeWiiCrypted.cpp5
-rw-r--r--Source/Core/DiscIO/VolumeWiiCrypted.h1
-rw-r--r--Source/Core/DiscIO/WbfsBlob.h1
-rw-r--r--Source/Core/DolphinQt/GameList/GameFile.cpp2
-rw-r--r--Source/Core/DolphinWX/ISOFile.cpp2
19 files changed, 43 insertions, 12 deletions
diff --git a/Source/Core/DiscIO/Blob.cpp b/Source/Core/DiscIO/Blob.cpp
index 19cb36d8b3..9ed8577c38 100644
--- a/Source/Core/DiscIO/Blob.cpp
+++ b/Source/Core/DiscIO/Blob.cpp
@@ -129,7 +129,7 @@ IBlobReader* CreateBlobReader(const std::string& filename)
if (IsWbfsBlob(filename))
return WbfsFileReader::Create(filename);
- if (IsCompressedBlob(filename))
+ if (IsGCZBlob(filename))
return CompressedBlobReader::Create(filename);
if (IsCISOBlob(filename))
diff --git a/Source/Core/DiscIO/Blob.h b/Source/Core/DiscIO/Blob.h
index a66a62d97b..a20ba1888a 100644
--- a/Source/Core/DiscIO/Blob.h
+++ b/Source/Core/DiscIO/Blob.h
@@ -25,7 +25,8 @@ class IBlobReader
public:
virtual ~IBlobReader() {}
- virtual u64 GetRawSize() const = 0;
+ virtual bool IsCompressed() const = 0;
+ virtual u64 GetRawSize() const = 0;
virtual u64 GetDataSize() const = 0;
// NOT thread-safe - can't call this from multiple threads.
virtual bool Read(u64 offset, u64 size, u8* out_ptr) = 0;
diff --git a/Source/Core/DiscIO/CISOBlob.h b/Source/Core/DiscIO/CISOBlob.h
index 7a4638ecd7..2cbf78ba62 100644
--- a/Source/Core/DiscIO/CISOBlob.h
+++ b/Source/Core/DiscIO/CISOBlob.h
@@ -36,6 +36,7 @@ class CISOFileReader : public IBlobReader
public:
static CISOFileReader* Create(const std::string& filename);
+ bool IsCompressed() const override { return true; }
u64 GetDataSize() const override;
u64 GetRawSize() const override;
bool Read(u64 offset, u64 nbytes, u8* out_ptr) override;
diff --git a/Source/Core/DiscIO/CompressedBlob.cpp b/Source/Core/DiscIO/CompressedBlob.cpp
index 074460f169..7b01aeed5d 100644
--- a/Source/Core/DiscIO/CompressedBlob.cpp
+++ b/Source/Core/DiscIO/CompressedBlob.cpp
@@ -57,7 +57,7 @@ CompressedBlobReader::CompressedBlobReader(const std::string& filename) : m_file
CompressedBlobReader* CompressedBlobReader::Create(const std::string& filename)
{
- if (IsCompressedBlob(filename))
+ if (IsGCZBlob(filename))
return new CompressedBlobReader(filename);
else
return nullptr;
@@ -150,7 +150,7 @@ bool CompressFileToBlob(const std::string& infile, const std::string& outfile, u
{
bool scrubbing = false;
- if (IsCompressedBlob(infile))
+ if (IsGCZBlob(infile))
{
PanicAlertT("\"%s\" is already compressed! Cannot compress it further.", infile.c_str());
return false;
@@ -332,7 +332,7 @@ bool CompressFileToBlob(const std::string& infile, const std::string& outfile, u
bool DecompressBlobToFile(const std::string& infile, const std::string& outfile, CompressCB callback, void* arg)
{
- if (!IsCompressedBlob(infile))
+ if (!IsGCZBlob(infile))
{
PanicAlertT("File not compressed");
return false;
@@ -402,7 +402,7 @@ bool DecompressBlobToFile(const std::string& infile, const std::string& outfile,
return true;
}
-bool IsCompressedBlob(const std::string& filename)
+bool IsGCZBlob(const std::string& filename)
{
File::IOFile f(filename, "rb");
diff --git a/Source/Core/DiscIO/CompressedBlob.h b/Source/Core/DiscIO/CompressedBlob.h
index 7157f805b3..d319ab3927 100644
--- a/Source/Core/DiscIO/CompressedBlob.h
+++ b/Source/Core/DiscIO/CompressedBlob.h
@@ -23,11 +23,11 @@
namespace DiscIO
{
-bool IsCompressedBlob(const std::string& filename);
+bool IsGCZBlob(const std::string& filename);
const u32 kBlobCookie = 0xB10BC001;
-// A blob file structure:
+// GCZ file structure:
// BlobHeader
// u64 offsetsToBlocks[n], top bit specifies whether the block is compressed, or not.
// compressed data
@@ -49,6 +49,7 @@ public:
static CompressedBlobReader* Create(const std::string& filename);
~CompressedBlobReader();
const CompressedBlobHeader &GetHeader() const { return m_header; }
+ bool IsCompressed() const override { return true; }
u64 GetDataSize() const override { return m_header.data_size; }
u64 GetRawSize() const override { return m_file_size; }
u64 GetBlockCompressedSize(u64 block_num) const;
diff --git a/Source/Core/DiscIO/DriveBlob.h b/Source/Core/DiscIO/DriveBlob.h
index f4716c1cf0..0ae09f5089 100644
--- a/Source/Core/DiscIO/DriveBlob.h
+++ b/Source/Core/DiscIO/DriveBlob.h
@@ -23,6 +23,7 @@ class DriveReader : public SectorReader
public:
static DriveReader* Create(const std::string& drive);
~DriveReader();
+ bool IsCompressed() const override { return false; }
u64 GetDataSize() const override { return m_size; }
u64 GetRawSize() const override { return m_size; }
diff --git a/Source/Core/DiscIO/FileBlob.h b/Source/Core/DiscIO/FileBlob.h
index 92135de2af..9d5aa630fa 100644
--- a/Source/Core/DiscIO/FileBlob.h
+++ b/Source/Core/DiscIO/FileBlob.h
@@ -19,6 +19,7 @@ class PlainFileReader : public IBlobReader
public:
static PlainFileReader* Create(const std::string& filename);
+ bool IsCompressed() const override { return false; }
u64 GetDataSize() const override { return m_size; }
u64 GetRawSize() const override { return m_size; }
bool Read(u64 offset, u64 nbytes, u8* out_ptr) override;
diff --git a/Source/Core/DiscIO/Volume.h b/Source/Core/DiscIO/Volume.h
index a2314e825d..c8172c677e 100644
--- a/Source/Core/DiscIO/Volume.h
+++ b/Source/Core/DiscIO/Volume.h
@@ -101,8 +101,9 @@ public:
virtual bool ChangePartition(u64 offset) { return false; }
virtual ECountry GetCountry() const = 0;
+ virtual bool IsCompressed() const = 0;
+ // Size of virtual disc (not always accurate)
virtual u64 GetSize() const = 0;
-
// Size on disc (compressed size)
virtual u64 GetRawSize() const = 0;
diff --git a/Source/Core/DiscIO/VolumeDirectory.cpp b/Source/Core/DiscIO/VolumeDirectory.cpp
index 8be726fd66..0be9f83953 100644
--- a/Source/Core/DiscIO/VolumeDirectory.cpp
+++ b/Source/Core/DiscIO/VolumeDirectory.cpp
@@ -227,6 +227,11 @@ IVolume::EPlatform CVolumeDirectory::GetVolumeType() const
return m_is_wii ? WII_DISC : GAMECUBE_DISC;
}
+bool CVolumeDirectory::IsCompressed() const
+{
+ return false;
+}
+
u64 CVolumeDirectory::GetSize() const
{
return 0;
diff --git a/Source/Core/DiscIO/VolumeDirectory.h b/Source/Core/DiscIO/VolumeDirectory.h
index 4dc7fa1a9a..8d90496e55 100644
--- a/Source/Core/DiscIO/VolumeDirectory.h
+++ b/Source/Core/DiscIO/VolumeDirectory.h
@@ -51,6 +51,7 @@ public:
ECountry GetCountry() const override;
+ bool IsCompressed() const override;
u64 GetSize() const override;
u64 GetRawSize() const override;
diff --git a/Source/Core/DiscIO/VolumeGC.cpp b/Source/Core/DiscIO/VolumeGC.cpp
index ce7eb69f78..d1a34a5e0e 100644
--- a/Source/Core/DiscIO/VolumeGC.cpp
+++ b/Source/Core/DiscIO/VolumeGC.cpp
@@ -169,6 +169,11 @@ std::string CVolumeGC::GetApploaderDate() const
return DecodeString(date);
}
+bool CVolumeGC::IsCompressed() const
+{
+ return m_pReader ? m_pReader->IsCompressed() : false;
+}
+
u64 CVolumeGC::GetSize() const
{
if (m_pReader)
diff --git a/Source/Core/DiscIO/VolumeGC.h b/Source/Core/DiscIO/VolumeGC.h
index 37777d093d..ed08b50871 100644
--- a/Source/Core/DiscIO/VolumeGC.h
+++ b/Source/Core/DiscIO/VolumeGC.h
@@ -39,6 +39,7 @@ public:
EPlatform GetVolumeType() const override;
ECountry GetCountry() const override;
+ bool IsCompressed() const override;
u64 GetSize() const override;
u64 GetRawSize() const override;
diff --git a/Source/Core/DiscIO/VolumeWad.cpp b/Source/Core/DiscIO/VolumeWad.cpp
index 6df6ceb423..fb510afefc 100644
--- a/Source/Core/DiscIO/VolumeWad.cpp
+++ b/Source/Core/DiscIO/VolumeWad.cpp
@@ -126,6 +126,11 @@ std::map<IVolume::ELanguage, std::string> CVolumeWAD::GetNames(bool prefer_long)
return ReadWiiNames(name_data);
}
+bool CVolumeWAD::IsCompressed() const
+{
+ return m_pReader ? m_pReader->IsCompressed() : false;
+}
+
u64 CVolumeWAD::GetSize() const
{
if (m_pReader)
diff --git a/Source/Core/DiscIO/VolumeWad.h b/Source/Core/DiscIO/VolumeWad.h
index 580a751a8d..99b1369fea 100644
--- a/Source/Core/DiscIO/VolumeWad.h
+++ b/Source/Core/DiscIO/VolumeWad.h
@@ -37,8 +37,9 @@ public:
std::string GetApploaderDate() const override { return ""; }
EPlatform GetVolumeType() const override;
-
ECountry GetCountry() const override;
+
+ bool IsCompressed() const override;
u64 GetSize() const override;
u64 GetRawSize() const override;
diff --git a/Source/Core/DiscIO/VolumeWiiCrypted.cpp b/Source/Core/DiscIO/VolumeWiiCrypted.cpp
index aa7f36da64..87c68f8cd2 100644
--- a/Source/Core/DiscIO/VolumeWiiCrypted.cpp
+++ b/Source/Core/DiscIO/VolumeWiiCrypted.cpp
@@ -250,6 +250,11 @@ u8 CVolumeWiiCrypted::GetDiscNumber() const
return disc_number;
}
+bool CVolumeWiiCrypted::IsCompressed() const
+{
+ return m_pReader ? m_pReader->IsCompressed() : false;
+}
+
u64 CVolumeWiiCrypted::GetSize() const
{
if (m_pReader)
diff --git a/Source/Core/DiscIO/VolumeWiiCrypted.h b/Source/Core/DiscIO/VolumeWiiCrypted.h
index 66b48a2e44..ccf0865122 100644
--- a/Source/Core/DiscIO/VolumeWiiCrypted.h
+++ b/Source/Core/DiscIO/VolumeWiiCrypted.h
@@ -43,6 +43,7 @@ public:
bool ChangePartition(u64 offset) override;
ECountry GetCountry() const override;
+ bool IsCompressed() const override;
u64 GetSize() const override;
u64 GetRawSize() const override;
diff --git a/Source/Core/DiscIO/WbfsBlob.h b/Source/Core/DiscIO/WbfsBlob.h
index f0a95b170c..75e3af449f 100644
--- a/Source/Core/DiscIO/WbfsBlob.h
+++ b/Source/Core/DiscIO/WbfsBlob.h
@@ -19,6 +19,7 @@ class WbfsFileReader : public IBlobReader
public:
static WbfsFileReader* Create(const std::string& filename);
+ bool IsCompressed() const override { return true; }
u64 GetDataSize() const override { return m_size; }
u64 GetRawSize() const override { return m_size; }
bool Read(u64 offset, u64 nbytes, u8* out_ptr) override;
diff --git a/Source/Core/DolphinQt/GameList/GameFile.cpp b/Source/Core/DolphinQt/GameList/GameFile.cpp
index 74b24590cb..2a7cf3df2e 100644
--- a/Source/Core/DolphinQt/GameList/GameFile.cpp
+++ b/Source/Core/DolphinQt/GameList/GameFile.cpp
@@ -113,7 +113,7 @@ GameFile::GameFile(const QString& fileName)
m_volume_size = volume->GetSize();
m_unique_id = QString::fromStdString(volume->GetUniqueID());
- m_compressed = DiscIO::IsCompressedBlob(fileName.toStdString());
+ m_compressed = volume->IsCompressed();
m_disc_number = volume->GetDiscNumber();
m_revision = volume->GetRevision();
diff --git a/Source/Core/DolphinWX/ISOFile.cpp b/Source/Core/DolphinWX/ISOFile.cpp
index f7841742cc..2f5b89681f 100644
--- a/Source/Core/DolphinWX/ISOFile.cpp
+++ b/Source/Core/DolphinWX/ISOFile.cpp
@@ -111,7 +111,7 @@ GameListItem::GameListItem(const std::string& _rFileName, const std::unordered_m
m_VolumeSize = pVolume->GetSize();
m_UniqueID = pVolume->GetUniqueID();
- m_BlobCompressed = DiscIO::IsCompressedBlob(_rFileName);
+ m_BlobCompressed = pVolume->IsCompressed();
m_disc_number = pVolume->GetDiscNumber();
m_Revision = pVolume->GetRevision();