Home · All Classes · All Namespaces · Modules · Functions · Files
connection.h
00001 
00023 #ifndef _TelepathyQt_connection_h_HEADER_GUARD_
00024 #define _TelepathyQt_connection_h_HEADER_GUARD_
00025 
00026 #ifndef IN_TP_QT_HEADER
00027 #error IN_TP_QT_HEADER
00028 #endif
00029 
00030 #include <TelepathyQt/_gen/cli-connection.h>
00031 
00032 #include <TelepathyQt/ConnectionCapabilities>
00033 #include <TelepathyQt/Contact>
00034 #include <TelepathyQt/DBus>
00035 #include <TelepathyQt/DBusProxy>
00036 #include <TelepathyQt/OptionalInterfaceFactory>
00037 #include <TelepathyQt/ReadinessHelper>
00038 #include <TelepathyQt/Types>
00039 #include <TelepathyQt/SharedPtr>
00040 
00041 #include <TelepathyQt/Constants>
00042 #include <TelepathyQt/Types>
00043 
00044 #include <QSet>
00045 #include <QString>
00046 #include <QStringList>
00047 
00048 namespace Tp
00049 {
00050 
00051 class Channel;
00052 class ConnectionCapabilities;
00053 class ConnectionLowlevel;
00054 class ContactManager;
00055 class PendingChannel;
00056 class PendingContactAttributes;
00057 class PendingHandles;
00058 class PendingOperation;
00059 class PendingReady;
00060 
00061 class TP_QT_EXPORT Connection : public StatefulDBusProxy,
00062                    public OptionalInterfaceFactory<Connection>
00063 {
00064     Q_OBJECT
00065     Q_DISABLE_COPY(Connection)
00066 
00067 public:
00068     static const Feature FeatureCore;
00069     static const Feature FeatureSelfContact;
00070     static const Feature FeatureSimplePresence;
00071     static const Feature FeatureRoster;
00072     static const Feature FeatureRosterGroups;
00073     static const Feature FeatureAccountBalance; // TODO unit tests for this
00074     static const Feature FeatureConnected;
00075 
00076     static ConnectionPtr create(const QString &busName,
00077             const QString &objectPath,
00078             const ChannelFactoryConstPtr &channelFactory,
00079             const ContactFactoryConstPtr &contactFactory);
00080     static ConnectionPtr create(const QDBusConnection &bus,
00081             const QString &busName, const QString &objectPath,
00082             const ChannelFactoryConstPtr &channelFactory,
00083             const ContactFactoryConstPtr &contactFactory);
00084 
00085     virtual ~Connection();
00086 
00087     ChannelFactoryConstPtr channelFactory() const;
00088     ContactFactoryConstPtr contactFactory() const;
00089 
00090     QString cmName() const;
00091     QString protocolName() const;
00092 
00093     ConnectionStatus status() const;
00094     ConnectionStatusReason statusReason() const;
00095 
00096     class ErrorDetails
00097     {
00098         public:
00099             ErrorDetails();
00100             ErrorDetails(const QVariantMap &details);
00101             ErrorDetails(const ErrorDetails &other);
00102             ~ErrorDetails();
00103 
00104             ErrorDetails &operator=(const ErrorDetails &other);
00105 
00106             bool isValid() const { return mPriv.constData() != 0; }
00107 
00108             bool hasDebugMessage() const
00109             {
00110                 return allDetails().contains(QLatin1String("debug-message"));
00111             }
00112 
00113             QString debugMessage() const
00114             {
00115                 return qdbus_cast<QString>(allDetails().value(QLatin1String("debug-message")));
00116             }
00117 
00118             bool hasServerMessage() const
00119             {
00120                 return allDetails().contains(QLatin1String("server-message"));
00121             }
00122 
00123             QString serverMessage() const
00124             {
00125                 return qdbus_cast<QString>(allDetails().value(QLatin1String("server-message")));
00126             }
00127 
00128             bool hasUserRequested() const
00129             {
00130                 return allDetails().contains(QLatin1String("user-requested"));
00131             }
00132 
00133             bool userRequested() const
00134             {
00135                 return qdbus_cast<bool>(allDetails().value(QLatin1String("user-requested")));
00136             }
00137 
00138             bool hasExpectedHostname() const
00139             {
00140                 return allDetails().contains(QLatin1String("expected-hostname"));
00141             }
00142 
00143             QString expectedHostname() const
00144             {
00145                 return qdbus_cast<QString>(allDetails().value(QLatin1String("expected-hostname")));
00146             }
00147 
00148             bool hasCertificateHostname() const
00149             {
00150                 return allDetails().contains(QLatin1String("certificate-hostname"));
00151             }
00152 
00153             QString certificateHostname() const
00154             {
00155                 return qdbus_cast<QString>(allDetails().value(QLatin1String("certificate-hostname")));
00156             }
00157 
00158             QVariantMap allDetails() const;
00159 
00160         private:
00161             friend class Connection;
00162 
00163             struct Private;
00164             friend struct Private;
00165             QSharedDataPointer<Private> mPriv;
00166     };
00167 
00168     const ErrorDetails &errorDetails() const;
00169 
00170     uint selfHandle() const;
00171     ContactPtr selfContact() const;
00172 
00173     CurrencyAmount accountBalance() const;
00174 
00175     ConnectionCapabilities capabilities() const;
00176 
00177     ContactManagerPtr contactManager() const;
00178 
00179 #if defined(BUILDING_TP_QT) || defined(TP_QT_ENABLE_LOWLEVEL_API)
00180     ConnectionLowlevelPtr lowlevel();
00181     ConnectionLowlevelConstPtr lowlevel() const;
00182 #endif
00183 
00184 Q_SIGNALS:
00185     void statusChanged(Tp::ConnectionStatus newStatus);
00186 
00187     void selfHandleChanged(uint newHandle);
00188     // FIXME: might not need this when Renaming is fixed and mapped to Contacts
00189     void selfContactChanged();
00190 
00191     void accountBalanceChanged(const Tp::CurrencyAmount &accountBalance);
00192 
00193 protected:
00194     Connection(const QDBusConnection &bus, const QString &busName,
00195             const QString &objectPath,
00196             const ChannelFactoryConstPtr &channelFactory,
00197             const ContactFactoryConstPtr &contactFactory,
00198             const Feature &coreFeature);
00199 
00200     Client::ConnectionInterface *baseInterface() const;
00201 
00202 private Q_SLOTS:
00203     TP_QT_NO_EXPORT void onStatusReady(uint status);
00204     TP_QT_NO_EXPORT void onStatusChanged(uint status, uint reason);
00205     TP_QT_NO_EXPORT void onConnectionError(const QString &error, const QVariantMap &details);
00206     TP_QT_NO_EXPORT void gotMainProperties(QDBusPendingCallWatcher *watcher);
00207     TP_QT_NO_EXPORT void gotStatus(QDBusPendingCallWatcher *watcher);
00208     TP_QT_NO_EXPORT void gotInterfaces(QDBusPendingCallWatcher *watcher);
00209     TP_QT_NO_EXPORT void gotSelfHandle(QDBusPendingCallWatcher *watcher);
00210     TP_QT_NO_EXPORT void gotCapabilities(QDBusPendingCallWatcher *watcher);
00211     TP_QT_NO_EXPORT void gotContactAttributeInterfaces(QDBusPendingCallWatcher *watcher);
00212     TP_QT_NO_EXPORT void gotSimpleStatuses(QDBusPendingCallWatcher *watcher);
00213     TP_QT_NO_EXPORT void gotSelfContact(Tp::PendingOperation *op);
00214 
00215     TP_QT_NO_EXPORT void onIntrospectRosterFinished(Tp::PendingOperation *op);
00216     TP_QT_NO_EXPORT void onIntrospectRosterGroupsFinished(Tp::PendingOperation *op);
00217 
00218     TP_QT_NO_EXPORT void doReleaseSweep(uint handleType);
00219 
00220     TP_QT_NO_EXPORT void onSelfHandleChanged(uint);
00221 
00222     TP_QT_NO_EXPORT void gotBalance(QDBusPendingCallWatcher *watcher);
00223     TP_QT_NO_EXPORT void onBalanceChanged(const Tp::CurrencyAmount &);
00224 
00225 private:
00226     class PendingConnect;
00227     friend class ConnectionLowlevel;
00228     friend class PendingChannel;
00229     friend class PendingConnect;
00230     friend class PendingContactAttributes;
00231     friend class PendingContacts;
00232     friend class PendingHandles;
00233     friend class ReferencedHandles;
00234 
00235     TP_QT_NO_EXPORT void refHandle(HandleType handleType, uint handle);
00236     TP_QT_NO_EXPORT void unrefHandle(HandleType handleType, uint handle);
00237     TP_QT_NO_EXPORT void handleRequestLanded(HandleType handleType);
00238 
00239     struct Private;
00240     friend struct Private;
00241     Private *mPriv;
00242 };
00243 
00244 } // Tp
00245 
00246 Q_DECLARE_METATYPE(Tp::Connection::ErrorDetails);
00247 
00248 #endif


Copyright © 2008-2011 Collabora Ltd. and Nokia Corporation
Telepathy-Qt 0.9.7