/**
* This file is part of TelepathyQt
*
* @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 _TelepathyQt_connection_h_HEADER_GUARD_
#define _TelepathyQt_connection_h_HEADER_GUARD_
#ifndef IN_TP_QT_HEADER
#error IN_TP_QT_HEADER
#endif
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
namespace Tp
{
class Channel;
class ConnectionCapabilities;
class ConnectionLowlevel;
class Contact;
class ContactManager;
class PendingChannel;
class PendingContactAttributes;
class PendingHandles;
class PendingOperation;
class PendingReady;
class TP_QT_EXPORT Connection : public StatefulDBusProxy,
public OptionalInterfaceFactory
{
Q_OBJECT
Q_DISABLE_COPY(Connection)
public:
static const Feature FeatureCore;
static const Feature FeatureSelfContact;
static const Feature FeatureSimplePresence;
static const Feature FeatureRoster;
static const Feature FeatureRosterGroups;
static const Feature FeatureAccountBalance; // TODO unit tests for this
static const Feature FeatureConnected;
static ConnectionPtr create(const QString &busName,
const QString &objectPath,
const ChannelFactoryConstPtr &channelFactory,
const ContactFactoryConstPtr &contactFactory);
static ConnectionPtr create(const QDBusConnection &bus,
const QString &busName, const QString &objectPath,
const ChannelFactoryConstPtr &channelFactory,
const ContactFactoryConstPtr &contactFactory);
virtual ~Connection();
ChannelFactoryConstPtr channelFactory() const;
ContactFactoryConstPtr contactFactory() const;
QString cmName() const;
QString protocolName() const;
ConnectionStatus status() const;
ConnectionStatusReason statusReason() const;
class ErrorDetails
{
public:
ErrorDetails();
ErrorDetails(const QVariantMap &details);
ErrorDetails(const ErrorDetails &other);
~ErrorDetails();
ErrorDetails &operator=(const ErrorDetails &other);
bool isValid() const { return mPriv.constData() != 0; }
bool hasDebugMessage() const
{
return allDetails().contains(QLatin1String("debug-message"));
}
QString debugMessage() const
{
return qdbus_cast(allDetails().value(QLatin1String("debug-message")));
}
bool hasServerMessage() const
{
return allDetails().contains(QLatin1String("server-message"));
}
QString serverMessage() const
{
return qdbus_cast(allDetails().value(QLatin1String("server-message")));
}
bool hasUserRequested() const
{
return allDetails().contains(QLatin1String("user-requested"));
}
bool userRequested() const
{
return qdbus_cast(allDetails().value(QLatin1String("user-requested")));
}
bool hasExpectedHostname() const
{
return allDetails().contains(QLatin1String("expected-hostname"));
}
QString expectedHostname() const
{
return qdbus_cast(allDetails().value(QLatin1String("expected-hostname")));
}
bool hasCertificateHostname() const
{
return allDetails().contains(QLatin1String("certificate-hostname"));
}
QString certificateHostname() const
{
return qdbus_cast(allDetails().value(QLatin1String("certificate-hostname")));
}
QVariantMap allDetails() const;
private:
friend class Connection;
struct Private;
friend struct Private;
QSharedDataPointer mPriv;
};
const ErrorDetails &errorDetails() const;
uint selfHandle() const;
ContactPtr selfContact() const;
CurrencyAmount accountBalance() const;
ConnectionCapabilities capabilities() const;
ContactManagerPtr contactManager() const;
#if defined(BUILDING_TP_QT) || defined(TP_QT_ENABLE_LOWLEVEL_API)
ConnectionLowlevelPtr lowlevel();
ConnectionLowlevelConstPtr lowlevel() const;
#endif
Q_SIGNALS:
void statusChanged(Tp::ConnectionStatus newStatus);
void selfHandleChanged(uint newHandle);
// FIXME: might not need this when Renaming is fixed and mapped to Contacts
void selfContactChanged();
void accountBalanceChanged(const Tp::CurrencyAmount &accountBalance);
protected:
Connection(const QDBusConnection &bus, const QString &busName,
const QString &objectPath,
const ChannelFactoryConstPtr &channelFactory,
const ContactFactoryConstPtr &contactFactory,
const Feature &coreFeature);
Client::ConnectionInterface *baseInterface() const;
private Q_SLOTS:
TP_QT_NO_EXPORT void onStatusReady(uint status);
TP_QT_NO_EXPORT void onStatusChanged(uint status, uint reason);
TP_QT_NO_EXPORT void onConnectionError(const QString &error, const QVariantMap &details);
TP_QT_NO_EXPORT void gotMainProperties(QDBusPendingCallWatcher *watcher);
TP_QT_NO_EXPORT void gotStatus(QDBusPendingCallWatcher *watcher);
TP_QT_NO_EXPORT void gotInterfaces(QDBusPendingCallWatcher *watcher);
TP_QT_NO_EXPORT void gotSelfHandle(QDBusPendingCallWatcher *watcher);
TP_QT_NO_EXPORT void gotCapabilities(QDBusPendingCallWatcher *watcher);
TP_QT_NO_EXPORT void gotContactAttributeInterfaces(QDBusPendingCallWatcher *watcher);
TP_QT_NO_EXPORT void gotSimpleStatuses(QDBusPendingCallWatcher *watcher);
TP_QT_NO_EXPORT void gotSelfContact(Tp::PendingOperation *op);
TP_QT_NO_EXPORT void onIntrospectRosterFinished(Tp::PendingOperation *op);
TP_QT_NO_EXPORT void onIntrospectRosterGroupsFinished(Tp::PendingOperation *op);
TP_QT_NO_EXPORT void doReleaseSweep(uint handleType);
TP_QT_NO_EXPORT void onSelfHandleChanged(uint);
TP_QT_NO_EXPORT void gotBalance(QDBusPendingCallWatcher *watcher);
TP_QT_NO_EXPORT void onBalanceChanged(const Tp::CurrencyAmount &);
private:
class PendingConnect;
friend class ConnectionLowlevel;
friend class PendingChannel;
friend class PendingConnect;
friend class PendingContactAttributes;
friend class PendingContacts;
friend class PendingHandles;
friend class ReferencedHandles;
TP_QT_NO_EXPORT void refHandle(HandleType handleType, uint handle);
TP_QT_NO_EXPORT void unrefHandle(HandleType handleType, uint handle);
TP_QT_NO_EXPORT void handleRequestLanded(HandleType handleType);
struct Private;
friend struct Private;
Private *mPriv;
};
} // Tp
Q_DECLARE_METATYPE(Tp::Connection::ErrorDetails);
#endif