From 64464c15feb353402224f76bff712578e8c8aae9 Mon Sep 17 00:00:00 2001 From: Luca Beltrame Date: Mon, 16 Feb 2015 00:12:14 +0100 Subject: [PATCH] Implement proper saving files (still buggy somehow) --- src/mainwindow.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/mainwindow.h | 1 + 2 files changed, 45 insertions(+) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index a6cb389..b5de749 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -36,6 +37,8 @@ #include #include #include +#include +#include #include "libdanbooru/danbooruservice.h" #include "libdanbooru/danboorupost.h" @@ -170,6 +173,9 @@ DanbooruMainWindow::DanbooruMainWindow(QWidget *parent) searchDockWidget->hide(); }); + connect(m_view->rootObject(), SIGNAL(downloadRequested(const QUrl&)), this, + SLOT(slotHandleDownload(const QUrl&))); + } DanbooruMainWindow::~DanbooruMainWindow() @@ -365,4 +371,42 @@ void DanbooruMainWindow::optionsPreferences() dialog->show(); } +void DanbooruMainWindow::slotHandleDownload(const QUrl &url) { + + QFileDialog saveDialog(this); + saveDialog.setFileMode(QFileDialog::AnyFile); + saveDialog.setWindowTitle(i18n("Save file")); + saveDialog.setAcceptMode(QFileDialog::AcceptSave); + + KIO::MimetypeJob* mimeJob = KIO::mimetype(url, KIO::HideProgressInfo); + + if (mimeJob->exec()) { + saveDialog.setMimeTypeFilters(QStringList(mimeJob->mimetype())); + } else { + saveDialog.setNameFilter(i18n("Images (*.png *.gif *.jpg);;All files (*.*)")); + } + +// savedialog.setMimeTypeFilters(); + saveDialog.setConfirmOverwrite(true); + saveDialog.setDirectory(QStandardPaths::writableLocation(QStandardPaths::HomeLocation)); + saveDialog.selectFile(url.fileName()); + + if (saveDialog.exec()) { + QString localFileName = saveDialog.selectedFiles().at(0); + QUrl localFile = QUrl::fromLocalFile(localFileName); + + qDebug() << "URL" << localFile; + + KIO::FileCopyJob *job = KIO::file_copy(url, localFile, -1, KIO::DefaultFlags); + + connect(job, &KIO::Job::result, [this](KJob *job) { + if (job->error()) { + return; + } + }); + + } + +} + } // namespace Danbooru diff --git a/src/mainwindow.h b/src/mainwindow.h index 9435766..d94210c 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -89,6 +89,7 @@ private Q_SLOTS: void downloadPosts(); void optionsPreferences(); void loadSettings(); + void slotHandleDownload(const QUrl &url);