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;
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
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 }
00245
00246 Q_DECLARE_METATYPE(Tp::Connection::ErrorDetails);
00247
00248 #endif