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