[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