use KIO for file IO where appropriate

svn path=/trunk/extragear/sysadmin/partitionmanager/; revision=1113737
This commit is contained in:
Volker Lanz 2010-04-11 16:12:16 +00:00
parent 216868d8ee
commit 10bc881dfd
2 changed files with 46 additions and 27 deletions

View File

@ -44,6 +44,10 @@
#include <ktemporaryfile.h> #include <ktemporaryfile.h>
#include <kaboutdata.h> #include <kaboutdata.h>
#include <ktextedit.h> #include <ktextedit.h>
#include <kio/netaccess.h>
#include <kio/jobuidelegate.h>
#include <kio/copyjob.h>
#include <ktemporaryfile.h>
const QString ApplyProgressDialog::m_TimeFormat = "hh:mm:ss"; const QString ApplyProgressDialog::m_TimeFormat = "hh:mm:ss";
@ -379,26 +383,27 @@ void ApplyProgressDialog::keyPressEvent(QKeyEvent* e)
void ApplyProgressDialog::saveReport() 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; return;
if (!QFile::exists(fileName) || KMessageBox::warningContinueCancel(this, i18nc("@info", "Do you want to overwrite the existing file <filename>%1</filename>?", 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)) tempFile.close();
{
file.write(Report::htmlHeader().toUtf8());
file.write(report().toHtml().toUtf8());
file.write(Report::htmlFooter().toUtf8());
file.close(); KIO::CopyJob* job = KIO::move(tempFile.fileName(), url, KIO::HideProgressInfo);
} if (!KIO::NetAccess::synchronousRun(job, NULL))
else job->ui()->showErrorMessage();
KMessageBox::sorry(this, i18nc("@info", "Could not open file <filename>%1</filename> for writing.", fileName), i18nc("@title:window", "Could Not Save Report."));
} }
else
KMessageBox::sorry(this, i18nc("@info", "Could not create temporary file when trying to save to <filename>%1</filename>.", url.fileName()), i18nc("@title:window", "Could Not Save Report."));
} }
void ApplyProgressDialog::browserReport() void ApplyProgressDialog::browserReport()

View File

@ -64,6 +64,10 @@
#include <kmenu.h> #include <kmenu.h>
#include <kxmlguifactory.h> #include <kxmlguifactory.h>
#include <kfiledialog.h> #include <kfiledialog.h>
#include <kio/netaccess.h>
#include <kio/jobuidelegate.h>
#include <kio/copyjob.h>
#include <ktemporaryfile.h>
#include <QCloseEvent> #include <QCloseEvent>
#include <QReadLocker> #include <QReadLocker>
@ -726,21 +730,28 @@ void MainWindow::onImportPartitionTable()
{ {
Q_ASSERT(pmWidget().selectedDevice()); Q_ASSERT(pmWidget().selectedDevice());
Device& device = *pmWidget().selectedDevice(); const KUrl url = KFileDialog::getOpenUrl(KUrl("kfiledialog://importPartitionTable"));
QString fileName = KFileDialog::getOpenFileName(KUrl("kfiledialog://importPartitionTable")); if (url.isEmpty())
if (fileName.isEmpty())
return; return;
QString fileName;
if (!KIO::NetAccess::download(url, fileName, this))
{
KMessageBox::error(this, i18nc("@info", "Could not open input file <filename>%1</filename> for import: %s", url.fileName(), KIO::NetAccess::lastErrorString()), i18nc("@title:window", "Error Importing Partition Table"));
return;
}
QFile file(fileName); QFile file(fileName);
if (!file.open(QFile::ReadOnly)) if (!file.open(QFile::ReadOnly))
{ {
KMessageBox::error(this, i18nc("@info", "Could not open input file <filename>%1</filename> for import.", fileName), i18nc("@title:window", "Error Importing Partition Table")); KMessageBox::error(this, i18nc("@info", "Could not open temporary file <filename>%1</filename> while trying to import from <filename>%2</filename>.", fileName, url.fileName()), i18nc("@title:window", "Error Importing Partition Table"));
return; return;
} }
Device& device = *pmWidget().selectedDevice();
QByteArray line; QByteArray line;
QRegExp rxPartition("(\\d+);(\\d+);(\\d+);(\\w+);(\\w+);(\"\\w*\");(\"[^\"]*\")"); QRegExp rxPartition("(\\d+);(\\d+);(\\d+);(\\w+);(\\w+);(\"\\w*\");(\"[^\"]*\")");
QRegExp rxType("type:\\s\"(.+)\""); QRegExp rxType("type:\\s\"(.+)\"");
@ -884,27 +895,30 @@ void MainWindow::onExportPartitionTable()
Q_ASSERT(pmWidget().selectedDevice()); Q_ASSERT(pmWidget().selectedDevice());
Q_ASSERT(pmWidget().selectedDevice()->partitionTable()); 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; return;
if (QFile::exists(fileName) && KMessageBox::warningContinueCancel(this, i18nc("@info", "Do you want to overwrite the existing file <filename>%1</filename>?", fileName), i18nc("@title:window", "Overwrite Existing File?"), KGuiItem(i18nc("@action:button", "Overwrite File")), KStandardGuiItem::cancel()) != KMessageBox::Continue) KTemporaryFile tempFile;
return;
QFile file(fileName); if (!tempFile.open())
if (!file.open(QFile::WriteOnly | QFile::Truncate))
{ {
KMessageBox::error(this, i18nc("@info", "Could not create output file <filename>%1</filename> 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 <filename>%1</filename>.", url.fileName()), i18nc("@title:window", "Error Exporting Partition Table"));
return; return;
} }
QTextStream stream(&file); QTextStream stream(&tempFile);
stream << "##|v1|## partition table of " << pmWidget().selectedDevice()->deviceNode() << "\n"; stream << "##|v1|## partition table of " << pmWidget().selectedDevice()->deviceNode() << "\n";
stream << "# on " << QDateTime::currentDateTime().toString() << "\n"; stream << "# on " << QDateTime::currentDateTime().toString() << "\n";
stream << *pmWidget().selectedDevice()->partitionTable(); 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() void MainWindow::onFileSystemSupport()