|
|
|
@ -2101,6 +2101,7 @@ void GMainWindow::OnMenuInstallToNAND() { |
|
|
|
QStringList new_files{}; // Newly installed files that do not yet exist in the NAND
|
|
|
|
QStringList overwritten_files{}; // Files that overwrote those existing in the NAND
|
|
|
|
QStringList failed_files{}; // Files that failed to install due to errors
|
|
|
|
bool detected_base_install{}; // Whether a base game was attempted to be installed
|
|
|
|
|
|
|
|
ui.action_Install_File_NAND->setEnabled(false); |
|
|
|
|
|
|
|
@ -2126,6 +2127,7 @@ void GMainWindow::OnMenuInstallToNAND() { |
|
|
|
|
|
|
|
while (!future.isFinished()) { |
|
|
|
QCoreApplication::processEvents(); |
|
|
|
std::this_thread::sleep_for(std::chrono::milliseconds(1)); |
|
|
|
} |
|
|
|
|
|
|
|
result = future.result(); |
|
|
|
@ -2146,6 +2148,10 @@ void GMainWindow::OnMenuInstallToNAND() { |
|
|
|
case InstallResult::Failure: |
|
|
|
failed_files.append(QFileInfo(file).fileName()); |
|
|
|
break; |
|
|
|
case InstallResult::BaseInstallAttempted: |
|
|
|
failed_files.append(QFileInfo(file).fileName()); |
|
|
|
detected_base_install = true; |
|
|
|
break; |
|
|
|
} |
|
|
|
|
|
|
|
--remaining; |
|
|
|
@ -2153,6 +2159,13 @@ void GMainWindow::OnMenuInstallToNAND() { |
|
|
|
|
|
|
|
install_progress->close(); |
|
|
|
|
|
|
|
if (detected_base_install) { |
|
|
|
QMessageBox::warning( |
|
|
|
this, tr("Install Results"), |
|
|
|
tr("To avoid possible conflicts, we discourage users from installing base games to the " |
|
|
|
"NAND.\nPlease, only use this feature to install updates and DLC.")); |
|
|
|
} |
|
|
|
|
|
|
|
const QString install_results = |
|
|
|
(new_files.isEmpty() ? QString{} |
|
|
|
: tr("%n file(s) were newly installed\n", "", new_files.size())) + |
|
|
|
@ -2214,11 +2227,14 @@ InstallResult GMainWindow::InstallNSPXCI(const QString& filename) { |
|
|
|
const auto res = |
|
|
|
Core::System::GetInstance().GetFileSystemController().GetUserNANDContents()->InstallEntry( |
|
|
|
*nsp, true, qt_raw_copy); |
|
|
|
if (res == FileSys::InstallResult::Success) { |
|
|
|
switch (res) { |
|
|
|
case FileSys::InstallResult::Success: |
|
|
|
return InstallResult::Success; |
|
|
|
} else if (res == FileSys::InstallResult::OverwriteExisting) { |
|
|
|
case FileSys::InstallResult::OverwriteExisting: |
|
|
|
return InstallResult::Overwrite; |
|
|
|
} else { |
|
|
|
case FileSys::InstallResult::ErrorBaseInstall: |
|
|
|
return InstallResult::BaseInstallAttempted; |
|
|
|
default: |
|
|
|
return InstallResult::Failure; |
|
|
|
} |
|
|
|
} |
|
|
|
|