SettingsAccessor: Remember last saved state

Remember last saved data and do not save it again if nothing had
changed.

Change-Id: I093859ff5edc8d1d6e7b17ecd97985ca6fb0e579
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
Tobias Hunger
2018-02-27 16:03:33 +01:00
parent 5c4abeaffe
commit 990d26deba
3 changed files with 22 additions and 3 deletions

View File

@@ -443,6 +443,12 @@ bool PersistentSettingsWriter::save(const QVariantMap &data, QWidget *parent) co
FileName PersistentSettingsWriter::fileName() const
{ return m_fileName; }
//** * @brief Set contents of file (e.g. from data read from it). */
void PersistentSettingsWriter::setContents(const QVariantMap &data)
{
m_savedData = data;
}
bool PersistentSettingsWriter::write(const QVariantMap &data, QString *errorString) const
{
QDir tmp;
@@ -472,10 +478,12 @@ bool PersistentSettingsWriter::write(const QVariantMap &data, QString *errorStri
saver.setResult(&w);
}
bool ok = saver.finalize();
if (ok)
if (ok) {
m_savedData = data;
else if (errorString)
} else if (errorString) {
m_savedData.clear();
*errorString = saver.errorString();
}
return ok;
}

View File

@@ -61,6 +61,8 @@ public:
FileName fileName() const;
void setContents(const QVariantMap &data);
private:
bool write(const QVariantMap &data, QString *errorString) const;

View File

@@ -82,6 +82,7 @@ QVariantMap SettingsAccessor::restoreSettings(QWidget *parent) const
QTC_ASSERT(!m_baseFilePath.isEmpty(), return QVariantMap());
const RestoreData result = readData(m_baseFilePath, parent);
const ProceedInfo pi = result.hasIssue() ? reportIssues(result.issue.value(), result.path, parent) : ProceedInfo::Continue;
return pi == ProceedInfo::DiscardAndContinue ? QVariantMap() : result.data;
}
@@ -92,6 +93,7 @@ QVariantMap SettingsAccessor::restoreSettings(QWidget *parent) const
bool SettingsAccessor::saveSettings(const QVariantMap &data, QWidget *parent) const
{
const optional<Issue> result = writeData(m_baseFilePath, data, parent);
const ProceedInfo pi = result ? reportIssues(result.value(), m_baseFilePath, parent) : ProceedInfo::Continue;
return pi == ProceedInfo::Continue;
}
@@ -132,7 +134,14 @@ SettingsAccessor::RestoreData SettingsAccessor::readFile(const FileName &path) c
.arg(path.toUserOutput()), Issue::Type::ERROR));
}
return RestoreData(path, reader.restoreValues());
const QVariantMap data = reader.restoreValues();
if (path == m_baseFilePath) {
if (!m_writer)
m_writer = std::make_unique<PersistentSettingsWriter>(m_baseFilePath, docType);
m_writer->setContents(data);
}
return RestoreData(path, data);
}
/*!