From 199908c8a14e78e98e65f229e6f4b48446bf41b2 Mon Sep 17 00:00:00 2001 From: Valerio Valerio Date: Mon, 2 Jan 2012 10:56:35 +0200 Subject: Fix duplicate signal emission of addMessages(Revert of Patrick's patch). Fix duplicate signal emission of addMessages and updateMessagesMetaData. Add UTs to verify that the signals are emitted only once per message added. --- src/libraries/qmfclient/qmailstore.cpp | 7 +++++-- tests/tst_qmailstore/tst_qmailstore.cpp | 29 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/src/libraries/qmfclient/qmailstore.cpp b/src/libraries/qmfclient/qmailstore.cpp index b8e50d82..00fb858e 100644 --- a/src/libraries/qmfclient/qmailstore.cpp +++ b/src/libraries/qmfclient/qmailstore.cpp @@ -296,6 +296,8 @@ bool QMailStore::addMessages(const QList& messages) emitMessageNotification(Added, addedMessageIds); emitThreadNotification(Added, addedThreadIds); + emitMessageDataNotification(Added, dataList(messages, addedMessageIds)); + emitMessageDataNotification(Updated, dataList(messages, updatedMessageIds)); emitMessageNotification(Updated, updatedMessageIds); emitFolderNotification(ContentsModified, modifiedFolderIds); emitThreadNotification(ContentsModified, modifiedThreadIds); @@ -322,6 +324,8 @@ bool QMailStore::addMessages(const QList& messages) if (!d->addMessages(messages, &addedMessageIds, &addedThreadIds, &updatedMessageIds, &modifiedFolderIds, &modifiedThreadIds, &modifiedAccountIds)) return false; + emitMessageNotification(Added, addedMessageIds); + emitMessageNotification(Updated, updatedMessageIds); emitMessageDataNotification(Added, dataList(messages, addedMessageIds)); emitThreadNotification(Added, addedThreadIds); emitMessageDataNotification(Updated, dataList(messages, updatedMessageIds)); @@ -690,6 +694,7 @@ bool QMailStore::updateMessagesMetaData(const QMailMessageKey& key, if (!d->updateMessagesMetaData(key, properties, data, &updatedMessages, &modifiedFolders, &modifiedAccounts)) return false; + emitMessageNotification(Updated, updatedMessages); emitMessageDataNotification(updatedMessages, properties, data); emitFolderNotification(ContentsModified, modifiedFolders); emitAccountNotification(ContentsModified, modifiedAccounts); @@ -1276,8 +1281,6 @@ void QMailStore::emitMessageNotification(ChangeType type, const QMailMessageIdLi // Ensure there are no duplicates in the list QMailMessageIdList idList(ids.toSet().toList()); - d->notifyMessagesChange(type, idList); - switch (type) { case Added: emit messagesAdded(idList); diff --git a/tests/tst_qmailstore/tst_qmailstore.cpp b/tests/tst_qmailstore/tst_qmailstore.cpp index 88a1824a..da30fdb0 100644 --- a/tests/tst_qmailstore/tst_qmailstore.cpp +++ b/tests/tst_qmailstore/tst_qmailstore.cpp @@ -42,6 +42,7 @@ #include #include #include +#include #include #include #include @@ -335,6 +336,9 @@ void tst_QMailStore::addFolder() void tst_QMailStore::addMessage() { + QSignalSpy spyMessagesAdded(QMailStore::instance(), SIGNAL(messagesAdded(QMailMessageIdList))); + QSignalSpy spyMessageDataAdded(QMailStore::instance(), SIGNAL(messageDataAdded(QMailMessageMetaDataList))); + QMailAccount account; account.setName("Account"); @@ -423,10 +427,17 @@ void tst_QMailStore::addMessage() QCOMPARE(message3.customField("answer"), QString("Fido")); QCOMPARE(message3.dataModified(), false); QCOMPARE(message3.contentModified(), false); + + //Verify that the signals are only emitted once + QCOMPARE(spyMessagesAdded.count(), 1); + QCOMPARE(spyMessageDataAdded.count(), 1); } void tst_QMailStore::addMessages() { + QSignalSpy spyMessagesAdded(QMailStore::instance(), SIGNAL(messagesAdded(QMailMessageIdList))); + QSignalSpy spyMessageDataAdded(QMailStore::instance(), SIGNAL(messageDataAdded(QMailMessageMetaDataList))); + QMailAccount account; account.setName("Account"); @@ -496,6 +507,10 @@ void tst_QMailStore::addMessages() QCOMPARE(QMailStore::instance()->queryMessages(key, sort, 9, 0), messageIds.mid(0, 9)); QCOMPARE(QMailStore::instance()->queryMessages(key, sort, 9, 1), messageIds.mid(1, 9)); QCOMPARE(QMailStore::instance()->queryMessages(key, sort, 10, 0), messageIds); + + //Verify that the signals are only emitted once + QCOMPARE(spyMessagesAdded.count(), 1); + QCOMPARE(spyMessageDataAdded.count(), 1); } void tst_QMailStore::addMessages2() @@ -848,6 +863,9 @@ void tst_QMailStore::updateFolder() void tst_QMailStore::updateMessage() { + QSignalSpy spyMessagesUpdated(QMailStore::instance(), SIGNAL(messagesUpdated(QMailMessageIdList))); + QSignalSpy spyMessagesDataUpdated(QMailStore::instance(), SIGNAL(messageDataUpdated(QMailMessageMetaDataList))); + QMailAccount account; account.setName("Account"); @@ -949,6 +967,10 @@ void tst_QMailStore::updateMessage() QCOMPARE(message2.dataModified(), false); QCOMPARE(message2.contentModified(), false); + //Verify that the signals are only emitted once + QCOMPARE(spyMessagesUpdated.count(), 1); + QCOMPARE(spyMessagesDataUpdated.count(), 1); + // Add an additional message QMailMessage message3; message3.setParentAccountId(account.id()); @@ -1117,6 +1139,9 @@ void tst_QMailStore::updateMessage() void tst_QMailStore::updateMessages() { + QSignalSpy spyMessagesUpdated(QMailStore::instance(), SIGNAL(messagesUpdated(QMailMessageIdList))); + QSignalSpy spyMessagesDataUpdated(QMailStore::instance(), SIGNAL(messageDataUpdated(QMailMessageMetaDataList))); + QMailAccount account; account.setName("Account"); @@ -1190,6 +1215,10 @@ void tst_QMailStore::updateMessages() QCOMPARE(message.subject(), QString("Message %1").arg(i + 100)); QCOMPARE(message.body().data(), QString("Hi #%1").arg(i + 100)); } + + //Verify that the signals are only emitted once + QCOMPARE(spyMessagesUpdated.count(), 1); + QCOMPARE(spyMessagesDataUpdated.count(), 1); } void tst_QMailStore::removeAccount() -- cgit v1.2.3