[Telepathy-commits] [telepathy-qt4/master] [Bug 20584] New: Contact object creation doesn't survive bad IDs or handles

Andre Moreira Magalhaes (andrunko) andre.magalhaes at collabora.co.uk
Tue Mar 24 09:54:46 PDT 2009


Fixed bug 20584.
---
 TelepathyQt4/Client/pending-contacts.cpp |   27 +++++++++++++++++++++++++++
 TelepathyQt4/Client/pending-contacts.h   |    3 +++
 tests/dbus/contacts.cpp                  |    7 ++++++-
 3 files changed, 36 insertions(+), 1 deletions(-)

diff --git a/TelepathyQt4/Client/pending-contacts.cpp b/TelepathyQt4/Client/pending-contacts.cpp
index 3ca4988..63c6a4c 100644
--- a/TelepathyQt4/Client/pending-contacts.cpp
+++ b/TelepathyQt4/Client/pending-contacts.cpp
@@ -90,6 +90,8 @@ struct PendingContacts::Private
     // Results
     QList<ContactPtr> contacts;
     UIntList invalidHandles;
+    QStringList validIds;
+    QHash<QString, QPair<QString, QString> > invalidIds;
 };
 
 /**
@@ -176,6 +178,28 @@ UIntList PendingContacts::invalidHandles() const
     return mPriv->invalidHandles;
 }
 
+QStringList PendingContacts::validIdentifiers() const
+{
+    if (!isFinished()) {
+        warning() << "PendingContacts::validIdentifiers called before finished";
+    } else if (!isValid()) {
+        warning() << "PendingContacts::validIdentifiers called when not valid";
+    }
+
+    return mPriv->validIds;
+}
+
+QHash<QString, QPair<QString, QString> > PendingContacts::invalidIdentifiers() const
+{
+    if (!isFinished()) {
+        warning() << "PendingContacts::invalidIdentifiers called before finished";
+    } else if (!isValid()) {
+        warning() << "PendingContacts::invalidIdentifiers called when not valid";
+    }
+
+    return mPriv->invalidIds;
+}
+
 void PendingContacts::onAttributesFinished(PendingOperation *operation)
 {
     PendingContactAttributes *pendingAttributes =
@@ -219,6 +243,9 @@ void PendingContacts::onHandlesFinished(PendingOperation *operation)
 
     debug() << "Handles finished for" << this;
 
+    mPriv->validIds = pendingHandles->validNames();
+    mPriv->invalidIds = pendingHandles->invalidNames();
+
     if (pendingHandles->isError()) {
         debug() << " error" << operation->errorName()
                 << "message" << operation->errorMessage();
diff --git a/TelepathyQt4/Client/pending-contacts.h b/TelepathyQt4/Client/pending-contacts.h
index c23d862..2d47f60 100644
--- a/TelepathyQt4/Client/pending-contacts.h
+++ b/TelepathyQt4/Client/pending-contacts.h
@@ -28,6 +28,7 @@
 
 #include <TelepathyQt4/Client/PendingOperation>
 
+#include <QHash>
 #include <QList>
 #include <QMap>
 #include <QSet>
@@ -64,6 +65,8 @@ public:
 
     QList<ContactPtr> contacts() const;
     UIntList invalidHandles() const;
+    QStringList validIdentifiers() const;
+    QHash<QString, QPair<QString, QString> > invalidIdentifiers() const;
 
 private Q_SLOTS:
     void onAttributesFinished(Telepathy::Client::PendingOperation *);
diff --git a/tests/dbus/contacts.cpp b/tests/dbus/contacts.cpp
index 205989d..62cd53b 100644
--- a/tests/dbus/contacts.cpp
+++ b/tests/dbus/contacts.cpp
@@ -334,7 +334,7 @@ void TestContacts::testForIdentifiers()
         tp_base_connection_get_handles(TP_BASE_CONNECTION(mConnService), TP_HANDLE_TYPE_CONTACT);
 
     // Check that a request with just the invalid IDs fails
-    PendingOperation *fails = mConn->contactManager()->contactsForIdentifiers(invalidIDs);
+    PendingContacts *fails = mConn->contactManager()->contactsForIdentifiers(invalidIDs);
     QVERIFY(connect(fails,
                 SIGNAL(finished(Telepathy::Client::PendingOperation*)),
                 SLOT(expectSuccessfulCall(Telepathy::Client::PendingOperation*))));
@@ -346,6 +346,11 @@ void TestContacts::testForIdentifiers()
                 SIGNAL(finished(Telepathy::Client::PendingOperation*)),
                 SLOT(expectSuccessfulCall(Telepathy::Client::PendingOperation*))));
     QCOMPARE(mLoop->exec(), 0);
+    QCOMPARE(fails->validIdentifiers(), validIDs);
+    QStringList toCheck = fails->invalidIdentifiers().keys();
+    toCheck.sort();
+    invalidIDs.sort();
+    QCOMPARE(toCheck, invalidIDs);
 
     // Go on to the meat: valid IDs
     PendingContacts *pending = mConn->contactManager()->contactsForIdentifiers(validIDs);
-- 
1.5.6.5




More information about the telepathy-commits mailing list