00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _TelepathyQt4_cli_connection_manager_h_HEADER_GUARD_
00023 #define _TelepathyQt4_cli_connection_manager_h_HEADER_GUARD_
00024
00025 #ifndef IN_TELEPATHY_QT4_HEADER
00026 #error IN_TELEPATHY_QT4_HEADER
00027 #endif
00028
00029 #include <TelepathyQt4/_gen/cli-connection-manager.h>
00030
00031 #include <TelepathyQt4/Client/DBus>
00032 #include <TelepathyQt4/Client/DBusProxy>
00033 #include <TelepathyQt4/Client/OptionalInterfaceFactory>
00034 #include <TelepathyQt4/Constants>
00035
00036 namespace Telepathy
00037 {
00038 namespace Client
00039 {
00040
00041 class PendingConnection;
00042 class PendingReadyConnectionManager;
00043 class PendingStringList;
00044 class ProtocolParameter;
00045 class ProtocolInfo;
00046
00047 typedef QList<ProtocolParameter*> ProtocolParameterList;
00048 typedef QList<ProtocolInfo*> ProtocolInfoList;
00049
00050 class ProtocolParameter
00051 {
00052 public:
00053 ProtocolParameter(const QString &name,
00054 const QDBusSignature &dbusSignature,
00055 QVariant defaultValue,
00056 Telepathy::ConnMgrParamFlag flags);
00057 ~ProtocolParameter();
00058
00059 QString name() const { return mName; }
00060 QDBusSignature dbusSignature() const { return mDBusSignature; }
00061 QVariant::Type type() const { return mType; }
00062 QVariant defaultValue() const { return mDefaultValue; }
00063
00064 bool isRequired() const;
00065 bool isSecret() const;
00066 bool requiredForRegistration() const;
00067
00068 bool operator==(const ProtocolParameter &other) const;
00069 bool operator==(const QString &name) const;
00070
00071 private:
00072 Q_DISABLE_COPY(ProtocolParameter);
00073
00074 struct Private;
00075 friend struct Private;
00076 Private *mPriv;
00077 QString mName;
00078 QDBusSignature mDBusSignature;
00079 QVariant::Type mType;
00080 QVariant mDefaultValue;
00081 Telepathy::ConnMgrParamFlag mFlags;
00082 };
00083
00084
00085 class ProtocolInfo
00086 {
00087 public:
00088 ~ProtocolInfo();
00089
00090 QString cmName() const { return mCmName; }
00091
00092 QString name() const { return mName; }
00093
00094 const ProtocolParameterList ¶meters() const;
00095 bool hasParameter(const QString &name) const;
00096
00097 bool canRegister() const;
00098
00099 private:
00100 Q_DISABLE_COPY(ProtocolInfo);
00101
00102 ProtocolInfo(const QString &cmName, const QString &name);
00103
00104 void addParameter(const ParamSpec &spec);
00105
00106 class Private;
00107 friend class Private;
00108 friend class ConnectionManager;
00109 Private *mPriv;
00110 QString mCmName;
00111 QString mName;
00112 };
00113
00114
00115 class ConnectionManager : public StatelessDBusProxy,
00116 private OptionalInterfaceFactory<ConnectionManager>
00117 {
00118 Q_OBJECT
00119
00120 public:
00121 enum Feature {
00122 _Padding = 0xFFFFFFFF
00123 };
00124 Q_DECLARE_FLAGS(Features, Feature)
00125
00126 ConnectionManager(const QString &name, QObject *parent = 0);
00127 ConnectionManager(const QDBusConnection &bus,
00128 const QString &name, QObject *parent = 0);
00129
00130 virtual ~ConnectionManager();
00131
00132 QString name() const;
00133
00134 QStringList interfaces() const;
00135
00136 QStringList supportedProtocols() const;
00137 const ProtocolInfoList &protocols() const;
00138
00139 PendingConnection *requestConnection(const QString &protocol,
00140 const QVariantMap ¶meters);
00141
00142 inline DBus::PropertiesInterface *propertiesInterface() const
00143 {
00144 return OptionalInterfaceFactory<ConnectionManager>::interface<DBus::PropertiesInterface>();
00145 }
00146
00147 bool isReady(Features features = 0) const;
00148
00149 PendingReadyConnectionManager *becomeReady(Features features = 0);
00150
00151 static PendingStringList *listNames(const QDBusConnection &bus = QDBusConnection::sessionBus());
00152
00153 protected:
00154 ConnectionManagerInterface *baseInterface() const;
00155
00156 private Q_SLOTS:
00157 void onGetParametersReturn(QDBusPendingCallWatcher *);
00158 void onListProtocolsReturn(QDBusPendingCallWatcher *);
00159 void onGetAllConnectionManagerReturn(QDBusPendingCallWatcher *);
00160 void continueIntrospection();
00161
00162 private:
00163 Q_DISABLE_COPY(ConnectionManager);
00164
00165 bool checkConfigFile();
00166 void callReadConfig();
00167 void callGetAll();
00168 void callGetParameters();
00169 void callListProtocols();
00170
00171 struct Private;
00172 friend struct Private;
00173 friend class PendingConnection;
00174 Private *mPriv;
00175 };
00176
00177 }
00178 }
00179
00180 #endif