summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/dialog.cpp40
-rw-r--r--src/globals.cpp1
-rw-r--r--src/globals.h1
-rw-r--r--src/vsession.cpp20
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();