Settings: save values to queue as they are requested

UBSettings::value() now saves the requested value to the settings
"queue" (hash table) for faster subsequent access
preferencesAboutTextFull
Craig Watson 9 years ago
parent 599f925d58
commit 85acf0d643
  1. 25
      src/core/UBSettings.cpp
  2. 2
      src/core/UBSettings.h

@ -426,8 +426,14 @@ void UBSettings::init()
/** /**
* @brief Returns the value for the *key* setting, or *defaultValue* if the key doesn't exist * @brief Returns the value for the *key* setting, or *defaultValue* if the key doesn't exist
*
* The value is also added to the local settings queue, to prevent future disk I/O when accessing
* that same setting.
*
* If the value doesn't exist in the application settings (i.e it was not present in the config file),
* it is also added there.
*/ */
QVariant UBSettings::value ( const QString & key, const QVariant & defaultValue) const QVariant UBSettings::value ( const QString & key, const QVariant & defaultValue)
{ {
// Check first the settings queue, then the app settings, then the user settings. // Check first the settings queue, then the app settings, then the user settings.
// If the key exists in neither of these, then defaultValue is returned. // If the key exists in neither of these, then defaultValue is returned.
@ -435,10 +441,17 @@ QVariant UBSettings::value ( const QString & key, const QVariant & defaultValue)
if (mSettingsQueue.contains(key)) if (mSettingsQueue.contains(key))
return mSettingsQueue.value(key); return mSettingsQueue.value(key);
// If the setting doesn't exist in the App settings, add it there
if (!sAppSettings->contains(key) && !(defaultValue == QVariant())) if (!sAppSettings->contains(key) && !(defaultValue == QVariant()))
sAppSettings->setValue(key, defaultValue); sAppSettings->setValue(key, defaultValue);
return mUserSettings->value(key, sAppSettings->value(key, defaultValue)); QVariant val = mUserSettings->value(key, sAppSettings->value(key, defaultValue));
// If we got here, then the settings queue doesn't contain the value; add it
mSettingsQueue[key] = val;
return val;
} }
@ -453,8 +466,6 @@ void UBSettings::setValue (const QString & key, const QVariant & value)
*/ */
void UBSettings::save() void UBSettings::save()
{ {
// TODO: move this to a thread if it is too slow
QHash<QString, QVariant>::const_iterator it = mSettingsQueue.constBegin(); QHash<QString, QVariant>::const_iterator it = mSettingsQueue.constBegin();
while (it != mSettingsQueue.constEnd()) { while (it != mSettingsQueue.constEnd()) {
@ -480,9 +491,9 @@ void UBSettings::load()
keyList.removeDuplicates(); keyList.removeDuplicates();
foreach(const QString& key, keyList) { foreach(const QString& key, keyList) {
QVariant val = mUserSettings->value(key); value(key);
if (val != QVariant()) // value() actually handles saving the value to the queue, so
setValue(key, val); // we don't need to do it here
} }
} }

@ -399,7 +399,7 @@ class UBSettings : public QObject
void setPenPressureSensitive(bool sensitive); void setPenPressureSensitive(bool sensitive);
void setMarkerPressureSensitive(bool sensitive); void setMarkerPressureSensitive(bool sensitive);
QVariant value ( const QString & key, const QVariant & defaultValue = QVariant() ) const; QVariant value ( const QString & key, const QVariant & defaultValue = QVariant() );
void setValue (const QString & key,const QVariant & value); void setValue (const QString & key,const QVariant & value);
void colorChanged() { emit colorContextChanged(); } void colorChanged() { emit colorContextChanged(); }

Loading…
Cancel
Save