diff options
Diffstat (limited to 'src/vsession.cpp')
-rw-r--r-- | src/vsession.cpp | 35 |
1 files changed, 33 insertions, 2 deletions
diff --git a/src/vsession.cpp b/src/vsession.cpp index 8134bc6..9d3cadb 100644 --- a/src/vsession.cpp +++ b/src/vsession.cpp @@ -305,6 +305,10 @@ QList<Session*> VSession::readXmlFile(const QString& filepath) { QDomDocument doc; QFile file(filepath); + QString backup_filename = "/tmp/vmchooser2_backup.xml"; + QFile backup_file(backup_filename); + + if (!file.open(QIODevice::ReadOnly)) { if (debugMode) { qDebug() << "Cannot read file: " << file.fileName(); @@ -315,9 +319,36 @@ QList<Session*> VSession::readXmlFile(const QString& filepath) { if (debugMode) { qDebug() << "XML file not valid: " << file.fileName(); } - file.close(); - return retval; + + file.close(); + + // try to use backup file + if (!backup_file.open(QIODevice::ReadOnly)) { + if (debugMode) { + qDebug() << "Cannot read backup file " << backup_filename << " either"; + } + return retval; + } + + if (!doc.setContent(&backup_file)) { + if (debugMode) { + qDebug() << "XML file not valid: " << backup_file.fileName(); + } + backup_file.close(); + return retval; + } + + if (debugMode) { + qDebug() << "Used backup file " << backup_filename; + } + + backup_file.close(); + } else { + // file is valid --> create backup file + QFile::remove(backup_filename); + QFile::copy(filepath, backup_filename); } + file.close(); QString dirName(QFileInfo(filepath).dir().absolutePath()); |