telepathy-qt: BaseDebug: Implemented "keep N last messages" feature for GetMessages().
Alexandr Akulich
kaffeine at kemper.freedesktop.org
Fri May 6 15:26:59 UTC 2016
Module: telepathy-qt
Branch: master
Commit: a66aacabbe8f6a8a4e3bad5d0a9f730652e98479
URL: http://cgit.freedesktop.org/telepathy/telepathy-qt/commit/?id=a66aacabbe8f6a8a4e3bad5d0a9f730652e98479
Author: Alexandr Akulich <akulichalexander at gmail.com>
Date: Wed Mar 2 17:51:39 2016 +0500
BaseDebug: Implemented "keep N last messages" feature for GetMessages().
- Added setGetMessagesLimit() to set a limit. Pass a negative number to
have unlimited messages log.
- Added clear() method to cleanup all messages.
---
TelepathyQt/base-debug.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++++++
TelepathyQt/base-debug.h | 3 +++
2 files changed, 68 insertions(+)
diff --git a/TelepathyQt/base-debug.cpp b/TelepathyQt/base-debug.cpp
index 929759d..a7a1c28 100644
--- a/TelepathyQt/base-debug.cpp
+++ b/TelepathyQt/base-debug.cpp
@@ -35,12 +35,19 @@ struct TP_QT_NO_EXPORT BaseDebug::Private
Private(BaseDebug *parent, const QDBusConnection &dbusConnection)
: parent(parent),
enabled(false),
+ getMessagesLimit(0),
+ lastMessageIndex(-1),
adaptee(new BaseDebug::Adaptee(dbusConnection, parent))
{
}
BaseDebug *parent;
bool enabled;
+ int getMessagesLimit;
+ int lastMessageIndex;
+
+ DebugMessageList messages;
+
GetMessagesCallback getMessageCB;
BaseDebug::Adaptee *adaptee;
};
@@ -85,6 +92,11 @@ bool BaseDebug::isEnabled() const
return mPriv->enabled;
}
+int BaseDebug::getMessagesLimit() const
+{
+ return mPriv->getMessagesLimit;
+}
+
void BaseDebug::setGetMessagesCallback(const BaseDebug::GetMessagesCallback &cb)
{
mPriv->getMessageCB = cb;
@@ -93,6 +105,13 @@ void BaseDebug::setGetMessagesCallback(const BaseDebug::GetMessagesCallback &cb)
DebugMessageList BaseDebug::getMessages(Tp::DBusError *error) const
{
if (!mPriv->getMessageCB.isValid()) {
+ if (mPriv->getMessagesLimit) {
+ if (mPriv->lastMessageIndex < 0) {
+ return mPriv->messages;
+ } else {
+ return mPriv->messages.mid(mPriv->lastMessageIndex + 1) + mPriv->messages.mid(0, mPriv->lastMessageIndex + 1);
+ }
+ }
error->set(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented"));
return DebugMessageList();
}
@@ -105,6 +124,32 @@ void BaseDebug::setEnabled(bool enabled)
mPriv->enabled = enabled;
}
+void BaseDebug::setGetMessagesLimit(int limit)
+{
+ mPriv->getMessagesLimit = limit;
+ DebugMessageList messages;
+
+ if (mPriv->lastMessageIndex < 0) {
+ messages = mPriv->messages;
+ } else {
+ messages = mPriv->messages.mid(mPriv->lastMessageIndex + 1) + mPriv->messages.mid(0, mPriv->lastMessageIndex + 1);
+ }
+
+ mPriv->lastMessageIndex = -1;
+
+ if (mPriv->messages.count() <= limit) {
+ mPriv->messages = messages;
+ } else {
+ mPriv->messages = messages.mid(messages.count() - limit, limit);
+ }
+}
+
+void BaseDebug::clear()
+{
+ mPriv->messages.clear();
+ mPriv->lastMessageIndex = -1;
+}
+
void BaseDebug::newDebugMessage(const QString &domain, DebugLevel level, const QString &message)
{
qint64 msec = QDateTime::currentMSecsSinceEpoch();
@@ -115,6 +160,26 @@ void BaseDebug::newDebugMessage(const QString &domain, DebugLevel level, const Q
void BaseDebug::newDebugMessage(double time, const QString &domain, DebugLevel level, const QString &message)
{
+ if (mPriv->getMessagesLimit != 0) {
+ DebugMessage newMessage;
+ newMessage.timestamp = time;
+ newMessage.domain = domain;
+ newMessage.level = level;
+ newMessage.message = message;
+
+ if (mPriv->messages.count() == mPriv->getMessagesLimit) {
+ ++mPriv->lastMessageIndex;
+
+ if (mPriv->lastMessageIndex >= mPriv->messages.count()) {
+ mPriv->lastMessageIndex = 0;
+ }
+
+ mPriv->messages[mPriv->lastMessageIndex] = newMessage;
+ } else { // This works when the limit is not hitted yet, or when there is no limit at all (negative limit number)
+ mPriv->messages << newMessage;
+ }
+ }
+
if (!isEnabled()) {
return;
}
diff --git a/TelepathyQt/base-debug.h b/TelepathyQt/base-debug.h
index 14f137a..22d4bd3 100644
--- a/TelepathyQt/base-debug.h
+++ b/TelepathyQt/base-debug.h
@@ -42,6 +42,7 @@ public:
explicit BaseDebug(const QDBusConnection &dbusConnection = QDBusConnection::sessionBus());
bool isEnabled() const;
+ int getMessagesLimit() const;
typedef Callback1<DebugMessageList, DBusError*> GetMessagesCallback;
void setGetMessagesCallback(const GetMessagesCallback &cb);
@@ -50,6 +51,8 @@ public:
public Q_SLOTS:
void setEnabled(bool enabled);
+ void setGetMessagesLimit(int limit);
+ void clear();
void newDebugMessage(const QString &domain, DebugLevel level, const QString &message);
void newDebugMessage(double time, const QString &domain, DebugLevel level, const QString &message);
More information about the telepathy-commits
mailing list