aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2012-09-10 13:41:58 +0200
committerJeremy Lainé <jeremy.laine@m4x.org>2012-09-10 13:41:58 +0200
commit973a7a6a0b905f75e10955dca3c6af37f93e853a (patch)
tree099129c0a319b5d897391b5e6de88a233e5565b2 /src
parentfcf89b7834cd253eb5993f03d891d0b6ab1a9953 (diff)
downloadqxmpp-973a7a6a0b905f75e10955dca3c6af37f93e853a.tar.gz
more plumbing for stat counters
Diffstat (limited to 'src')
-rw-r--r--src/base/QXmppLogger.cpp25
-rw-r--r--src/base/QXmppLogger.h1
-rw-r--r--src/client/QXmppClient.cpp4
-rw-r--r--src/server/QXmppServer.cpp26
-rw-r--r--src/server/QXmppServer.h4
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);