diff options
| author | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-09-10 13:41:58 +0200 |
|---|---|---|
| committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2012-09-10 13:41:58 +0200 |
| commit | 973a7a6a0b905f75e10955dca3c6af37f93e853a (patch) | |
| tree | 099129c0a319b5d897391b5e6de88a233e5565b2 /src | |
| parent | fcf89b7834cd253eb5993f03d891d0b6ab1a9953 (diff) | |
| download | qxmpp-973a7a6a0b905f75e10955dca3c6af37f93e853a.tar.gz | |
more plumbing for stat counters
Diffstat (limited to 'src')
| -rw-r--r-- | src/base/QXmppLogger.cpp | 25 | ||||
| -rw-r--r-- | src/base/QXmppLogger.h | 1 | ||||
| -rw-r--r-- | src/client/QXmppClient.cpp | 4 | ||||
| -rw-r--r-- | src/server/QXmppServer.cpp | 26 | ||||
| -rw-r--r-- | src/server/QXmppServer.h | 4 |
5 files changed, 48 insertions, 12 deletions
diff --git a/src/base/QXmppLogger.cpp b/src/base/QXmppLogger.cpp index def06292..2bce8690 100644 --- a/src/base/QXmppLogger.cpp +++ b/src/base/QXmppLogger.cpp @@ -60,6 +60,14 @@ static QString formatted(QXmppLogger::MessageType type, const QString& text) text; } +static void relaySignals(QXmppLoggable *from, QXmppLoggable *to) +{ + QObject::connect(from, SIGNAL(incrementCounter(QString)), + to, SIGNAL(incrementCounter(QString))); + QObject::connect(from, SIGNAL(logMessage(QXmppLogger::MessageType,QString)), + to, SIGNAL(logMessage(QXmppLogger::MessageType,QString))); +} + /// Constructs a new QXmppLoggable. /// /// \param parent @@ -69,8 +77,7 @@ QXmppLoggable::QXmppLoggable(QObject *parent) { QXmppLoggable *logParent = qobject_cast<QXmppLoggable*>(parent); if (logParent) { - connect(this, SIGNAL(logMessage(QXmppLogger::MessageType,QString)), - logParent, SIGNAL(logMessage(QXmppLogger::MessageType,QString))); + relaySignals(this, logParent); } } @@ -82,9 +89,10 @@ void QXmppLoggable::childEvent(QChildEvent *event) return; if (event->added()) { - connect(child, SIGNAL(logMessage(QXmppLogger::MessageType,QString)), - this, SIGNAL(logMessage(QXmppLogger::MessageType,QString))); + relaySignals(child, this); } else if (event->removed()) { + disconnect(child, SIGNAL(incrementCounter(QString)), + this, SIGNAL(incrementCounter(QString))); disconnect(child, SIGNAL(logMessage(QXmppLogger::MessageType,QString)), this, SIGNAL(logMessage(QXmppLogger::MessageType,QString))); } @@ -180,6 +188,15 @@ void QXmppLogger::setMessageTypes(QXmppLogger::MessageTypes types) d->messageTypes = types; } +/// Increments the given \a counter. +/// +/// NOTE: the base implementation does nothing. + +void QXmppLogger::incrementCounter(const QString &counter) +{ + Q_UNUSED(counter); +} + /// Add a logging message. /// /// \param type diff --git a/src/base/QXmppLogger.h b/src/base/QXmppLogger.h index 096c3520..7178d960 100644 --- a/src/base/QXmppLogger.h +++ b/src/base/QXmppLogger.h @@ -89,6 +89,7 @@ public: void setMessageTypes(QXmppLogger::MessageTypes types); public slots: + virtual void incrementCounter(const QString &counter); void log(QXmppLogger::MessageType type, const QString& text); void reopen(); diff --git a/src/client/QXmppClient.cpp b/src/client/QXmppClient.cpp index c178fb6b..796cb419 100644 --- a/src/client/QXmppClient.cpp +++ b/src/client/QXmppClient.cpp @@ -575,12 +575,16 @@ void QXmppClient::setLogger(QXmppLogger *logger) { if (logger != d->logger) { if (d->logger) { + disconnect(this, SIGNAL(incrementCounter(QString)), + d->logger, SLOT(incrementCounter(QString))); disconnect(this, SIGNAL(logMessage(QXmppLogger::MessageType,QString)), d->logger, SLOT(log(QXmppLogger::MessageType,QString))); } d->logger = logger; if (d->logger) { + connect(this, SIGNAL(incrementCounter(QString)), + d->logger, SLOT(incrementCounter(QString))); connect(this, SIGNAL(logMessage(QXmppLogger::MessageType,QString)), d->logger, SLOT(log(QXmppLogger::MessageType,QString))); } diff --git a/src/server/QXmppServer.cpp b/src/server/QXmppServer.cpp index b329053d..0027aa6f 100644 --- a/src/server/QXmppServer.cpp +++ b/src/server/QXmppServer.cpp @@ -391,14 +391,24 @@ QXmppLogger *QXmppServer::logger() void QXmppServer::setLogger(QXmppLogger *logger) { - if (d->logger) - QObject::disconnect(this, SIGNAL(logMessage(QXmppLogger::MessageType,QString)), - d->logger, SLOT(log(QXmppLogger::MessageType,QString))); - d->logger = logger; - d->logger = logger; - if (d->logger) - connect(this, SIGNAL(logMessage(QXmppLogger::MessageType,QString)), - d->logger, SLOT(log(QXmppLogger::MessageType,QString))); + if (logger != d->logger) { + if (d->logger) { + disconnect(this, SIGNAL(incrementCounter(QString)), + d->logger, SLOT(incrementCounter(QString))); + disconnect(this, SIGNAL(logMessage(QXmppLogger::MessageType,QString)), + d->logger, SLOT(log(QXmppLogger::MessageType,QString))); + } + + d->logger = logger; + if (d->logger) { + connect(this, SIGNAL(incrementCounter(QString)), + d->logger, SLOT(incrementCounter(QString))); + connect(this, SIGNAL(logMessage(QXmppLogger::MessageType,QString)), + d->logger, SLOT(log(QXmppLogger::MessageType,QString))); + } + + emit loggerChanged(d->logger); + } } /// Returns the password checker used to verify client credentials. diff --git a/src/server/QXmppServer.h b/src/server/QXmppServer.h index 7f546d52..f7aca3b1 100644 --- a/src/server/QXmppServer.h +++ b/src/server/QXmppServer.h @@ -59,6 +59,7 @@ class QXmppStream; class QXMPP_EXPORT QXmppServer : public QXmppLoggable { Q_OBJECT + Q_PROPERTY(QXmppLogger* logger READ logger WRITE setLogger NOTIFY loggerChanged) public: QXmppServer(QObject *parent = 0); @@ -98,6 +99,9 @@ signals: /// This signal is emitted when a client has disconnected. void clientDisconnected(const QString &jid); + /// This signal is emitted when the logger changes. + void loggerChanged(QXmppLogger *logger); + public slots: void handleElement(const QDomElement &element); |
