From 727ba2f2d05967cc5934c340587a9d4fd5ec550c Mon Sep 17 00:00:00 2001
From: FearlessTobi <thm.frey@gmail.com>
Date: Sat, 2 Nov 2019 19:22:36 +0100
Subject: [PATCH] citra_qt: add amiibo drag and drop support

Co-Authored-By: Valentin Vanelslande <vvanelslandedev@gmail.com>
---
 src/yuzu/main.cpp | 21 +++++++++++++++++----
 src/yuzu/main.h   |  1 +
 2 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index d6bb18d24a..160613ee15 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -1839,6 +1839,10 @@ void GMainWindow::OnLoadAmiibo() {
         return;
     }
 
+    LoadAmiibo(filename);
+}
+
+void GMainWindow::LoadAmiibo(const QString& filename) {
     Core::System& system{Core::System::GetInstance()};
     Service::SM::ServiceManager& sm = system.ServiceManager();
     auto nfc = sm.GetService<Service::NFP::Module::Interface>("nfp:user");
@@ -2189,10 +2193,19 @@ static bool IsSingleFileDropEvent(QDropEvent* event) {
 }
 
 void GMainWindow::dropEvent(QDropEvent* event) {
-    if (IsSingleFileDropEvent(event) && ConfirmChangeGame()) {
-        const QMimeData* mimeData = event->mimeData();
-        QString filename = mimeData->urls().at(0).toLocalFile();
-        BootGame(filename);
+    if (!IsSingleFileDropEvent(event)) {
+        return;
+    }
+
+    const QMimeData* mime_data = event->mimeData();
+    const QString filename = mime_data->urls().at(0).toLocalFile();
+
+    if (emulation_running && QFileInfo(filename).suffix() == QStringLiteral("bin")) {
+        LoadAmiibo(filename);
+    } else {
+        if (ConfirmChangeGame()) {
+            BootGame(filename);
+        }
     }
 }
 
diff --git a/src/yuzu/main.h b/src/yuzu/main.h
index fd4b9ccf54..7f46bea2b8 100644
--- a/src/yuzu/main.h
+++ b/src/yuzu/main.h
@@ -142,6 +142,7 @@ private:
 
     void ShowTelemetryCallout();
     void SetDiscordEnabled(bool state);
+    void LoadAmiibo(const QString& filename);
 
     void SelectAndSetCurrentUser();