From 87be4bc283eee72a51b5e8391147c60671351b80 Mon Sep 17 00:00:00 2001
From: Zach Hilman <zachhilman@gmail.com>
Date: Tue, 4 Sep 2018 14:44:40 -0400
Subject: [PATCH] main: Only show DRD deprecation warning once

---
 src/core/file_sys/card_image.h           |  1 -
 src/core/file_sys/registered_cache.cpp   |  1 +
 src/core/file_sys/registered_cache.h     |  1 +
 src/core/file_sys/submission_package.cpp |  1 +
 src/core/file_sys/submission_package.h   |  3 ++-
 src/core/loader/nsp.cpp                  |  2 +-
 src/yuzu/main.cpp                        | 16 +++++++++++++---
 7 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/src/core/file_sys/card_image.h b/src/core/file_sys/card_image.h
index bd8c0fcbfc..ce514dfa09 100644
--- a/src/core/file_sys/card_image.h
+++ b/src/core/file_sys/card_image.h
@@ -10,7 +10,6 @@
 #include "common/common_types.h"
 #include "common/swap.h"
 #include "core/file_sys/vfs.h"
-#include "core/loader/loader.h"
 
 namespace Loader {
 enum class ResultStatus : u16;
diff --git a/src/core/file_sys/registered_cache.cpp b/src/core/file_sys/registered_cache.cpp
index 94268d1278..cf6f774010 100644
--- a/src/core/file_sys/registered_cache.cpp
+++ b/src/core/file_sys/registered_cache.cpp
@@ -13,6 +13,7 @@
 #include "core/file_sys/content_archive.h"
 #include "core/file_sys/nca_metadata.h"
 #include "core/file_sys/registered_cache.h"
+#include "core/file_sys/submission_package.h"
 #include "core/file_sys/vfs_concat.h"
 #include "core/loader/loader.h"
 
diff --git a/src/core/file_sys/registered_cache.h b/src/core/file_sys/registered_cache.h
index 50e26f8fb2..467ceeef13 100644
--- a/src/core/file_sys/registered_cache.h
+++ b/src/core/file_sys/registered_cache.h
@@ -17,6 +17,7 @@
 namespace FileSys {
 class CNMT;
 class NCA;
+class NSP;
 class XCI;
 
 enum class ContentRecordType : u8;
diff --git a/src/core/file_sys/submission_package.cpp b/src/core/file_sys/submission_package.cpp
index ce05a58457..bde8798616 100644
--- a/src/core/file_sys/submission_package.cpp
+++ b/src/core/file_sys/submission_package.cpp
@@ -7,6 +7,7 @@
 #include "common/hex_util.h"
 #include "core/file_sys/content_archive.h"
 #include "core/file_sys/nca_metadata.h"
+#include "core/file_sys/partition_filesystem.h"
 #include "core/file_sys/submission_package.h"
 #include "core/loader/loader.h"
 
diff --git a/src/core/file_sys/submission_package.h b/src/core/file_sys/submission_package.h
index 482a8b71f7..0292164f92 100644
--- a/src/core/file_sys/submission_package.h
+++ b/src/core/file_sys/submission_package.h
@@ -13,10 +13,11 @@
 #include "core/file_sys/romfs_factory.h"
 #include "core/file_sys/vfs.h"
 #include "core/loader/loader.h"
-#include "romfs_factory.h"
 
 namespace FileSys {
 
+class PartitionFilesystem;
+
 class NSP : public ReadOnlyVfsDirectory {
 public:
     explicit NSP(VirtualFile file);
diff --git a/src/core/loader/nsp.cpp b/src/core/loader/nsp.cpp
index b59d40052e..7c06239f28 100644
--- a/src/core/loader/nsp.cpp
+++ b/src/core/loader/nsp.cpp
@@ -8,7 +8,7 @@
 #include "core/file_sys/card_image.h"
 #include "core/file_sys/content_archive.h"
 #include "core/file_sys/control_metadata.h"
-#include "core/file_sys/registered_cache.h"
+#include "core/file_sys/nca_metadata.h"
 #include "core/file_sys/romfs.h"
 #include "core/file_sys/submission_package.h"
 #include "core/hle/kernel/process.h"
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index 037bf2aef4..56bd3ee2e0 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -34,7 +34,9 @@
 #include "core/file_sys/content_archive.h"
 #include "core/file_sys/registered_cache.h"
 #include "core/file_sys/savedata_factory.h"
+#include "core/file_sys/submission_package.h"
 #include "core/file_sys/vfs_real.h"
+#include "core/hle/kernel/process.h"
 #include "core/hle/service/filesystem/filesystem.h"
 #include "core/loader/loader.h"
 #include "core/perf_stats.h"
@@ -76,6 +78,7 @@ __declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
  */
 enum class CalloutFlag : uint32_t {
     Telemetry = 0x1,
+    DRDDeprecation = 0x2,
 };
 
 static void ShowCalloutMessage(const QString& message, CalloutFlag flag) {
@@ -488,14 +491,21 @@ bool GMainWindow::LoadROM(const QString& filename) {
 
     const Core::System::ResultStatus result{system.Load(*render_window, filename.toStdString())};
 
-    if (system.GetAppLoader().GetFileType() == Loader::FileType::DeconstructedRomDirectory) {
+    const auto drd_callout =
+        (UISettings::values.callout_flags & static_cast<u32>(CalloutFlag::DRDDeprecation)) == 0;
+
+    if (result == Core::System::ResultStatus::Success &&
+        system.GetAppLoader().GetFileType() == Loader::FileType::DeconstructedRomDirectory &&
+        drd_callout) {
+        UISettings::values.callout_flags |= static_cast<u32>(CalloutFlag::DRDDeprecation);
         QMessageBox::warning(
             this, tr("Warning Outdated Game Format"),
             tr("You are using the deconstructed ROM directory format for this game, which is an "
                "outdated format that has been superseded by others such as NCA, NAX, XCI, or "
-               "NSP.<br><br>For an explanation of the various Switch formats yuzu supports, <a "
+               "NSP. Deconstructed ROM directories lack icons, metadata, and update "
+               "support.<br><br>For an explanation of the various Switch formats yuzu supports, <a "
                "href='https://yuzu-emu.org/wiki/overview-of-switch-game-formats'>check out our "
-               "wiki</a>."));
+               "wiki</a>. This message will not be shown again."));
     }
 
     render_window->DoneCurrent();