[Telepathy-commits] [telepathy-qt4/master] DBusProxy: promote invalidated, invalidationReason etc. to superclass

Simon McVittie simon.mcvittie at collabora.co.uk
Wed Jan 21 08:03:21 PST 2009


Even StatelessDBusProxy subclasses can have a use for invalidation -
for instance, Account proxies should become invalid when the account
is deleted, even though the Account API is otherwise stateless.
---
 TelepathyQt4/Client/dbus-proxy.cpp |   33 +++++++++------------------------
 TelepathyQt4/Client/dbus-proxy.h   |   29 ++++++++++++++---------------
 tests/dbus/stateful-proxy.cpp      |   20 ++++++++++----------
 3 files changed, 33 insertions(+), 49 deletions(-)

diff --git a/TelepathyQt4/Client/dbus-proxy.cpp b/TelepathyQt4/Client/dbus-proxy.cpp
index f9e00d2..4028b26 100644
--- a/TelepathyQt4/Client/dbus-proxy.cpp
+++ b/TelepathyQt4/Client/dbus-proxy.cpp
@@ -64,6 +64,8 @@ public:
     QDBusConnection dbusConnection;
     QString busName;
     QString objectPath;
+    QString invalidationReason;
+    QString invalidationMessage;
 
     Private(const QDBusConnection &, const QString &, const QString &);
 };
@@ -186,26 +188,10 @@ StatelessDBusProxy::~StatelessDBusProxy()
  * Examples in Telepathy include the Connection and Channel.
  */
 
-class StatefulDBusProxy::Private
-{
-public:
-    QString invalidationReason;
-    QString invalidationMessage;
-
-    Private();
-};
-
-StatefulDBusProxy::Private::Private()
-    : invalidationReason(QString()),
-      invalidationMessage(QString())
-{
-    debug() << "Creating new StatefulDBusProxy";
-}
-
 StatefulDBusProxy::StatefulDBusProxy(const QDBusConnection &dbusConnection,
         const QString &busName, const QString &objectPath, QObject *parent)
     : DBusProxy(dbusConnection, busName, objectPath, parent),
-      mPriv(new Private)
+      mPriv(0)
 {
     QString uniqueName = busName;
 
@@ -229,7 +215,6 @@ StatefulDBusProxy::StatefulDBusProxy(const QDBusConnection &dbusConnection,
 
 StatefulDBusProxy::~StatefulDBusProxy()
 {
-    delete mPriv;
 }
 
 /**
@@ -238,7 +223,7 @@ StatefulDBusProxy::~StatefulDBusProxy()
  *
  * \return <code>true</code> if this object is still fully usable
  */
-bool StatefulDBusProxy::isValid() const
+bool DBusProxy::isValid() const
 {
     return mPriv->invalidationReason.isEmpty();
 }
@@ -250,7 +235,7 @@ bool StatefulDBusProxy::isValid() const
  *
  * \return A D-Bus error name, or QString() if this object is still valid
  */
-QString StatefulDBusProxy::invalidationReason() const
+QString DBusProxy::invalidationReason() const
 {
     return mPriv->invalidationReason;
 }
@@ -262,7 +247,7 @@ QString StatefulDBusProxy::invalidationReason() const
  *
  * \return A debugging message, or QString() if this object is still valid
  */
-QString StatefulDBusProxy::invalidationMessage() const
+QString DBusProxy::invalidationMessage() const
 {
     return mPriv->invalidationMessage;
 }
@@ -283,12 +268,12 @@ QString StatefulDBusProxy::invalidationMessage() const
  */
 
 /**
- * Called by subclasses when the StatefulDBusProxy should become invalid.
+ * Called by subclasses when the DBusProxy should become invalid.
  *
  * This method takes care of setting the invalidationReason,
  * invalidationMessage, and emitting the invalidated signal.
  */
-void StatefulDBusProxy::invalidate(const QString &reason, const QString &message)
+void DBusProxy::invalidate(const QString &reason, const QString &message)
 {
     if (!isValid()) {
         debug().nospace() << "Already invalidated by "
@@ -313,7 +298,7 @@ void StatefulDBusProxy::invalidate(const QString &reason, const QString &message
     QTimer::singleShot(0, this, SLOT(emitInvalidated()));
 }
 
-void StatefulDBusProxy::emitInvalidated()
+void DBusProxy::emitInvalidated()
 {
     Q_ASSERT(!isValid());
 
diff --git a/TelepathyQt4/Client/dbus-proxy.h b/TelepathyQt4/Client/dbus-proxy.h
index 9cdb198..7626341 100644
--- a/TelepathyQt4/Client/dbus-proxy.h
+++ b/TelepathyQt4/Client/dbus-proxy.h
@@ -48,8 +48,21 @@ public:
     QString busName() const;
     QString objectPath() const;
 
+    bool isValid() const;
+    QString invalidationReason() const;
+    QString invalidationMessage() const;
+
 protected:
     void setBusName(const QString &busName);
+    void invalidate(const QString &reason, const QString &message);
+    inline void invalidate(const QDBusError &error);
+
+Q_SIGNALS:
+    void invalidated(Telepathy::Client::DBusProxy *proxy,
+            QString errorName, QString errorMessage);
+
+private Q_SLOTS:
+    void emitInvalidated();
 
 private:
     class Private;
@@ -85,21 +98,7 @@ public:
 
     virtual ~StatefulDBusProxy();
 
-    bool isValid() const;
-    QString invalidationReason() const;
-    QString invalidationMessage() const;
-
-protected:
-    void invalidate(const QString &reason, const QString &message);
-
-    inline void invalidate(const QDBusError &error);
-
-Q_SIGNALS:
-    void invalidated(Telepathy::Client::StatefulDBusProxy *proxy,
-            QString errorName, QString errorMessage);
-
 private Q_SLOTS:
-    void emitInvalidated();
     void onServiceOwnerChanged(const QString &name, const QString &oldOwner,
             const QString &newOwner);
 
@@ -109,7 +108,7 @@ private:
     Private *mPriv;
 };
 
-void StatefulDBusProxy::invalidate(const QDBusError &error)
+void DBusProxy::invalidate(const QDBusError &error)
 {
     invalidate(error.name(), error.message());
 }
diff --git a/tests/dbus/stateful-proxy.cpp b/tests/dbus/stateful-proxy.cpp
index 22f4604..b9ccfc7 100644
--- a/tests/dbus/stateful-proxy.cpp
+++ b/tests/dbus/stateful-proxy.cpp
@@ -64,7 +64,7 @@ private Q_SLOTS:
 
 protected Q_SLOTS:
     // these would be public, but then QtTest would think they were tests
-    void expectInvalidated(Telepathy::Client::StatefulDBusProxy *,
+    void expectInvalidated(Telepathy::Client::DBusProxy *,
             QString, QString);
 
 private:
@@ -138,10 +138,10 @@ void TestStatefulProxy::testBasics()
 
 
     QVERIFY(connect(mProxy, SIGNAL(invalidated(
-                        Telepathy::Client::StatefulDBusProxy *,
+                        Telepathy::Client::DBusProxy *,
                         QString, QString)),
                 this, SLOT(expectInvalidated(
-                        Telepathy::Client::StatefulDBusProxy *,
+                        Telepathy::Client::DBusProxy *,
                         QString, QString))));
     mProxy->invalidate("com.example.DomainSpecificError",
             "Because I said so");
@@ -155,10 +155,10 @@ void TestStatefulProxy::testBasics()
     // the signal doesn't arrive instantly
     QCOMPARE(mLoop->exec(), 0);
     QVERIFY(disconnect(mProxy, SIGNAL(invalidated(
-                        Telepathy::Client::StatefulDBusProxy *,
+                        Telepathy::Client::DBusProxy *,
                         QString, QString)),
                 this, SLOT(expectInvalidated(
-                        Telepathy::Client::StatefulDBusProxy *,
+                        Telepathy::Client::DBusProxy *,
                         QString, QString))));
 
     QCOMPARE(mInvalidated, 1);
@@ -173,7 +173,7 @@ void TestStatefulProxy::testBasics()
             QString::fromAscii("Because I said so"));
 }
 
-void TestStatefulProxy::expectInvalidated(StatefulDBusProxy *proxy,
+void TestStatefulProxy::expectInvalidated(DBusProxy *proxy,
         QString reason, QString message)
 {
     mInvalidated++;
@@ -196,18 +196,18 @@ void TestStatefulProxy::testNameOwnerChanged()
     QCOMPARE(mProxy->invalidationMessage(), QString());
 
     QVERIFY(connect(mProxy, SIGNAL(invalidated(
-                        Telepathy::Client::StatefulDBusProxy *,
+                        Telepathy::Client::DBusProxy *,
                         QString, QString)),
                 this, SLOT(expectInvalidated(
-                        Telepathy::Client::StatefulDBusProxy *,
+                        Telepathy::Client::DBusProxy *,
                         QString, QString))));
     QDBusConnection::disconnectFromBus("another unique name");
     QCOMPARE(mLoop->exec(), 0);
     QVERIFY(disconnect(mProxy, SIGNAL(invalidated(
-                        Telepathy::Client::StatefulDBusProxy *,
+                        Telepathy::Client::DBusProxy *,
                         QString, QString)),
                 this, SLOT(expectInvalidated(
-                        Telepathy::Client::StatefulDBusProxy *,
+                        Telepathy::Client::DBusProxy *,
                         QString, QString))));
 
     QCOMPARE(mInvalidated, 1);
-- 
1.5.6.5




More information about the Telepathy-commits mailing list