diff options
-rw-r--r-- | src/dialog.cpp | 40 | ||||
-rw-r--r-- | src/globals.cpp | 1 | ||||
-rw-r--r-- | src/globals.h | 1 | ||||
-rw-r--r-- | src/vsession.cpp | 20 |
4 files changed, 27 insertions, 35 deletions
diff --git a/src/dialog.cpp b/src/dialog.cpp index 0967d8c..009da02 100644 --- a/src/dialog.cpp +++ b/src/dialog.cpp @@ -8,6 +8,7 @@ #include <QTimer> #include <QDesktopWidget> #include <QDateTime> +#include <QTemporaryFile> #include "ui_dialog.h" #include "sessiontreeitem.h" @@ -293,53 +294,46 @@ void Dialog::onCenterTimer() { } void Dialog::addSessionsAfterDownload(QNetworkReply* reply) { + QString temp_filename; + if (reply->error() != QNetworkReply::NoError) { if (debugMode) { qDebug() << "Error reading from URL: " << reply->error(); } - QFile backup_file(xml_backup_filename); + QFile backup_file(xml_filename); if (!backup_file.open(QIODevice::ReadOnly)) { if (debugMode) { - qDebug() << "Cannot read backup file " << xml_backup_filename << " either"; + qDebug() << "Cannot read backup file " << xml_filename << " either"; } this->removeItem(QCoreApplication::instance()->translate("Dialog", "Loading..."), 1); this->addLabelItem(QCoreApplication::instance()->translate("Dialog", "URL Error"), 1); return; } if (debugMode) { - qDebug() << "Used backup file " << xml_backup_filename; + qDebug() << "Used backup file " << xml_filename; } backup_file.close(); - QList<Session*> sessions = VSession::readXmlFile(xml_backup_filename); + QList<Session*> sessions = VSession::readXmlFile(xml_filename); qSort(sessions.begin(), sessions.end(), myLessThan); this->addItems(sessions, 1); } else { - QFile file(xml_filename); - if (!file.open(QIODevice::WriteOnly)) { - if (debugMode) { - qDebug() << "Could not write XML to " << xml_filename; - } - return; - } - QByteArray data = reply->readAll(); - if (file.write(data) != data.length()) { - return; - } - - if (!file.setPermissions(QFile::ReadUser | QFile::ReadGroup | QFile::ReadOther | QFile::WriteUser | QFile::WriteGroup | QFile::WriteOther)) { - if (debugMode) { - qDebug() << "Could not change permissions of file: " << news_backup_filename; - } - } - file.close(); + // write xml to temporary file + temp_filename = QDir::tempPath() + "/vmchooser2/vmchooser-XXXXXX.xml"; + QTemporaryFile tmpfile(temp_filename); + if (!tmpfile.open() || tmpfile.write(data) == -1) { + return; + } + tmpfile.close(); + tmpfile.setAutoRemove(false); + temp_filename = tmpfile.fileName(); } - QList<Session*> sessions = VSession::readXmlFile(xml_filename); + QList<Session*> sessions = VSession::readXmlFile(temp_filename); this->removeItem(QCoreApplication::instance()->translate("Dialog", "Loading..."), 1); diff --git a/src/globals.cpp b/src/globals.cpp index 6ef15e4..876d35c 100644 --- a/src/globals.cpp +++ b/src/globals.cpp @@ -24,7 +24,6 @@ QString pool; QString theme; const QString iconsTempPath("/tmp/vmchooser2/icons/"); -const QString xml_backup_filename("/tmp/vmchooser2/vmchooser2_backup.xml"); const QString xml_filename("/tmp/vmchooser2/vmchooser2.xml"); const QString help_backup_filename("/tmp/vmchooser2/vmchooser2_help.xml"); const QString news_backup_filename("/tmp/vmchooser2/vmchooser2_news.xml"); diff --git a/src/globals.h b/src/globals.h index 6e00e92..d1ad8f4 100644 --- a/src/globals.h +++ b/src/globals.h @@ -44,7 +44,6 @@ extern QString pool; extern QString theme; extern const QString iconsTempPath; -extern const QString xml_backup_filename; extern const QString xml_filename; extern const QString help_backup_filename; extern const QString news_backup_filename; diff --git a/src/vsession.cpp b/src/vsession.cpp index 1283134..c2b1aef 100644 --- a/src/vsession.cpp +++ b/src/vsession.cpp @@ -292,8 +292,7 @@ QList<Session*> VSession::readXmlFile(const QString& filepath) { QDomDocument doc; QFile file(filepath); - QFile backup_file(xml_backup_filename); - + QFile backup_file(xml_filename); if (!file.open(QIODevice::ReadOnly)) { if (debugMode) { @@ -301,6 +300,7 @@ QList<Session*> VSession::readXmlFile(const QString& filepath) { } return retval; } + if (!doc.setContent(&file)) { if (debugMode) { qDebug() << "XML file not valid: " << file.fileName(); @@ -311,7 +311,7 @@ QList<Session*> VSession::readXmlFile(const QString& filepath) { // try to use backup file if (!backup_file.open(QIODevice::ReadOnly)) { if (debugMode) { - qDebug() << "Cannot read backup file " << xml_backup_filename << " either"; + qDebug() << "Cannot read backup file " << xml_filename << " either"; } return retval; } @@ -325,24 +325,24 @@ QList<Session*> VSession::readXmlFile(const QString& filepath) { } if (debugMode) { - qDebug() << "Used backup file " << xml_backup_filename; + qDebug() << "Used backup file " << xml_filename; } backup_file.close(); } else { + file.close(); + // file is valid --> create backup file - QFile::remove(xml_backup_filename); - QFile::copy(filepath, xml_backup_filename); - if (!QFile::setPermissions(xml_backup_filename, QFile::ReadUser | QFile::ReadGroup | QFile::ReadOther | QFile::WriteUser | QFile::WriteGroup | QFile::WriteOther)) { + QFile::remove(xml_filename); + QFile::rename(filepath, xml_filename); + if (!QFile::setPermissions(xml_filename, QFile::ReadUser | QFile::ReadGroup | QFile::ReadOther | QFile::WriteUser | QFile::WriteGroup | QFile::WriteOther)) { if (debugMode) { qDebug() << "Could not change permissions of file: " << news_backup_filename; } } } - file.close(); - - QString dirName(QFileInfo(filepath).dir().absolutePath()); + QString dirName(QFileInfo(xml_filename).dir().absolutePath()); QDomElement settingsNode = doc.firstChildElement("settings"); for (QDomElement el(settingsNode.firstChildElement("eintrag")); !el.isNull(); |