• Skip to content
  • Skip to link menu
KDE 4.4 API Reference
  • KDE API Reference
  • KDE-PIM Libraries
  • Sitemap
  • Contact Us
 

KXMLRPC Client Library

client.cpp

Go to the documentation of this file.
00001 /*****************************************************************************
00002  *   Copyright (C) 2003 - 2004 by Frerich Raabe <raabe@kde.org>               *
00003  *                                Tobias Koenig <tokoe@kde.org>               *
00004  *   Copyright (C) 2006 by Narayan Newton <narayannewton@gmail.com>           *
00005  *                                                                            *
00006  * This program is distributed in the hope that it will be useful, but        *
00007  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
00008  * or FITNESS FOR A PARTICULAR PURPOSE. For licensing and distribution        *
00009  * details, check the accompanying file 'COPYING.BSD'.                        *
00010  *****************************************************************************/
00024 #include "client.h"
00025 #include "query.h"
00026 
00027 #include <kio/job.h>
00028 #include <kdebug.h>
00029 #include <klocale.h>
00030 #include <kurl.h>
00031 
00032 #include <QtCore/QVariant>
00033 
00034 using namespace KXmlRpc;
00035 
00036 class Client::Private
00037 {
00038   public:
00039     Private() : mUserAgent( "KDE XMLRPC resources" ), mDigestAuth( false ){}
00040 
00041     void queryFinished( Query * );
00042 
00043     KUrl mUrl;
00044     QString mUserAgent;
00045     bool mDigestAuth;
00046     QList<Query*> mPendingQueries;
00047 };
00048 
00049 void Client::Private::queryFinished( Query *query )
00050 {
00051   mPendingQueries.removeAll( query );
00052   query->deleteLater();
00053 }
00054 
00055 Client::Client( QObject *parent )
00056   : QObject( parent ), d( new Private )
00057 {
00058 }
00059 
00060 Client::Client( const KUrl &url, QObject *parent )
00061   : QObject( parent ), d( new Private )
00062 {
00063   d->mUrl = url;
00064 }
00065 
00066 Client::~Client()
00067 {
00068   QList<Query *>::Iterator it;
00069   for ( it = d->mPendingQueries.begin(); it != d->mPendingQueries.end(); ++it ) {
00070     (*it)->deleteLater();
00071   }
00072 
00073   d->mPendingQueries.clear();
00074 
00075   delete d;
00076 }
00077 
00078 void Client::setUrl( const KUrl &url )
00079 {
00080   d->mUrl = url.isValid() ? url : KUrl();
00081 }
00082 
00083 KUrl Client::url() const
00084 {
00085   return d->mUrl;
00086 }
00087 
00088 QString Client::userAgent() const
00089 {
00090   return d->mUserAgent;
00091 }
00092 
00093 void Client::setUserAgent( const QString &userAgent )
00094 {
00095   d->mUserAgent = userAgent;
00096 }
00097 
00098 bool Client::isDigestAuthEnabled() const
00099 {
00100   return d->mDigestAuth;
00101 }
00102 
00103 void Client::setDigestAuthEnabled( bool enabled )
00104 {
00105   d->mDigestAuth = enabled;
00106 }
00107 
00108 void Client::call( const QString &method, const QList<QVariant> &args,
00109                    QObject *msgObj, const char *messageSlot,
00110                    QObject *faultObj, const char *faultSlot, const QVariant &id )
00111 {
00112 
00113   QMap<QString, QString> metaData;
00114 
00115   if ( d->mUrl.isEmpty() ) {
00116     kWarning() << "Cannot execute call to" << method << ": empty server URL";
00117   }
00118 
00119   //Fill metadata, with userAgent and possible digest auth
00120   if ( d->mUserAgent.isEmpty() ) {
00121     metaData["UserAgent"] = "KDE-XMLRPC";
00122   } else {
00123     metaData["UserAgent"] = d->mUserAgent;
00124   }
00125 
00126   if ( d->mDigestAuth ) {
00127     metaData["WWW-Authenticate:"] = "Digest";
00128   }
00129 
00130   Query *query = Query::create( id, this );
00131   connect( query, SIGNAL(message(const QList<QVariant> &,const QVariant &)), msgObj, messageSlot );
00132   connect( query, SIGNAL(fault(int,const QString &,const QVariant &)), faultObj, faultSlot );
00133   connect( query, SIGNAL(finished(Query *)), this, SLOT(queryFinished(Query *)) );
00134   d->mPendingQueries.append( query );
00135 
00136   query->call( d->mUrl.url(), method, args, metaData );
00137 }
00138 
00139 void Client::call( const QString &method, const QVariant &arg,
00140                    QObject *msgObj, const char *messageSlot,
00141                    QObject *faultObj, const char *faultSlot,
00142                    const QVariant &id )
00143 {
00144   QList<QVariant> args;
00145   args << arg ;
00146   call( method, args, msgObj, messageSlot, faultObj, faultSlot, id );
00147 }
00148 
00149 void Client::call( const QString &method, int arg,
00150                    QObject *msgObj, const char *messageSlot,
00151                    QObject *faultObj, const char *faultSlot,
00152                    const QVariant &id )
00153 {
00154   QList<QVariant> args;
00155   args << QVariant( arg );
00156   call( method, args, msgObj, messageSlot, faultObj, faultSlot, id );
00157 }
00158 
00159 void Client::call( const QString &method, bool arg,
00160                    QObject *msgObj, const char *messageSlot,
00161                    QObject *faultObj, const char *faultSlot,
00162                    const QVariant &id )
00163 {
00164   QList<QVariant> args;
00165   args << QVariant( arg );
00166   call( method, args, msgObj, messageSlot, faultObj, faultSlot, id );
00167 }
00168 
00169 void Client::call( const QString &method, double arg,
00170                    QObject *msgObj, const char *messageSlot,
00171                    QObject *faultObj, const char *faultSlot,
00172                    const QVariant &id )
00173 {
00174   QList<QVariant> args;
00175   args << QVariant( arg );
00176   call( method, args, msgObj, messageSlot, faultObj, faultSlot, id );
00177 }
00178 
00179 void Client::call( const QString &method, const QString &arg,
00180                    QObject *msgObj, const char *messageSlot,
00181                    QObject *faultObj, const char *faultSlot,
00182                    const QVariant &id )
00183 {
00184   QList<QVariant> args;
00185   args << QVariant( arg );
00186   call( method, args, msgObj, messageSlot, faultObj, faultSlot, id );
00187 }
00188 
00189 void Client::call( const QString &method, const QByteArray &arg,
00190                    QObject *msgObj, const char *messageSlot,
00191                    QObject *faultObj, const char *faultSlot,
00192                    const QVariant &id )
00193 {
00194   QList<QVariant> args;
00195   args << QVariant( arg );
00196   call( method, args, faultObj, faultSlot, msgObj, messageSlot, id );
00197 }
00198 
00199 void Client::call( const QString &method, const QDateTime &arg,
00200                    QObject *msgObj, const char *messageSlot,
00201                    QObject *faultObj, const char *faultSlot,
00202                    const QVariant &id )
00203 {
00204   QList<QVariant> args;
00205   args << QVariant( arg );
00206   call( method, args, msgObj, messageSlot, faultObj, faultSlot, id );
00207 }
00208 
00209 void Client::call( const QString &method, const QStringList &arg,
00210                    QObject *msgObj, const char *messageSlot,
00211                    QObject *faultObj, const char *faultSlot,
00212                    const QVariant &id )
00213 {
00214   QList<QVariant> args;
00215   for ( int i = 0; i < arg.count(); ++i ) {
00216     args << QVariant( arg[ i ] );
00217   }
00218 
00219   call( method, args, msgObj, messageSlot, faultObj, faultSlot, id );
00220 }
00221 
00222 #include "client.moc"

KXMLRPC Client Library

Skip menu "KXMLRPC Client Library"
  • Main Page
  • Namespace List
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

KDE-PIM Libraries

Skip menu "KDE-PIM Libraries"
  • akonadi
  •   contact
  •   kmime
  • kabc
  • kblog
  • kcal
  • kholidays
  • kimap
  • kioslave
  •   imap4
  •   mbox
  •   nntp
  • kldap
  • kmime
  • kontactinterface
  • kpimidentities
  • kpimtextedit
  •   richtextbuilders
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • microblog
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2
Generated for KDE-PIM Libraries by doxygen 1.6.1
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal