Clean up code a little bit

This commit is contained in:
Pengfei
2021-06-28 22:37:03 +08:00
parent 974363b0d9
commit 5a4bf7daff
2 changed files with 47 additions and 44 deletions
+40 -35
View File
@@ -27,7 +27,7 @@
#include "frontend/import_dialog.h" #include "frontend/import_dialog.h"
#include "ui_import_dialog.h" #include "ui_import_dialog.h"
QString ReadableByteSize(qulonglong size) { static QString ReadableByteSize(qulonglong size) {
static const std::array<const char*, 6> units = {QT_TR_NOOP("B"), QT_TR_NOOP("KiB"), static const std::array<const char*, 6> units = {QT_TR_NOOP("B"), QT_TR_NOOP("KiB"),
QT_TR_NOOP("MiB"), QT_TR_NOOP("GiB"), QT_TR_NOOP("MiB"), QT_TR_NOOP("GiB"),
QT_TR_NOOP("TiB"), QT_TR_NOOP("PiB")}; QT_TR_NOOP("TiB"), QT_TR_NOOP("PiB")};
@@ -63,24 +63,25 @@ static const std::unordered_map<Core::EncryptionType, const char*> EncryptionTyp
{Core::EncryptionType::NCCHSecure4, QT_TR_NOOP("Secure4")}, {Core::EncryptionType::NCCHSecure4, QT_TR_NOOP("Secure4")},
}}; }};
QString GetContentName(const Core::ContentSpecifier& specifier) { static QString GetContentName(const Core::ContentSpecifier& specifier) {
return specifier.name.empty() return specifier.name.empty()
? QStringLiteral("0x%1").arg(specifier.id, 16, 16, QLatin1Char('0')) ? QStringLiteral("0x%1").arg(specifier.id, 16, 16, QLatin1Char('0'))
: QString::fromStdString(specifier.name); : QString::fromStdString(specifier.name);
} }
QString GetContentTypeName(Core::ContentType type) { static QString GetContentTypeName(Core::ContentType type) {
return QObject::tr(std::get<1>(ContentTypeMap.at(static_cast<std::size_t>(type))), return QObject::tr(std::get<1>(ContentTypeMap.at(static_cast<std::size_t>(type))),
"ImportDialog"); "ImportDialog");
} }
QPixmap GetContentTypeIcon(Core::ContentType type) { static QPixmap GetContentTypeIcon(Core::ContentType type) {
return QIcon::fromTheme( return QIcon::fromTheme(
QString::fromUtf8(std::get<2>(ContentTypeMap.at(static_cast<std::size_t>(type))))) QString::fromUtf8(std::get<2>(ContentTypeMap.at(static_cast<std::size_t>(type)))))
.pixmap(24); .pixmap(24);
} }
QPixmap GetContentIcon(const Core::ContentSpecifier& specifier, bool use_category_icon = false) { static QPixmap GetContentIcon(const Core::ContentSpecifier& specifier,
bool use_category_icon = false) {
if (specifier.icon.empty()) { if (specifier.icon.empty()) {
// Return a category icon, or a null icon // Return a category icon, or a null icon
return use_category_icon ? GetContentTypeIcon(specifier.type) return use_category_icon ? GetContentTypeIcon(specifier.type)
@@ -475,34 +476,6 @@ std::vector<Core::ContentSpecifier> ImportDialog::GetSelectedContentList() {
return to_import; return to_import;
} }
static QString FormatETA(int eta) {
if (eta < 0) {
return QStringLiteral("&nbsp;");
}
return QCoreApplication::translate("ImportDialog", "ETA %1m%2s")
.arg(eta / 60, 2, 10, QLatin1Char('0'))
.arg(eta % 60, 2, 10, QLatin1Char('0'));
}
void ImportDialog::StartImporting() {
UpdateSizeDisplay();
if (!ui->buttonBox->button(QDialogButtonBox::StandardButton::Ok)->isEnabled()) {
// Space is no longer enough
QMessageBox::warning(this, tr("Not Enough Space"),
tr("Your disk does not have enough space to hold imported data."));
return;
}
auto to_import = GetSelectedContentList();
const std::size_t total_count = to_import.size();
auto* job =
new MultiJob(this, importer, std::move(to_import), &Core::SDMCImporter::ImportContent,
&Core::SDMCImporter::DeleteContent, &Core::SDMCImporter::AbortImporting);
RunMultiJob(job, total_count, total_selected_size);
}
Core::ContentSpecifier ImportDialog::SpecifierFromItem(QTreeWidgetItem* item) const { Core::ContentSpecifier ImportDialog::SpecifierFromItem(QTreeWidgetItem* item) const {
const auto* checkBox = static_cast<QCheckBox*>(ui->main->itemWidget(item, 0)); const auto* checkBox = static_cast<QCheckBox*>(ui->main->itemWidget(item, 0));
return contents[checkBox->property("id").toInt()]; return contents[checkBox->property("id").toInt()];
@@ -595,6 +568,15 @@ void ImportDialog::ShowAdvancedMenu() {
menu.exec(ui->advanced_button->mapToGlobal(ui->advanced_button->rect().bottomLeft())); menu.exec(ui->advanced_button->mapToGlobal(ui->advanced_button->rect().bottomLeft()));
} }
static QString FormatETA(int eta) {
if (eta < 0) {
return QStringLiteral("&nbsp;");
}
return QCoreApplication::translate("ImportDialog", "ETA %1m%2s")
.arg(eta / 60, 2, 10, QLatin1Char('0'))
.arg(eta % 60, 2, 10, QLatin1Char('0'));
}
// Runs the job, opening a dialog to report is progress. // Runs the job, opening a dialog to report is progress.
void ImportDialog::RunMultiJob(MultiJob* job, std::size_t total_count, u64 total_size) { void ImportDialog::RunMultiJob(MultiJob* job, std::size_t total_count, u64 total_size) {
// Try to map total_size to int range // Try to map total_size to int range
@@ -713,6 +695,27 @@ void ImportDialog::RunSimpleJob(SimpleJob* job) {
job->start(); job->start();
} }
void ImportDialog::StartImporting() {
UpdateSizeDisplay();
if (!ui->buttonBox->button(QDialogButtonBox::StandardButton::Ok)->isEnabled()) {
// Space is no longer enough
QMessageBox::warning(this, tr("Not Enough Space"),
tr("Your disk does not have enough space to hold imported data."));
return;
}
auto to_import = GetSelectedContentList();
const std::size_t total_count = to_import.size();
auto* job =
new MultiJob(this, importer, std::move(to_import), &Core::SDMCImporter::ImportContent,
&Core::SDMCImporter::DeleteContent, &Core::SDMCImporter::AbortImporting);
RunMultiJob(job, total_count, total_selected_size);
}
// CXI dumping
void ImportDialog::StartDumpingCXISingle(const Core::ContentSpecifier& specifier) { void ImportDialog::StartDumpingCXISingle(const Core::ContentSpecifier& specifier) {
const QString path = QFileDialog::getSaveFileName(this, tr("Dump CXI file"), last_dump_cxi_path, const QString path = QFileDialog::getSaveFileName(this, tr("Dump CXI file"), last_dump_cxi_path,
tr("CTR Executable Image (*.cxi)")); tr("CTR Executable Image (*.cxi)"));
@@ -734,7 +737,7 @@ void ImportDialog::StartDumpingCXISingle(const Core::ContentSpecifier& specifier
RunSimpleJob(job); RunSimpleJob(job);
} }
std::string GetCXIFileName(const Core::ContentSpecifier& specifier) { static std::string GetCXIFileName(const Core::ContentSpecifier& specifier) {
return QStringLiteral("%1 (%2).cxi") return QStringLiteral("%1 (%2).cxi")
.arg(QString::fromStdString(specifier.name)) .arg(QString::fromStdString(specifier.name))
.arg(specifier.id, 16, 16, QLatin1Char('0')) .arg(specifier.id, 16, 16, QLatin1Char('0'))
@@ -797,6 +800,8 @@ void ImportDialog::StartBatchDumpingCXI() {
RunMultiJob(job, total_count, total_size); RunMultiJob(job, total_count, total_size);
} }
// CIA building
void ImportDialog::StartBuildingCIASingle(const Core::ContentSpecifier& specifier) { void ImportDialog::StartBuildingCIASingle(const Core::ContentSpecifier& specifier) {
const QString path = QFileDialog::getSaveFileName(this, tr("Build CIA"), last_build_cia_path, const QString path = QFileDialog::getSaveFileName(this, tr("Build CIA"), last_build_cia_path,
tr("CTR Importable Archive (*.cia)")); tr("CTR Importable Archive (*.cia)"));
@@ -818,7 +823,7 @@ void ImportDialog::StartBuildingCIASingle(const Core::ContentSpecifier& specifie
RunSimpleJob(job); RunSimpleJob(job);
} }
std::string GetCIAFileName(const Core::ContentSpecifier& specifier) { static std::string GetCIAFileName(const Core::ContentSpecifier& specifier) {
return QStringLiteral("%1 (%2).cia") return QStringLiteral("%1 (%2).cia")
.arg(QString::fromStdString(specifier.name)) .arg(QString::fromStdString(specifier.name))
.arg(specifier.id, 16, 16, QLatin1Char('0')) .arg(specifier.id, 16, 16, QLatin1Char('0'))
+7 -9
View File
@@ -35,14 +35,6 @@ private:
void UpdateItemCheckState(QTreeWidgetItem* item); void UpdateItemCheckState(QTreeWidgetItem* item);
std::vector<Core::ContentSpecifier> GetSelectedContentList(); std::vector<Core::ContentSpecifier> GetSelectedContentList();
void StartImporting();
void StartBatchDumpingCXI();
QString last_batch_dump_cxi_path; // Used for recording last path in StartBatchDumpingCXI
void StartBatchBuildingCIA();
QString last_batch_build_cia_path; // Used for recording last path in StartBatchBuildingCIA
void InsertTopLevelItem(const QString& text, QPixmap icon = {}); void InsertTopLevelItem(const QString& text, QPixmap icon = {});
// When replace_name and replace_icon are present they are used instead of those in `content`. // When replace_name and replace_icon are present they are used instead of those in `content`.
void InsertSecondLevelItem(std::size_t row, const Core::ContentSpecifier& content, void InsertSecondLevelItem(std::size_t row, const Core::ContentSpecifier& content,
@@ -50,18 +42,24 @@ private:
QPixmap replace_icon = {}); QPixmap replace_icon = {});
Core::ContentSpecifier SpecifierFromItem(QTreeWidgetItem* item) const; Core::ContentSpecifier SpecifierFromItem(QTreeWidgetItem* item) const;
void OnContextMenu(const QPoint& point);
void OnContextMenu(const QPoint& point);
void ShowAdvancedMenu(); void ShowAdvancedMenu();
void RunMultiJob(MultiJob* job, std::size_t total_count, u64 total_size); void RunMultiJob(MultiJob* job, std::size_t total_count, u64 total_size);
void RunSimpleJob(SimpleJob* job); void RunSimpleJob(SimpleJob* job);
void StartImporting();
void StartDumpingCXISingle(const Core::ContentSpecifier& content); void StartDumpingCXISingle(const Core::ContentSpecifier& content);
QString last_dump_cxi_path; // Used for recording last path in StartDumpingCXISingle QString last_dump_cxi_path; // Used for recording last path in StartDumpingCXISingle
void StartBatchDumpingCXI();
QString last_batch_dump_cxi_path; // Used for recording last path in StartBatchDumpingCXI
void StartBuildingCIASingle(const Core::ContentSpecifier& content); void StartBuildingCIASingle(const Core::ContentSpecifier& content);
QString last_build_cia_path; // Used for recording last path in StartBuildingCIASingle QString last_build_cia_path; // Used for recording last path in StartBuildingCIASingle
void StartBatchBuildingCIA();
QString last_batch_build_cia_path; // Used for recording last path in StartBatchBuildingCIA
std::unique_ptr<Ui::ImportDialog> ui; std::unique_ptr<Ui::ImportDialog> ui;