diff options
Diffstat (limited to 'Source/Core/DolphinQt/ConvertDialog.cpp')
| -rw-r--r-- | Source/Core/DolphinQt/ConvertDialog.cpp | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/Source/Core/DolphinQt/ConvertDialog.cpp b/Source/Core/DolphinQt/ConvertDialog.cpp index 0d01785dc4..831c0ec641 100644 --- a/Source/Core/DolphinQt/ConvertDialog.cpp +++ b/Source/Core/DolphinQt/ConvertDialog.cpp @@ -57,6 +57,7 @@ ConvertDialog::ConvertDialog(QList<std::shared_ptr<const UICommon::GameFile>> fi m_format = new QComboBox; m_format->addItem(QStringLiteral("ISO"), static_cast<int>(DiscIO::BlobType::PLAIN)); m_format->addItem(QStringLiteral("GCZ"), static_cast<int>(DiscIO::BlobType::GCZ)); + m_format->addItem(QStringLiteral("WIA"), static_cast<int>(DiscIO::BlobType::WIA)); if (std::all_of(m_files.begin(), m_files.end(), [](const auto& file) { return file->GetBlobType() == DiscIO::BlobType::PLAIN; })) { @@ -88,7 +89,10 @@ ConvertDialog::ConvertDialog(QList<std::shared_ptr<const UICommon::GameFile>> fi "It takes up more space than any other format.\n\n" "GCZ: A basic compressed format which is compatible with most versions of " "Dolphin and some other programs. It can't efficiently compress junk data " - "(unless removed) or encrypted Wii data.")); + "(unless removed) or encrypted Wii data.\n\n" + "WIA: An advanced compressed format which is compatible with recent versions " + "of Dolphin and a few other programs. It can efficiently compress encrypted " + "Wii data, but not junk data (unless removed).")); info_text->setWordWrap(true); QVBoxLayout* info_layout = new QVBoxLayout; @@ -166,6 +170,13 @@ void ConvertDialog::OnFormatChanged() break; } + case DiscIO::BlobType::WIA: + m_block_size->setEnabled(true); + + // This is the smallest block size supported by WIA. For performance, larger sizes are avoided. + AddToBlockSizeComboBox(0x200000); + + break; default: break; } @@ -224,7 +235,11 @@ void ConvertDialog::Convert() break; case DiscIO::BlobType::GCZ: extension = QStringLiteral(".gcz"); - filter = tr("Compressed GC/Wii images (*.gcz)"); + filter = tr("GCZ GC/Wii images (*.gcz)"); + break; + case DiscIO::BlobType::WIA: + extension = QStringLiteral(".wia"); + filter = tr("WIA GC/Wii images (*.wia)"); break; default: ASSERT(false); @@ -351,6 +366,16 @@ void ConvertDialog::Convert() return good; }); } + else if (format == DiscIO::BlobType::WIA) + { + good = std::async(std::launch::async, [&] { + const bool good = + DiscIO::ConvertToWIA(blob_reader.get(), original_path, dst_path.toStdString(), + block_size, &CompressCB, &progress_dialog); + progress_dialog.Reset(); + return good; + }); + } progress_dialog.GetRaw()->exec(); if (!good.get()) |
