From aac807fd3a79432480f46520f228dd38ac97b54d Mon Sep 17 00:00:00 2001
From: Lioncash <mathew1800@gmail.com>
Date: Thu, 16 Aug 2018 10:28:03 -0400
Subject: [PATCH 1/3] qt/main: Get rid of compilation warnings

Gets rid of truncation warnings about conversion to int. While we're at
it, we can also de-hardcode the buffer size being used.
---
 src/yuzu/main.cpp | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index f7eee7769c..2e62135f41 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -634,18 +634,22 @@ void GMainWindow::OnMenuInstallToNAND() {
         if (!dest->Resize(src->GetSize()))
             return false;
 
+        std::array<u8, 0x1000> buffer{};
+        const int progress_maximum = static_cast<int>(src->GetSize() / buffer.size());
+
         QProgressDialog progress(fmt::format("Installing file \"{}\"...", src->GetName()).c_str(),
-                                 "Cancel", 0, src->GetSize() / 0x1000, this);
+                                 "Cancel", 0, progress_maximum, this);
         progress.setWindowModality(Qt::WindowModal);
 
-        std::array<u8, 0x1000> buffer{};
-        for (size_t i = 0; i < src->GetSize(); i += 0x1000) {
+        for (size_t i = 0; i < src->GetSize(); i += buffer.size()) {
             if (progress.wasCanceled()) {
                 dest->Resize(0);
                 return false;
             }
 
-            progress.setValue(i / 0x1000);
+            const int progress_value = static_cast<int>(i / buffer.size());
+            progress.setValue(progress_value);
+
             const auto read = src->Read(buffer.data(), buffer.size(), i);
             dest->Write(buffer.data(), read, i);
         }

From 2a3d7128d14133e8a2ae7f4559ed97bc7c843b8d Mon Sep 17 00:00:00 2001
From: Lioncash <mathew1800@gmail.com>
Date: Thu, 16 Aug 2018 10:30:41 -0400
Subject: [PATCH 2/3] qt/main: Make installation dialog text within
 OnMenuInstallToNAND() translatable

This is user-facing text, so it should be marked as translatable by Qt.
---
 src/yuzu/main.cpp | 29 +++++++++++++++--------------
 1 file changed, 15 insertions(+), 14 deletions(-)

diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 2e62135f41..b8fc7d514b 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -637,8 +637,9 @@ void GMainWindow::OnMenuInstallToNAND() {
         std::array<u8, 0x1000> buffer{};
         const int progress_maximum = static_cast<int>(src->GetSize() / buffer.size());
 
-        QProgressDialog progress(fmt::format("Installing file \"{}\"...", src->GetName()).c_str(),
-                                 "Cancel", 0, progress_maximum, this);
+        QProgressDialog progress(
+            tr("Installing file \"%1\"...").arg(QString::fromStdString(src->GetName())),
+            tr("Cancel"), 0, progress_maximum, this);
         progress.setWindowModality(Qt::WindowModal);
 
         for (size_t i = 0; i < src->GetSize(); i += buffer.size()) {
@@ -672,9 +673,9 @@ void GMainWindow::OnMenuInstallToNAND() {
     };
 
     const auto overwrite = [this]() {
-        return QMessageBox::question(this, "Failed to Install",
-                                     "The file you are attempting to install already exists "
-                                     "in the cache. Would you like to overwrite it?") ==
+        return QMessageBox::question(this, tr("Failed to Install"),
+                                     tr("The file you are attempting to install already exists "
+                                        "in the cache. Would you like to overwrite it?")) ==
                QMessageBox::Yes;
     };
 
@@ -713,15 +714,15 @@ void GMainWindow::OnMenuInstallToNAND() {
                 return;
             }
 
-            static const QStringList tt_options{"System Application",
-                                                "System Archive",
-                                                "System Application Update",
-                                                "Firmware Package (Type A)",
-                                                "Firmware Package (Type B)",
-                                                "Game",
-                                                "Game Update",
-                                                "Game DLC",
-                                                "Delta Title"};
+            const QStringList tt_options{tr("System Application"),
+                                         tr("System Archive"),
+                                         tr("System Application Update"),
+                                         tr("Firmware Package (Type A)"),
+                                         tr("Firmware Package (Type B)"),
+                                         tr("Game"),
+                                         tr("Game Update"),
+                                         tr("Game DLC"),
+                                         tr("Delta Title")};
             bool ok;
             const auto item = QInputDialog::getItem(
                 this, tr("Select NCA Install Type..."),

From 9791f0d5905ac29cf87756f4344ed3b6d3ac9a86 Mon Sep 17 00:00:00 2001
From: Lioncash <mathew1800@gmail.com>
Date: Thu, 16 Aug 2018 10:37:56 -0400
Subject: [PATCH 3/3] qt/main: Unindent code in OnMenuInstallToNAND()

We can change this into an early-return if the filename is empty.
There's no need to include all of the code within the if statement.
---
 src/yuzu/main.cpp | 148 +++++++++++++++++++++++-----------------------
 1 file changed, 74 insertions(+), 74 deletions(-)

diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index b8fc7d514b..2df65023a1 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -628,6 +628,10 @@ void GMainWindow::OnMenuInstallToNAND() {
     QString filename = QFileDialog::getOpenFileName(this, tr("Install File"),
                                                     UISettings::values.roms_path, file_filter);
 
+    if (filename.isEmpty()) {
+        return;
+    }
+
     const auto qt_raw_copy = [this](FileSys::VirtualFile src, FileSys::VirtualFile dest) {
         if (src == nullptr || dest == nullptr)
             return false;
@@ -679,86 +683,82 @@ void GMainWindow::OnMenuInstallToNAND() {
                QMessageBox::Yes;
     };
 
-    if (!filename.isEmpty()) {
-        if (filename.endsWith("xci", Qt::CaseInsensitive)) {
-            const auto xci = std::make_shared<FileSys::XCI>(
-                vfs->OpenFile(filename.toStdString(), FileSys::Mode::Read));
-            if (xci->GetStatus() != Loader::ResultStatus::Success) {
-                failed();
-                return;
-            }
-            const auto res =
-                Service::FileSystem::GetUserNANDContents()->InstallEntry(xci, false, qt_raw_copy);
-            if (res == FileSys::InstallResult::Success) {
-                success();
-            } else {
-                if (res == FileSys::InstallResult::ErrorAlreadyExists) {
-                    if (overwrite()) {
-                        const auto res2 = Service::FileSystem::GetUserNANDContents()->InstallEntry(
-                            xci, true, qt_raw_copy);
-                        if (res2 == FileSys::InstallResult::Success) {
-                            success();
-                        } else {
-                            failed();
-                        }
+    if (filename.endsWith("xci", Qt::CaseInsensitive)) {
+        const auto xci = std::make_shared<FileSys::XCI>(
+            vfs->OpenFile(filename.toStdString(), FileSys::Mode::Read));
+        if (xci->GetStatus() != Loader::ResultStatus::Success) {
+            failed();
+            return;
+        }
+        const auto res =
+            Service::FileSystem::GetUserNANDContents()->InstallEntry(xci, false, qt_raw_copy);
+        if (res == FileSys::InstallResult::Success) {
+            success();
+        } else {
+            if (res == FileSys::InstallResult::ErrorAlreadyExists) {
+                if (overwrite()) {
+                    const auto res2 = Service::FileSystem::GetUserNANDContents()->InstallEntry(
+                        xci, true, qt_raw_copy);
+                    if (res2 == FileSys::InstallResult::Success) {
+                        success();
+                    } else {
+                        failed();
                     }
+                }
+            } else {
+                failed();
+            }
+        }
+    } else {
+        const auto nca = std::make_shared<FileSys::NCA>(
+            vfs->OpenFile(filename.toStdString(), FileSys::Mode::Read));
+        if (nca->GetStatus() != Loader::ResultStatus::Success) {
+            failed();
+            return;
+        }
+
+        const QStringList tt_options{tr("System Application"),
+                                     tr("System Archive"),
+                                     tr("System Application Update"),
+                                     tr("Firmware Package (Type A)"),
+                                     tr("Firmware Package (Type B)"),
+                                     tr("Game"),
+                                     tr("Game Update"),
+                                     tr("Game DLC"),
+                                     tr("Delta Title")};
+        bool ok;
+        const auto item = QInputDialog::getItem(
+            this, tr("Select NCA Install Type..."),
+            tr("Please select the type of title you would like to install this NCA as:\n(In "
+               "most instances, the default 'Game' is fine.)"),
+            tt_options, 5, false, &ok);
+
+        auto index = tt_options.indexOf(item);
+        if (!ok || index == -1) {
+            QMessageBox::warning(this, tr("Failed to Install"),
+                                 tr("The title type you selected for the NCA is invalid."));
+            return;
+        }
+
+        if (index >= 5)
+            index += 0x7B;
+
+        const auto res = Service::FileSystem::GetUserNANDContents()->InstallEntry(
+            nca, static_cast<FileSys::TitleType>(index), false, qt_raw_copy);
+        if (res == FileSys::InstallResult::Success) {
+            success();
+        } else if (res == FileSys::InstallResult::ErrorAlreadyExists) {
+            if (overwrite()) {
+                const auto res2 = Service::FileSystem::GetUserNANDContents()->InstallEntry(
+                    nca, static_cast<FileSys::TitleType>(index), true, qt_raw_copy);
+                if (res2 == FileSys::InstallResult::Success) {
+                    success();
                 } else {
                     failed();
                 }
             }
         } else {
-            const auto nca = std::make_shared<FileSys::NCA>(
-                vfs->OpenFile(filename.toStdString(), FileSys::Mode::Read));
-            if (nca->GetStatus() != Loader::ResultStatus::Success) {
-                failed();
-                return;
-            }
-
-            const QStringList tt_options{tr("System Application"),
-                                         tr("System Archive"),
-                                         tr("System Application Update"),
-                                         tr("Firmware Package (Type A)"),
-                                         tr("Firmware Package (Type B)"),
-                                         tr("Game"),
-                                         tr("Game Update"),
-                                         tr("Game DLC"),
-                                         tr("Delta Title")};
-            bool ok;
-            const auto item = QInputDialog::getItem(
-                this, tr("Select NCA Install Type..."),
-                tr("Please select the type of title you would like to install this NCA as:\n(In "
-                   "most instances, the default 'Game' is fine.)"),
-                tt_options, 5, false, &ok);
-
-            auto index = tt_options.indexOf(item);
-            if (!ok || index == -1) {
-                QMessageBox::warning(this, tr("Failed to Install"),
-                                     tr("The title type you selected for the NCA is invalid."));
-                return;
-            }
-
-            if (index >= 5)
-                index += 0x7B;
-
-            const auto res = Service::FileSystem::GetUserNANDContents()->InstallEntry(
-                nca, static_cast<FileSys::TitleType>(index), false, qt_raw_copy);
-            if (res == FileSys::InstallResult::Success) {
-                success();
-            } else {
-                if (res == FileSys::InstallResult::ErrorAlreadyExists) {
-                    if (overwrite()) {
-                        const auto res2 = Service::FileSystem::GetUserNANDContents()->InstallEntry(
-                            nca, static_cast<FileSys::TitleType>(index), true, qt_raw_copy);
-                        if (res2 == FileSys::InstallResult::Success) {
-                            success();
-                        } else {
-                            failed();
-                        }
-                    }
-                } else {
-                    failed();
-                }
-            }
+            failed();
         }
     }
 }