mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-17 02:45:33 +08:00
refs #815 When a cache/settings file has errors, back it up before it can be overwritten.
This commit is contained in:
@@ -22,7 +22,6 @@
|
|||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QDBusMetaType>
|
#include <QDBusMetaType>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QFile>
|
|
||||||
#include <QFileInfo>
|
#include <QFileInfo>
|
||||||
#include <QFlags>
|
#include <QFlags>
|
||||||
#include <QIODevice>
|
#include <QIODevice>
|
||||||
@@ -450,6 +449,7 @@ namespace BlackMisc
|
|||||||
if (! messages.isEmpty())
|
if (! messages.isEmpty())
|
||||||
{
|
{
|
||||||
ok = false;
|
ok = false;
|
||||||
|
backupFile(file);
|
||||||
CLogMessage::preformatted(messages);
|
CLogMessage::preformatted(messages);
|
||||||
}
|
}
|
||||||
temp.removeDuplicates(currentValues);
|
temp.removeDuplicates(currentValues);
|
||||||
@@ -459,6 +459,26 @@ namespace BlackMisc
|
|||||||
(keysMessage.isEmpty() ? o_values.keys().to<QStringList>().join(",") : keysMessage) << dir << (ok ? "successfully" : "with errors");
|
(keysMessage.isEmpty() ? o_values.keys().to<QStringList>().join(",") : keysMessage) << dir << (ok ? "successfully" : "with errors");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CValueCache::backupFile(QFile &file) const
|
||||||
|
{
|
||||||
|
QDir dir = getCacheRootDirectory();
|
||||||
|
QString relative = "backups/" + dir.relativeFilePath(file.fileName());
|
||||||
|
QString absolute = dir.absoluteFilePath(relative);
|
||||||
|
absolute += "." + QDateTime::currentDateTime().toString(QStringLiteral("yyMMddhhmmss"));
|
||||||
|
if (QFile::exists(absolute)) { return; }
|
||||||
|
if (! dir.mkpath(QFileInfo(relative).path()))
|
||||||
|
{
|
||||||
|
CLogMessage(this).error("Failed to create %1") << QFileInfo(absolute).path();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (! file.copy(absolute))
|
||||||
|
{
|
||||||
|
CLogMessage(this).error("Failed to back up %1: %2") << QFileInfo(file).fileName() << file.errorString();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
CLogMessage(this).info("Backed up %1 to %2") << QFileInfo(file).fileName() << dir.absoluteFilePath("backups");
|
||||||
|
}
|
||||||
|
|
||||||
void CValueCache::markAllAsSaved(const QString &keyPrefix)
|
void CValueCache::markAllAsSaved(const QString &keyPrefix)
|
||||||
{
|
{
|
||||||
QMutexLocker lock(&m_mutex);
|
QMutexLocker lock(&m_mutex);
|
||||||
|
|||||||
@@ -29,6 +29,7 @@
|
|||||||
#include <QChar>
|
#include <QChar>
|
||||||
#include <QDBusArgument>
|
#include <QDBusArgument>
|
||||||
#include <QDateTime>
|
#include <QDateTime>
|
||||||
|
#include <QFile>
|
||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
#include <QMap>
|
#include <QMap>
|
||||||
#include <QMetaType>
|
#include <QMetaType>
|
||||||
@@ -320,6 +321,7 @@ namespace BlackMisc
|
|||||||
Element &getElement(const QString &key);
|
Element &getElement(const QString &key);
|
||||||
Element &getElement(const QString &key, QMap<QString, ElementPtr>::const_iterator pos);
|
Element &getElement(const QString &key, QMap<QString, ElementPtr>::const_iterator pos);
|
||||||
std::tuple<CVariant, qint64, bool> getValue(const QString &key);
|
std::tuple<CVariant, qint64, bool> getValue(const QString &key);
|
||||||
|
void backupFile(QFile &file) const;
|
||||||
|
|
||||||
virtual void connectPage(Private::CValuePage *page);
|
virtual void connectPage(Private::CValuePage *page);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user