/**
* This file is part of TelepathyQt4
*
* @copyright Copyright (C) 2008-2010 Collabora Ltd.
* @copyright Copyright (C) 2008-2010 Nokia Corporation
* @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
*/
#ifndef _TelepathyQt4_connection_manager_internal_h_HEADER_GUARD_
#define _TelepathyQt4_connection_manager_internal_h_HEADER_GUARD_
#include
#include
#include
#include
#include
#include
#include
namespace Tp
{
class ConnectionManager;
class ReadinessHelper;
struct TELEPATHY_QT4_NO_EXPORT ConnectionManager::Private
{
Private(ConnectionManager *parent, const QString &name,
const ConnectionFactoryConstPtr &connFactory,
const ChannelFactoryConstPtr &chanFactory,
const ContactFactoryConstPtr &contactFactory);
~Private();
bool parseConfigFile();
static void introspectMain(Private *self);
void introspectProtocolsLegacy();
void introspectParametersLegacy();
static QString makeBusName(const QString &name);
static QString makeObjectPath(const QString &name);
class PendingNames;
class ProtocolWrapper;
// Public object
ConnectionManager *parent;
ConnectionManagerLowlevelPtr lowlevel;
QString name;
// Instance of generated interface class
Client::ConnectionManagerInterface *baseInterface;
// Mandatory properties interface proxy
Client::DBus::PropertiesInterface *properties;
ReadinessHelper *readinessHelper;
ConnectionFactoryConstPtr connFactory;
ChannelFactoryConstPtr chanFactory;
ContactFactoryConstPtr contactFactory;
// Introspection
QQueue parametersQueue;
ProtocolInfoList protocols;
QSet > wrappers;
};
struct TELEPATHY_QT4_NO_EXPORT ConnectionManagerLowlevel::Private
{
Private(ConnectionManager *cm)
: cm(QWeakPointer(cm))
{
}
QWeakPointer cm;
};
class TELEPATHY_QT4_NO_EXPORT ConnectionManager::Private::PendingNames : public PendingStringList
{
Q_OBJECT
public:
PendingNames(const QDBusConnection &bus);
~PendingNames() {};
private Q_SLOTS:
void onCallFinished(QDBusPendingCallWatcher *);
void continueProcessing();
private:
void invokeMethod(const QLatin1String &method);
void parseResult(const QStringList &names);
QQueue mMethodsQueue;
QSet mResult;
QDBusConnection mBus;
};
class TELEPATHY_QT4_NO_EXPORT ConnectionManager::Private::ProtocolWrapper :
public StatelessDBusProxy, public OptionalInterfaceFactory
{
Q_OBJECT
public:
static const Feature FeatureCore;
ProtocolWrapper(const QDBusConnection &bus, const QString &busName,
const QString &objectPath,
const QString &cmName, const QString &name, const QVariantMap &props);
~ProtocolWrapper();
ProtocolInfo info() const { return mInfo; }
inline Client::DBus::PropertiesInterface *propertiesInterface() const
{
return optionalInterface(BypassInterfaceCheck);
}
private Q_SLOTS:
void gotMainProperties(QDBusPendingCallWatcher *watcher);
void gotAvatarsProperties(QDBusPendingCallWatcher *watcher);
void gotPresenceProperties(QDBusPendingCallWatcher *watcher);
private:
static void introspectMain(ProtocolWrapper *self);
void introspectAvatars();
void introspectPresence();
void continueIntrospection();
void fillRCCs();
bool receiveProperties(const QVariantMap &props);
ReadinessHelper *mReadinessHelper;
ProtocolInfo mInfo;
QVariantMap mImmutableProps;
QQueue introspectQueue;
};
} // Tp
#endif