/**
* This file is part of TelepathyQt
*
* @copyright Copyright (C) 2011-2012 Collabora Ltd.
* @license LGPL 2.1
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include
#include "TelepathyQt/_gen/debug-receiver.moc.hpp"
#include "TelepathyQt/_gen/cli-debug-receiver-body.hpp"
#include "TelepathyQt/_gen/cli-debug-receiver.moc.hpp"
#include "TelepathyQt/debug-internal.h"
#include
#include
#include
#include
#include
namespace Tp
{
struct TP_QT_NO_EXPORT DebugReceiver::Private
{
Private(DebugReceiver *parent);
static void introspectCore(Private *self);
DebugReceiver *parent;
Client::DebugInterface *baseInterface;
};
DebugReceiver::Private::Private(DebugReceiver *parent)
: parent(parent),
baseInterface(new Client::DebugInterface(parent))
{
ReadinessHelper::Introspectables introspectables;
ReadinessHelper::Introspectable introspectableCore(
QSet() << 0, // makesSenseForStatuses
Features(), // dependsOnFeatures (core)
QStringList(), // dependsOnInterfaces
(ReadinessHelper::IntrospectFunc) &DebugReceiver::Private::introspectCore,
this);
introspectables[DebugReceiver::FeatureCore] = introspectableCore;
parent->readinessHelper()->addIntrospectables(introspectables);
}
void DebugReceiver::Private::introspectCore(DebugReceiver::Private *self)
{
// this is done only to verify that the object exists...
PendingVariantMap *op = self->baseInterface->requestAllProperties();
self->parent->connect(op,
SIGNAL(finished(Tp::PendingOperation*)),
SLOT(onRequestAllPropertiesFinished(Tp::PendingOperation*)));
}
/**
* \class DebugReceiver
* \ingroup clientsideproxies
* \headerfile TelepathyQt/debug-receiver.h
*
* \brief The DebugReceiver class provides a D-Bus proxy for a Telepathy
* Debug object.
*
* A Debug object provides debugging messages from services.
*/
/**
* Feature representing the core that needs to become ready to make the DebugReceiver
* object usable.
*
* Note that this feature must be enabled in order to use most DebugReceiver methods.
* See specific methods documentation for more details.
*
* When calling isReady(), becomeReady(), this feature is implicitly added
* to the requested features.
*/
const Feature DebugReceiver::FeatureCore = Feature(QLatin1String(DebugReceiver::staticMetaObject.className()), 0, true);
DebugReceiverPtr DebugReceiver::create(const QString &busName, const QDBusConnection &bus)
{
return DebugReceiverPtr(new DebugReceiver(bus, busName));
}
DebugReceiver::DebugReceiver(const QDBusConnection &bus, const QString &busName)
: StatefulDBusProxy(bus, busName, TP_QT_DEBUG_OBJECT_PATH, DebugReceiver::FeatureCore),
mPriv(new Private(this))
{
}
DebugReceiver::~DebugReceiver()
{
delete mPriv;
}
/**
* Retrieves buffered debug messages.
*
* This method returns a list of buffered debug messages. Depending on the service side
* implementation, this may not be the entire list of all messages received during the
* service's lifetime. Use monitoring instead for getting all the messages being streamed
* in realtime.
*
* \return A pending operation returning a list of buffered debug messages when finished.
*
* \sa setMonitoringEnabled
*/
PendingDebugMessageList *DebugReceiver::fetchMessages()
{
return new PendingDebugMessageList(mPriv->baseInterface->GetMessages(),
DebugReceiverPtr(this));
}
/**
* Enables or disables the emission of newDebugMessage.
*
* This function either enables or disables the emission of newDebugMessage. If monitoring is
* enabled, everytime a message will be received, newDebugMessage will be emitted carrying the
* new message.
*
* Monitoring should be disabled when not needed, as it generates a high amount of traffic on
* the bus. It is always disabled by default.
*
* This method requires FeatureCore to be enabled.
*
* \param enabled Whether to enable or disable monitoring.
*
* \return A pending operation returning whether the operation succeeded or not.
*
* \sa newDebugMessage
*/
PendingOperation *DebugReceiver::setMonitoringEnabled(bool enabled)
{
if (!isReady()) {
warning() << "DebugReceiver::setMonitoringEnabled called without DebugReceiver being ready";
return new PendingFailure(TP_QT_ERROR_NOT_AVAILABLE,
QLatin1String("FeatureCore is not ready"), DebugReceiverPtr(this));
}
return mPriv->baseInterface->setPropertyEnabled(enabled);
}
void DebugReceiver::onRequestAllPropertiesFinished(Tp::PendingOperation *op)
{
if (op->isError()) {
readinessHelper()->setIntrospectCompleted(
FeatureCore, false, op->errorName(), op->errorMessage());
} else {
connect(mPriv->baseInterface,
SIGNAL(NewDebugMessage(double,QString,uint,QString)),
SLOT(onNewDebugMessage(double,QString,uint,QString)));
readinessHelper()->setIntrospectCompleted(FeatureCore, true);
}
}
void DebugReceiver::onNewDebugMessage(double time, const QString &domain,
uint level, const QString &message)
{
DebugMessage msg;
msg.timestamp = time;
msg.domain = domain;
msg.level = level;
msg.message = message;
emit newDebugMessage(msg);
}
/**
* \fn void DebugReceiver::newDebugMessage(const Tp::DebugMessage &msg)
*
* Emitted whenever a new debug message is available. This will be emitted only if
* monitoring has been previously enabled.
*
* \param msg The new debug message.
*
* \sa setMonitoringEnabled
*/
} // Tp