From 10bc881dfd1959841c6398745e26cf1b3434d9ef Mon Sep 17 00:00:00 2001 From: Volker Lanz Date: Sun, 11 Apr 2010 16:12:16 +0000 Subject: [PATCH] use KIO for file IO where appropriate svn path=/trunk/extragear/sysadmin/partitionmanager/; revision=1113737 --- src/gui/applyprogressdialog.cpp | 31 ++++++++++++++---------- src/gui/mainwindow.cpp | 42 ++++++++++++++++++++++----------- 2 files changed, 46 insertions(+), 27 deletions(-) diff --git a/src/gui/applyprogressdialog.cpp b/src/gui/applyprogressdialog.cpp index 17d13a3..a4b6fd3 100644 --- a/src/gui/applyprogressdialog.cpp +++ b/src/gui/applyprogressdialog.cpp @@ -44,6 +44,10 @@ #include #include #include +#include +#include +#include +#include const QString ApplyProgressDialog::m_TimeFormat = "hh:mm:ss"; @@ -379,26 +383,27 @@ void ApplyProgressDialog::keyPressEvent(QKeyEvent* e) void ApplyProgressDialog::saveReport() { - QString fileName = KFileDialog::getSaveFileName(KUrl("kfiledialog://saveReport")); + const KUrl url = KFileDialog::getSaveUrl(KUrl("kfiledialog://saveReport")); - if (fileName.isEmpty()) + if (url.isEmpty()) return; - if (!QFile::exists(fileName) || KMessageBox::warningContinueCancel(this, i18nc("@info", "Do you want to overwrite the existing file %1?", fileName), i18nc("@title:window", "Overwrite Existing File?"), KGuiItem(i18nc("@action:button", "Overwrite File")), KStandardGuiItem::cancel()) == KMessageBox::Continue) + KTemporaryFile tempFile; + + if (tempFile.open()) { - QFile file(fileName); + tempFile.write(Report::htmlHeader().toUtf8()); + tempFile.write(report().toHtml().toUtf8()); + tempFile.write(Report::htmlFooter().toUtf8()); - if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) - { - file.write(Report::htmlHeader().toUtf8()); - file.write(report().toHtml().toUtf8()); - file.write(Report::htmlFooter().toUtf8()); + tempFile.close(); - file.close(); - } - else - KMessageBox::sorry(this, i18nc("@info", "Could not open file %1 for writing.", fileName), i18nc("@title:window", "Could Not Save Report.")); + KIO::CopyJob* job = KIO::move(tempFile.fileName(), url, KIO::HideProgressInfo); + if (!KIO::NetAccess::synchronousRun(job, NULL)) + job->ui()->showErrorMessage(); } + else + KMessageBox::sorry(this, i18nc("@info", "Could not create temporary file when trying to save to %1.", url.fileName()), i18nc("@title:window", "Could Not Save Report.")); } void ApplyProgressDialog::browserReport() diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index a72485d..42b9f89 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -64,6 +64,10 @@ #include #include #include +#include +#include +#include +#include #include #include @@ -726,21 +730,28 @@ void MainWindow::onImportPartitionTable() { Q_ASSERT(pmWidget().selectedDevice()); - Device& device = *pmWidget().selectedDevice(); + const KUrl url = KFileDialog::getOpenUrl(KUrl("kfiledialog://importPartitionTable")); - QString fileName = KFileDialog::getOpenFileName(KUrl("kfiledialog://importPartitionTable")); - - if (fileName.isEmpty()) + if (url.isEmpty()) return; + QString fileName; + if (!KIO::NetAccess::download(url, fileName, this)) + { + KMessageBox::error(this, i18nc("@info", "Could not open input file %1 for import: %s", url.fileName(), KIO::NetAccess::lastErrorString()), i18nc("@title:window", "Error Importing Partition Table")); + return; + } + QFile file(fileName); if (!file.open(QFile::ReadOnly)) { - KMessageBox::error(this, i18nc("@info", "Could not open input file %1 for import.", fileName), i18nc("@title:window", "Error Importing Partition Table")); + KMessageBox::error(this, i18nc("@info", "Could not open temporary file %1 while trying to import from %2.", fileName, url.fileName()), i18nc("@title:window", "Error Importing Partition Table")); return; } + Device& device = *pmWidget().selectedDevice(); + QByteArray line; QRegExp rxPartition("(\\d+);(\\d+);(\\d+);(\\w+);(\\w+);(\"\\w*\");(\"[^\"]*\")"); QRegExp rxType("type:\\s\"(.+)\""); @@ -884,27 +895,30 @@ void MainWindow::onExportPartitionTable() Q_ASSERT(pmWidget().selectedDevice()); Q_ASSERT(pmWidget().selectedDevice()->partitionTable()); - QString fileName = KFileDialog::getSaveFileName(KUrl("kfiledialog://exportPartitionTable")); + const KUrl url = KFileDialog::getSaveUrl(KUrl("kfiledialog://exportPartitionTable")); - if (fileName.isEmpty()) + if (url.isEmpty()) return; - if (QFile::exists(fileName) && KMessageBox::warningContinueCancel(this, i18nc("@info", "Do you want to overwrite the existing file %1?", fileName), i18nc("@title:window", "Overwrite Existing File?"), KGuiItem(i18nc("@action:button", "Overwrite File")), KStandardGuiItem::cancel()) != KMessageBox::Continue) - return; + KTemporaryFile tempFile; - QFile file(fileName); - - if (!file.open(QFile::WriteOnly | QFile::Truncate)) + if (!tempFile.open()) { - KMessageBox::error(this, i18nc("@info", "Could not create output file %1 for export.", fileName), i18nc("@title:window", "Error Exporting Partition Table")); + KMessageBox::error(this, i18nc("@info", "Could not create temporary file when trying to save to %1.", url.fileName()), i18nc("@title:window", "Error Exporting Partition Table")); return; } - QTextStream stream(&file); + QTextStream stream(&tempFile); stream << "##|v1|## partition table of " << pmWidget().selectedDevice()->deviceNode() << "\n"; stream << "# on " << QDateTime::currentDateTime().toString() << "\n"; stream << *pmWidget().selectedDevice()->partitionTable(); + + tempFile.close(); + + KIO::CopyJob* job = KIO::move(tempFile.fileName(), url, KIO::HideProgressInfo); + if (!KIO::NetAccess::synchronousRun(job, NULL)) + job->ui()->showErrorMessage(); } void MainWindow::onFileSystemSupport()