00001 /* 00002 * This file is part of TelepathyQt4 00003 * 00004 * Copyright (C) 2008 Collabora Ltd. <http://www.collabora.co.uk/> 00005 * Copyright (C) 2008 Nokia Corporation 00006 * 00007 * This library is free software; you can redistribute it and/or 00008 * modify it under the terms of the GNU Lesser General Public 00009 * License as published by the Free Software Foundation; either 00010 * version 2.1 of the License, or (at your option) any later version. 00011 * 00012 * This library is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * Lesser General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU Lesser General Public 00018 * License along with this library; if not, write to the Free Software 00019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 00020 */ 00021 00022 #ifndef _TelepathyQt4_cli_connection_manager_internal_h_HEADER_GUARD_ 00023 #define _TelepathyQt4_cli_connection_manager_internal_h_HEADER_GUARD_ 00024 00025 #include <TelepathyQt4/Client/PendingStringList> 00026 00027 #include <QDBusConnection> 00028 #include <QLatin1String> 00029 #include <QQueue> 00030 #include <QString> 00031 00032 namespace Telepathy 00033 { 00034 namespace Client 00035 { 00036 00037 class ConnectionManager; 00038 class ConnectionManagerInterface; 00039 class PendingReadyConnectionManager; 00040 00041 struct ConnectionManager::Private 00042 { 00043 Private(const QString &name, ConnectionManager *parent); 00044 ~Private(); 00045 00046 static QString makeBusName(const QString &name); 00047 static QString makeObjectPath(const QString &name); 00048 00049 ProtocolInfo *protocol(const QString &protocolName); 00050 00051 class PendingNames; 00052 00053 ConnectionManagerInterface *baseInterface; 00054 QString name; 00055 bool ready; 00056 QQueue<void (ConnectionManager::*)()> introspectQueue; 00057 QQueue<QString> getParametersQueue; 00058 QQueue<QString> protocolQueue; 00059 QStringList interfaces; 00060 ProtocolInfoList protocols; 00061 PendingReadyConnectionManager *pendingReady; 00062 ConnectionManager::Features features; 00063 }; 00064 00065 class ConnectionManager::Private::PendingNames : public PendingStringList 00066 { 00067 Q_OBJECT 00068 00069 public: 00070 PendingNames(const QDBusConnection &bus); 00071 ~PendingNames() {}; 00072 00073 private Q_SLOTS: 00074 void onCallFinished(QDBusPendingCallWatcher *); 00075 void continueProcessing(); 00076 00077 private: 00078 void invokeMethod(const QLatin1String &method); 00079 void parseResult(const QStringList &names); 00080 00081 QQueue<QLatin1String> mMethodsQueue; 00082 QStringList mResult; 00083 QDBusConnection mBus; 00084 }; 00085 00086 } // Telepathy::Client 00087 } // Telepathy 00088 00089 #endif