filename = getSettingsPath(scope, QCoreApplication::applicationName(), handler.extension);
readFunc = handler.readFunc;
writeFunc = handler.writeFunc;
+ fileinfo.setFile(filename);
+ fileinfo.setCaching(false);
}
QSettingsPrivate::QSettingsPrivate(const QString &fileName, QSettings::Format format)
filename = getSettingsPath(scope, fileName, handler.extension);
readFunc = handler.readFunc;
writeFunc = handler.writeFunc;
+ fileinfo.setFile(filename);
+ fileinfo.setCaching(false);
}
QSettingsPrivate::~QSettingsPrivate()
{
}
-void QSettingsPrivate::read()
+void QSettingsPrivate::read() const
{
- QFileInfo info(filename);
- if (!info.isReadable() || info.size() == 0) {
+ if (!fileinfo.isReadable() || fileinfo.size() == 0) {
status = QSettings::AccessError;
- // no warning, info.exists() may return false if not readable
+ // no warning, fileinfo.exists() may return false if not readable
+ return;
+ }
+
+ const QDateTime newstamp = fileinfo.lastModified();
+ if (timestamp == newstamp) {
return;
}
return;
}
- timestamp = info.lastModified();
+ timestamp = newstamp;
}
void QSettingsPrivate::write()
return;
}
- QFileInfo info(filename);
- const QDateTime newstamp = info.lastModified();
- if (timestamp < newstamp || !newstamp.isValid()) {
- QSettingsPrivate::read();
- }
-
+ QSettingsPrivate::read();
foreach (const QString &key, map.keys()) {
if (!pending.contains(key)) {
QSettings::SettingsMap QSettings::map() const
{
Q_D(const QSettings);
+ d->read();
return d->map;
}
QStringList QSettings::keys() const
{
Q_D(const QSettings);
+ d->read();
if (!d->pending.isEmpty()) {
QStringList mapkeys = d->map.keys();
foreach(const QString &key, d->pending.keys()) {
bool QSettings::isWritable() const
{
Q_D(const QSettings);
- QFileInfo info(d->filename);
- if (info.isWritable()) {
+ if (d->fileinfo.isWritable()) {
return true;
}
// if the file does not exist, check if it can be created
- QFileInfo dirinfo(info.absolutePath());
+ QFileInfo dirinfo(d->fileinfo.absolutePath());
return dirinfo.isWritable();
}
void QSettings::remove(const QString &key)
{
Q_D(QSettings);
+ d->read();
const QString groupkey = d->toGroupKey(key);
foreach(const QString &key, d->map.keys()) {
if (key.startsWith(groupkey)) {
bool QSettings::contains(const QString &key) const
{
Q_D(const QSettings);
+ d->read();
const QString groupkey = d->toGroupKey(key);
return (d->map.contains(groupkey) || d->pending.contains(groupkey));
}
QVariant QSettings::value(const QString &key, const QVariant &defaultValue) const
{
Q_D(const QSettings);
+ d->read();
const QString groupkey = d->toGroupKey(key);
if (d->pending.contains(groupkey)) {
return d->pending.value(groupkey);
//
#include "qdatetime.h"
+#include "qfileinfo.h"
#include "qstringlist.h"
#include "qobject_p.h"
QSettingsPrivate(const QString &fileName, QSettings::Format format);
~QSettingsPrivate();
- void read();
+ void read() const;
void write();
void notify();
QSettings::Format format;
QSettings::Scope scope;
- QSettings::SettingsStatus status;
+ mutable QSettings::SettingsStatus status;
QString filename;
- QSettings::SettingsMap map;
+ mutable QSettings::SettingsMap map;
QSettings::SettingsMap pending;
QString group;
QSettings::ReadFunc readFunc;
QSettings::WriteFunc writeFunc;
- QDateTime timestamp;
+ mutable QDateTime timestamp;
+ mutable QFileInfo fileinfo;
};
QT_END_NAMESPACE