[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [trojita] src/AbookAddressbook: Addressbook: create helper class for QSettings groups
From:       Caspar Schutijser <caspar () schutijser ! com>
Date:       2013-05-26 10:02:18
Message-ID: 20130526100218.89208A605B () git ! kde ! org
[Download RAW message or body]

Git commit 63b6e4fccd5c4d747d28081df569172ed5175df8 by Caspar Schutijser.
Committed on 25/05/2013 at 17:54.
Pushed by jkt into branch 'master'.

Addressbook: create helper class for QSettings groups

This way, endGroup() will always be called when we are done parsing
the current contact.

When endGroup() is not called in the readAbook() method, entries after
the current entry are not correctly parsed so these contacts won't
show up in the addressbook.

M  +17   -6    src/AbookAddressbook/AbookAddressbook.cpp

http://commits.kde.org/trojita/63b6e4fccd5c4d747d28081df569172ed5175df8

diff --git a/src/AbookAddressbook/AbookAddressbook.cpp b/src/AbookAddressbook/AbookAddressbook.cpp
index 11ca295..8653ead 100644
--- a/src/AbookAddressbook/AbookAddressbook.cpp
+++ b/src/AbookAddressbook/AbookAddressbook.cpp
@@ -31,6 +31,21 @@
 
 using namespace Gui;
 
+class SettingsCategoryGuard {
+private:
+    QSettings *m_settings;
+
+public:
+    SettingsCategoryGuard(QSettings *settings, const QString &prefix) {
+        m_settings = settings;
+        m_settings->beginGroup(prefix);
+    }
+
+    ~SettingsCategoryGuard() {
+        m_settings->endGroup();
+    }
+};
+
 AbookAddressbook::AbookAddressbook(): m_updateTimer(0)
 {
 #define ADD(TYPE, KEY) \
@@ -134,7 +149,7 @@ void AbookAddressbook::readAbook(bool update)
     abook.setIniCodec("UTF-8");
     QStringList contacts = abook.childGroups();
     foreach (const QString &contact, contacts) {
-        abook.beginGroup(contact);
+        SettingsCategoryGuard guard(&abook, contact);
         QStandardItem *item = 0;
         QStringList mails;
         if (update) {
@@ -152,7 +167,6 @@ void AbookAddressbook::readAbook(bool update)
                 }
             }
             if (item && item->data(Dirty).toBool()) {
-                abook.endGroup();
                 continue;
             }
         }
@@ -194,8 +208,6 @@ void AbookAddressbook::readAbook(bool update)
 
         if (add)
             m_contacts->appendRow( item );
-
-        abook.endGroup();
     }
 //     const qint64 elapsed = profile.elapsed();
 //     qDebug() << "reading too" << elapsed << "ms";
@@ -208,7 +220,7 @@ void AbookAddressbook::saveContacts()
     abook.setIniCodec("UTF-8");
     abook.clear();
     for (int i = 0; i < m_contacts->rowCount(); ++i) {
-        abook.beginGroup(QString::number(i));
+        SettingsCategoryGuard guard(&abook, QString::number(i));
         QStandardItem *item = m_contacts->item(i);
         for (QList<QPair<Type,QString> >::const_iterator   it = m_fields.constBegin(),
                                             end = m_fields.constEnd(); it != end; ++it) {
@@ -225,7 +237,6 @@ void AbookAddressbook::saveContacts()
                                                     end = unknownKeys.constEnd(); it != end; ++it) {
             abook.setValue(it.key(), it.value());
         }
-        abook.endGroup();
     }
     abook.sync();
     m_filesystemWatcher->blockSignals(false);

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic