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