[Telepathy-commits] [telepathy-qt4/master] Add and test Contact::FeatureAlias
Olli Salli
olli.salli at collabora.co.uk
Wed Feb 4 02:23:28 PST 2009
---
TelepathyQt4/Client/contact-manager.cpp | 23 +++++++++++++++++
TelepathyQt4/Client/contact-manager.h | 1 +
TelepathyQt4/Client/contact.cpp | 39 ++++++++++++++++++++++++++++-
TelepathyQt4/Client/contact.h | 6 ++++
tests/dbus/contacts.cpp | 42 ++++++++++++++++++++++++++++---
5 files changed, 106 insertions(+), 5 deletions(-)
diff --git a/TelepathyQt4/Client/contact-manager.cpp b/TelepathyQt4/Client/contact-manager.cpp
index b3dbf8b..6e4f013 100644
--- a/TelepathyQt4/Client/contact-manager.cpp
+++ b/TelepathyQt4/Client/contact-manager.cpp
@@ -97,6 +97,8 @@ namespace
QString featureToInterface(Contact::Feature feature)
{
switch (feature) {
+ case Contact::FeatureAlias:
+ return TELEPATHY_INTERFACE_CONNECTION_INTERFACE_ALIASING;
case Contact::FeatureSimplePresence:
return TELEPATHY_INTERFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE;
default:
@@ -198,6 +200,19 @@ PendingContacts *ContactManager::upgradeContacts(const QList<QSharedPointer<Cont
return new PendingContacts(this, contacts, features);
}
+void ContactManager::onAliasesChanged(const Telepathy::AliasPairList &aliases)
+{
+ debug() << "Got AliasesChanged for" << aliases.size() << "contacts";
+
+ foreach (AliasPair pair, aliases) {
+ QSharedPointer<Contact> contact = mPriv->lookupContactByHandle(pair.handle);
+
+ if (contact) {
+ contact->receiveAlias(pair.alias);
+ }
+ }
+}
+
void ContactManager::onPresencesChanged(const Telepathy::SimpleContactPresences &presences)
{
debug() << "Got PresencesChanged for" << presences.size() << "contacts";
@@ -258,6 +273,14 @@ void ContactManager::Private::ensureTracking(Contact::Feature feature)
return;
switch (feature) {
+ case Contact::FeatureAlias:
+ QObject::connect(
+ conn->aliasingInterface(),
+ SIGNAL(AliasesChanged(const Telepathy::AliasPairList &)),
+ conn->contactManager(),
+ SLOT(onAliasesChanged(const Telepathy::AliasPairList &)));
+ break;
+
case Contact::FeatureSimplePresence:
QObject::connect(
conn->simplePresenceInterface(),
diff --git a/TelepathyQt4/Client/contact-manager.h b/TelepathyQt4/Client/contact-manager.h
index e325219..6431582 100644
--- a/TelepathyQt4/Client/contact-manager.h
+++ b/TelepathyQt4/Client/contact-manager.h
@@ -66,6 +66,7 @@ class ContactManager : public QObject
const QSet<Contact::Feature> &features);
private Q_SLOTS:
+ void onAliasesChanged(const Telepathy::AliasPairList &);
void onPresencesChanged(const Telepathy::SimpleContactPresences &);
private:
diff --git a/TelepathyQt4/Client/contact.cpp b/TelepathyQt4/Client/contact.cpp
index dafa78c..c793548 100644
--- a/TelepathyQt4/Client/contact.cpp
+++ b/TelepathyQt4/Client/contact.cpp
@@ -48,6 +48,7 @@ struct Contact::Private
QSet<Feature> requestedFeatures;
QSet<Feature> actualFeatures;
+ QString alias;
SimplePresence simplePresence;
};
@@ -76,6 +77,17 @@ QSet<Contact::Feature> Contact::actualFeatures() const
return mPriv->actualFeatures;
}
+QString Contact::alias() const
+{
+ if (!mPriv->requestedFeatures.contains(FeatureAlias)) {
+ warning() << "Contact::alias() used on" << this
+ << "for which FeatureAlias hasn't been requested - returning id";
+ return id();
+ }
+
+ return mPriv->alias;
+}
+
QString Contact::presenceStatus() const
{
if (!mPriv->requestedFeatures.contains(FeatureSimplePresence)) {
@@ -131,9 +143,19 @@ void Contact::augment(const QSet<Feature> &requestedFeatures, const QVariantMap
mPriv->id = qdbus_cast<QString>(attributes[TELEPATHY_INTERFACE_CONNECTION "/contact-id"]);
foreach (Feature feature, requestedFeatures) {
+ QString maybeAlias;
SimplePresence maybePresence;
switch (feature) {
+ case FeatureAlias:
+ maybeAlias = qdbus_cast<QString>(attributes.value(
+ TELEPATHY_INTERFACE_CONNECTION_INTERFACE_ALIASING "/alias"));
+
+ if (!maybeAlias.isEmpty()) {
+ receiveAlias(maybeAlias);
+ }
+ break;
+
case FeatureSimplePresence:
maybePresence = qdbus_cast<SimplePresence>(attributes.value(
TELEPATHY_INTERFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE "/presence"));
@@ -150,10 +172,25 @@ void Contact::augment(const QSet<Feature> &requestedFeatures, const QVariantMap
}
}
+void Contact::receiveAlias(const QString &alias)
+{
+ if (!mPriv->requestedFeatures.contains(FeatureAlias)) {
+ return;
+ }
+
+ mPriv->actualFeatures.insert(FeatureAlias);
+
+ if (mPriv->alias != alias) {
+ mPriv->alias = alias;
+ emit aliasChanged(alias);
+ }
+}
+
void Contact::receiveSimplePresence(const SimplePresence &presence)
{
- if (!mPriv->requestedFeatures.contains(FeatureSimplePresence))
+ if (!mPriv->requestedFeatures.contains(FeatureSimplePresence)) {
return;
+ }
mPriv->actualFeatures.insert(FeatureSimplePresence);
diff --git a/TelepathyQt4/Client/contact.h b/TelepathyQt4/Client/contact.h
index 750b076..a487aab 100644
--- a/TelepathyQt4/Client/contact.h
+++ b/TelepathyQt4/Client/contact.h
@@ -45,6 +45,7 @@ class Contact : public QObject
public:
enum Feature {
+ FeatureAlias,
FeatureSimplePresence,
_Padding = 0xFFFFFFFF
};
@@ -57,6 +58,8 @@ public:
QSet<Feature> requestedFeatures() const;
QSet<Feature> actualFeatures() const;
+ QString alias() const;
+
QString presenceStatus() const;
uint presenceType() const;
QString presenceMessage() const;
@@ -64,6 +67,7 @@ public:
~Contact();
Q_SIGNALS:
+ void aliasChanged(const QString &alias);
void simplePresenceChanged(const QString &status, uint type, const QString &presenceMessage);
private:
@@ -73,6 +77,8 @@ private:
const QSet<Feature> &requestedFeatures, const QVariantMap &attributes);
void augment(const QSet<Feature> &requestedFeatures, const QVariantMap &attributes);
+
+ void receiveAlias(const QString &alias);
void receiveSimplePresence(const SimplePresence &presence);
struct Private;
diff --git a/tests/dbus/contacts.cpp b/tests/dbus/contacts.cpp
index d79e298..dd282e0 100644
--- a/tests/dbus/contacts.cpp
+++ b/tests/dbus/contacts.cpp
@@ -354,6 +354,15 @@ void TestContacts::testForIdentifiers()
void TestContacts::testFeatures()
{
QStringList ids = QStringList() << "alice" << "bob" << "chris";
+ const char *initialAliases[] = {
+ "Alice in Wonderland",
+ "Bob the Builder",
+ "Chris Sawyer"
+ };
+ const char *latterAliases[] = {
+ "Alice Through the Looking Glass",
+ "Bob the Pensioner"
+ };
static ContactsConnectionPresenceStatusIndex initialStatuses[] = {
CONTACTS_CONNECTION_STATUS_AVAILABLE,
CONTACTS_CONNECTION_STATUS_BUSY,
@@ -369,10 +378,12 @@ void TestContacts::testFeatures()
"GON OUT BACKSON"
};
const char *latterMessages[] = {
- "Having some sushi",
- "Done fixing it",
+ "Having some carrots",
+ "Done building for life, yay",
};
- QSet<Contact::Feature> features = QSet<Contact::Feature>() << Contact::FeatureSimplePresence;
+ QSet<Contact::Feature> features = QSet<Contact::Feature>()
+ << Contact::FeatureAlias
+ << Contact::FeatureSimplePresence;
TpHandleRepoIface *serviceRepo =
tp_base_connection_get_handles(TP_BASE_CONNECTION(mConnService), TP_HANDLE_TYPE_CONTACT);
@@ -384,6 +395,8 @@ void TestContacts::testFeatures()
}
// Set the initial attributes
+ contacts_connection_change_aliases(mConnService, 3, handles.toVector().constData(),
+ initialAliases);
contacts_connection_change_presences(mConnService, 3, handles.toVector().constData(),
initialStatuses, initialMessages);
@@ -402,6 +415,9 @@ void TestContacts::testFeatures()
QVERIFY((features - mContacts[i]->requestedFeatures()).isEmpty());
QVERIFY((mContacts[i]->actualFeatures() - mContacts[i]->requestedFeatures()).isEmpty());
+ QVERIFY(mContacts[i]->actualFeatures().contains(Contact::FeatureAlias));
+ QCOMPARE(mContacts[i]->alias(), QString(initialAliases[i]));
+
QVERIFY(mContacts[i]->actualFeatures().contains(Contact::FeatureSimplePresence));
QCOMPARE(mContacts[i]->presenceMessage(), QString(initialMessages[i]));
}
@@ -415,6 +431,8 @@ void TestContacts::testFeatures()
QCOMPARE(mContacts[2]->presenceType(), uint(Telepathy::ConnectionPresenceTypeAway));
// Change some of the contacts to a new set of attributes
+ contacts_connection_change_aliases(mConnService, 2, handles.toVector().constData(),
+ latterAliases);
contacts_connection_change_presences(mConnService, 2, handles.toVector().constData(),
latterStatuses, latterMessages);
mLoop->processEvents();
@@ -427,9 +445,14 @@ void TestContacts::testFeatures()
QVERIFY((features - mContacts[i]->requestedFeatures()).isEmpty());
QVERIFY((mContacts[i]->actualFeatures() - mContacts[i]->requestedFeatures()).isEmpty());
+ QVERIFY(mContacts[i]->actualFeatures().contains(Contact::FeatureAlias));
QVERIFY(mContacts[i]->actualFeatures().contains(Contact::FeatureSimplePresence));
}
+ QCOMPARE(mContacts[0]->alias(), QString(latterAliases[0]));
+ QCOMPARE(mContacts[1]->alias(), QString(latterAliases[1]));
+ QCOMPARE(mContacts[2]->alias(), QString(initialAliases[2]));
+
QCOMPARE(mContacts[0]->presenceStatus(), QString("away"));
QCOMPARE(mContacts[1]->presenceStatus(), QString("available"));
QCOMPARE(mContacts[2]->presenceStatus(), QString("away"));
@@ -459,6 +482,11 @@ void TestContacts::testFeatures()
void TestContacts::testUpgrade()
{
QStringList ids = QStringList() << "alice" << "bob" << "chris";
+ const char *aliases[] = {
+ "Alice in Wonderland",
+ "Bob The Builder",
+ "Chris Sawyer"
+ };
static ContactsConnectionPresenceStatusIndex statuses[] = {
CONTACTS_CONNECTION_STATUS_AVAILABLE,
CONTACTS_CONNECTION_STATUS_BUSY,
@@ -478,6 +506,7 @@ void TestContacts::testUpgrade()
QVERIFY(handles[i] != 0);
}
+ contacts_connection_change_aliases(mConnService, 3, handles.toVector().constData(), aliases);
contacts_connection_change_presences(mConnService, 3, handles.toVector().constData(), statuses,
messages);
@@ -494,7 +523,9 @@ void TestContacts::testUpgrade()
QList<QSharedPointer<Contact> > saveContacts = mContacts;
// Upgrade them
- QSet<Contact::Feature> features = QSet<Contact::Feature>() << Contact::FeatureSimplePresence;
+ QSet<Contact::Feature> features = QSet<Contact::Feature>()
+ << Contact::FeatureAlias
+ << Contact::FeatureSimplePresence;
pending = mConn->contactManager()->upgradeContacts(saveContacts, features);
// Test the closure accessors
@@ -523,6 +554,9 @@ void TestContacts::testUpgrade()
QVERIFY((features - mContacts[i]->requestedFeatures()).isEmpty());
QVERIFY((mContacts[i]->actualFeatures() - mContacts[i]->requestedFeatures()).isEmpty());
+ QVERIFY(mContacts[i]->actualFeatures().contains(Contact::FeatureAlias));
+ QCOMPARE(mContacts[i]->alias(), QString(aliases[i]));
+
QVERIFY(mContacts[i]->actualFeatures().contains(Contact::FeatureSimplePresence));
QCOMPARE(mContacts[i]->presenceMessage(), QString(messages[i]));
}
--
1.5.6.5
More information about the telepathy-commits
mailing list