← Back to team overview

ayatana-commits team mailing list archive

[Branch ~agateau/plasma-indicatordisplay/trunk] Rev 92: Avoid a dbus round-trip to fetch server type, it's in the serverAdded signal.

 

------------------------------------------------------------
revno: 92
committer: Aurelien Gateau <aurelien.gateau@xxxxxxxxxxxxx>
branch nick: plasma-indicatordisplay
timestamp: Thu 2009-09-17 14:48:25 +0200
message:
  Avoid a dbus round-trip to fetch server type, it's in the serverAdded signal.
modified:
  src/listenermodel.cpp
  src/listenermodel.h


--
lp:plasma-indicatordisplay
https://code.launchpad.net/~agateau/plasma-indicatordisplay/trunk

Your team ayatana-commits is subscribed to branch lp:plasma-indicatordisplay.
To unsubscribe from this branch go to https://code.launchpad.net/~agateau/plasma-indicatordisplay/trunk/+edit-subscription.
=== modified file 'src/listenermodel.cpp'
--- src/listenermodel.cpp	2009-09-15 15:33:21 +0000
+++ src/listenermodel.cpp	2009-09-17 12:48:25 +0000
@@ -43,10 +43,9 @@
 
     QIndicate::Listener* mListener;
     QString mAcceptedServerType;
-    // Servers and indicators we have received, but for which server type is
-    // either unknown or does not match mAcceptedServerType (we keep them in to
-    // avoid asking the server type again and again when indicators change)
-    QHash<QIndicate::Listener::Server*, IndicatorSet> mWaitingServers;
+    // Indicators we have received, but for which we haven't received a server
+    // yet
+    QHash<QIndicate::Listener::Server*, IndicatorSet> mWaitingIndicators;
     QHash<QIndicate::Listener::Server*, QStandardItem*> mItemForServer;
     ItemForIndicatorHash mItemForIndicator;
 
@@ -86,7 +85,7 @@
     d->mAcceptedServerType = acceptedServerType;
     connect(d->mListener,
             SIGNAL(serverAdded(QIndicate::Listener::Server*, const QString&)),
-            SLOT(slotServerAdded(QIndicate::Listener::Server*))
+            SLOT(slotServerAdded(QIndicate::Listener::Server*, const QString&))
             );
     connect(d->mListener,
             SIGNAL(serverRemoved(QIndicate::Listener::Server*, const QString&)),
@@ -122,48 +121,18 @@
     delete d;
 }
 
-void ListenerModel::slotServerAdded(QIndicate::Listener::Server* server)
+void ListenerModel::slotServerAdded(QIndicate::Listener::Server* server, const QString& type)
 {
+    if (type != d->mAcceptedServerType) {
+        d->mWaitingIndicators.remove(server);
+        return;
+    }
+
     if (d->mItemForServer.contains(server)) {
         kWarning() << "We already know about server" << server;
         return;
     }
 
-    if (d->mWaitingServers.contains(server)) {
-        kWarning() << "This server is already in the waiting list" << server;
-        return;
-    }
-
-    d->mWaitingServers.insert(server, IndicatorSet());
-
-    d->mListener->getServerType(server,
-                                this,
-                                SLOT(slotServerTypeReceived(
-                                     QIndicate::Listener::Server*,
-                                     const QByteArray&)
-                                     )
-                                );
-}
-
-void ListenerModel::slotServerTypeReceived(QIndicate::Listener::Server* server, const QByteArray& _type)
-{
-    QString type = QIndicate::Decode::stringFromValue(_type);
-    if (d->mItemForServer.contains(server)) {
-        kError() << "We already display this server" << server;
-        return;
-    }
-
-    if (type != d->mAcceptedServerType) {
-        return;
-    }
-
-    IndicatorSet set;
-    if (d->mWaitingServers.contains(server)) {
-        set = d->mWaitingServers.take(server);
-    } else {
-        kWarning() << "Strange, the server is not in the waiting list" << server;
-    }
-
     QStandardItem* item = new QStandardItem;
     item->setData(QVariant::fromValue(server), ServerRole);
     item->setData(type, ServerTypeRole);
@@ -171,6 +140,7 @@
     appendRow(item);
 
     // Simulate slotIndicatorAdded for waiting indicators
+    IndicatorSet set = d->mWaitingIndicators.take(server);
     Q_FOREACH(QIndicate::Listener::Indicator* indicator, set) {
         slotIndicatorAdded(server, indicator);
     }
@@ -214,9 +184,8 @@
 
 void ListenerModel::slotServerRemoved(QIndicate::Listener::Server* server)
 {
-    if (d->mWaitingServers.contains(server)) {
-        kDebug() << "Removing server from waiting list" << server;
-        d->mWaitingServers.remove(server);
+    if (d->mWaitingIndicators.contains(server)) {
+        d->mWaitingIndicators.remove(server);
         return;
     }
     QStandardItem* item = d->mItemForServer.value(server);
@@ -242,12 +211,9 @@
 
     QStandardItem* serverItem = d->mItemForServer.value(server);
     if (!serverItem) {
-        if (!d->mWaitingServers.contains(server)) {
-            kWarning() << "An indicator has been added for a server we don't know about" << server << indicator;
-            slotServerAdded(server);
-        }
+        kWarning() << "We received indicatorAdded() signal before serverAdded() signal!";
+        d->mWaitingIndicators[server] << indicator;
         // We will be called again when the server is ready
-        d->mWaitingServers[server].insert(indicator);
         return;
     }
 
@@ -266,8 +232,8 @@
 {
     QStandardItem* item = d->mItemForIndicator.value(ServerIndicatorPair(server, indicator));
     if (!item) {
-        if (!d->mWaitingServers.contains(server)) {
-            kError() << "No item for indicator" << indicator;
+        if (!d->mWaitingIndicators.contains(server)) {
+            kError() << "Unknown indicator" << indicator;
         }
         return;
     }
@@ -284,8 +250,8 @@
 void ListenerModel::slotIndicatorRemoved(QIndicate::Listener::Server* server,
                                          QIndicate::Listener::Indicator* indicator)
 {
-    if (d->mWaitingServers.contains(server)) {
-        d->mWaitingServers[server].remove(indicator);
+    if (d->mWaitingIndicators.contains(server)) {
+        d->mWaitingIndicators[server].remove(indicator);
         return;
     }
     QStandardItem* item = d->mItemForIndicator.value(ServerIndicatorPair(server, indicator));

=== modified file 'src/listenermodel.h'
--- src/listenermodel.h	2009-09-15 15:33:21 +0000
+++ src/listenermodel.h	2009-09-17 12:48:25 +0000
@@ -46,10 +46,9 @@
     void drawAttentionChanged(const QModelIndex&);
 
 private Q_SLOTS:
-    void slotServerAdded(QIndicate::Listener::Server* server);
+    void slotServerAdded(QIndicate::Listener::Server* server, const QString& type);
     void slotServerRemoved(QIndicate::Listener::Server* server);
     void slotDesktopFileReceived(QIndicate::Listener::Server* server, const QByteArray&);
-    void slotServerTypeReceived(QIndicate::Listener::Server* server, const QByteArray&);
 
     void slotIndicatorAdded(QIndicate::Listener::Server* server,
                             QIndicate::Listener::Indicator* indicator);