From 8f6cf246a6c04e82cdb2d1fa4496badac35c612b Mon Sep 17 00:00:00 2001
From: Akira Ohgaki <akiraohgaki@gmail.com>
Date: Sat, 8 Oct 2016 01:25:59 +0900
Subject: [PATCH] Save downloaded file

---
 src/handlers/xdgurl.cpp | 46 ++++++++++++++++++++---------------------
 src/handlers/xdgurl.h   |  5 ++---
 2 files changed, 25 insertions(+), 26 deletions(-)

diff --git a/src/handlers/xdgurl.cpp b/src/handlers/xdgurl.cpp
index b63b2ec..97069e5 100644
--- a/src/handlers/xdgurl.cpp
+++ b/src/handlers/xdgurl.cpp
@@ -190,10 +190,29 @@ bool XdgUrl::_uncompressArchive(const QString &path, const QString &targetDir)
     return false;
 }
 
-void XdgUrl::_saveDownloadedFile(const QTemporaryFile &temporaryFile)
+void XdgUrl::_saveDownloadedFile(QNetworkReply *reply)
 {
     QJsonObject result;
 
+    QTemporaryFile temporaryFile;
+
+    if (!temporaryFile.open()) {
+        result["error"] = QString("save_error");
+        emit finished(Utility::Json::convertObjToStr(result));
+        return;
+    }
+
+    temporaryFile.write(reply->readAll());
+
+    QMimeDatabase mimeDb;
+    QString mimeType = mimeDb.mimeTypeForFile(temporaryFile.fileName()).name();
+
+    if (mimeType == "text/html" || mimeType == "application/xhtml+xml") {
+        result["error"] = QString("filetype_error");
+        emit finished(Utility::Json::convertObjToStr(result));
+        return;
+    }
+
     QString destination = _destinations[_metadata["type"].toString()].toString();
     QString path = destination + "/" + _metadata["filename"].toString();
 
@@ -211,7 +230,7 @@ void XdgUrl::_saveDownloadedFile(const QTemporaryFile &temporaryFile)
     emit finished(Utility::Json::convertObjToStr(result));
 }
 
-void XdgUrl::_installDownloadedFile(const QTemporaryFile &temporaryFile)
+void XdgUrl::_installDownloadedFile(QNetworkReply *reply)
 {
 }
 
@@ -240,30 +259,11 @@ void XdgUrl::_downloaded(QNetworkReply *reply)
         return;
     }
 
-    QTemporaryFile temporaryFile;
-
-    if (!temporaryFile.open()) {
-        result["error"] = QString("save_error");
-        emit finished(Utility::Json::convertObjToStr(result));
-        return;
-    }
-
-    temporaryFile.write(reply->readAll());
-
-    QMimeDatabase mimeDb;
-    QString mimeType = mimeDb.mimeTypeForFile(temporaryFile.fileName()).name();
-
-    if (mimeType == "text/html" || mimeType == "application/xhtml+xml") {
-        result["error"] = QString("filetype_error");
-        emit finished(Utility::Json::convertObjToStr(result));
-        return;
-    }
-
     if (_metadata["command"].toString() == "download") {
-        _saveDownloadedFile(temporaryFile);
+        _saveDownloadedFile(reply);
     }
     else if (_metadata["command"].toString() == "install") {
-        _installDownloadedFile(temporaryFile);
+        _installDownloadedFile(reply);
     }
 }
 
diff --git a/src/handlers/xdgurl.h b/src/handlers/xdgurl.h
index fe6b64c..9fcccc4 100644
--- a/src/handlers/xdgurl.h
+++ b/src/handlers/xdgurl.h
@@ -4,7 +4,6 @@
 #include <QObject>
 #include <QJsonObject>
 
-class QTemporaryFile;
 class QNetworkReply;
 
 namespace Core {
@@ -38,8 +37,8 @@ private:
     QJsonObject _loadArchiveTypes();
     bool _installPlasmapkg(const QString &path, const QString &type = "plasmoid");
     bool _uncompressArchive(const QString &path, const QString &targetDir);
-    void _saveDownloadedFile(const QTemporaryFile &temporaryFile);
-    void _installDownloadedFile(const QTemporaryFile &temporaryFile);
+    void _saveDownloadedFile(QNetworkReply *reply);
+    void _installDownloadedFile(QNetworkReply *reply);
 
 private slots:
     void _downloaded(QNetworkReply *reply);
-- 
GitLab