korganizer Library API Documentation

provider.cpp

00001 /*
00002     This file is part of KOrganizer.
00003     Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org>
00004 
00005     This library is free software; you can redistribute it and/or
00006     modify it under the terms of the GNU Library General Public
00007     License as published by the Free Software Foundation; either
00008     version 2 of the License, or (at your option) any later version.
00009 
00010     This library is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013     Library General Public License for more details.
00014 
00015     You should have received a copy of the GNU Library General Public License
00016     along with this library; see the file COPYING.LIB.  If not, write to
00017     the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
00018     Boston, MA 02111-1307, USA.
00019 */
00020 
00021 #include <kconfig.h>
00022 #include <kdebug.h>
00023 #include <kio/job.h>
00024 #include <kglobal.h>
00025 #include <kmessagebox.h>
00026 #include <klocale.h>
00027 
00028 #include "provider.h"
00029 #include "provider.moc"
00030 
00031 using namespace KNS;
00032 
00033 Provider::Provider() : mNoUpload( false )
00034 {
00035 }
00036 
00037 Provider::Provider( const QDomElement &e ) : mNoUpload( false )
00038 {
00039   parseDomElement( e );
00040 }
00041 
00042 Provider::~Provider()
00043 {
00044 }
00045 
00046 
00047 void Provider::setName( const QString &name )
00048 {
00049   mName = name;
00050 }
00051 
00052 QString Provider::name() const
00053 {
00054   return mName;
00055 }
00056 
00057 
00058 void Provider::setIcon( const KURL &url )
00059 {
00060   mIcon = url;
00061 }
00062 
00063 KURL Provider::icon() const
00064 {
00065   return mIcon;
00066 }
00067 
00068 
00069 void Provider::setDownloadUrl( const KURL &url )
00070 {
00071   mDownloadUrl = url;
00072 }
00073 
00074 KURL Provider::downloadUrl() const
00075 {
00076   return mDownloadUrl;
00077 }
00078 
00079 
00080 void Provider::setUploadUrl( const KURL &url )
00081 {
00082   mUploadUrl = url;
00083 }
00084 
00085 KURL Provider::uploadUrl() const
00086 {
00087   return mUploadUrl;
00088 }
00089 
00090 
00091 void Provider::setNoUploadUrl( const KURL &url )
00092 {
00093   mNoUploadUrl = url;
00094 }
00095 
00096 KURL Provider::noUploadUrl() const
00097 {
00098   return mNoUploadUrl;
00099 }
00100 
00101 
00102 void Provider::setNoUpload( bool enabled )
00103 {
00104   mNoUpload = enabled;
00105 }
00106 
00107 bool Provider::noUpload() const
00108 {
00109   return mNoUpload;
00110 }
00111 
00112 
00113 void Provider::parseDomElement( const QDomElement &element )
00114 {
00115   if ( element.tagName() != "provider" ) return;
00116 
00117   setDownloadUrl( KURL( element.attribute("downloadurl") ) );
00118   setUploadUrl( KURL( element.attribute("uploadurl") ) );
00119   setNoUploadUrl( KURL( element.attribute("nouploadurl") ) );
00120   setIcon( KURL( element.attribute("icon") ) );
00121 
00122   QDomNode n;
00123   for ( n = element.firstChild(); !n.isNull(); n = n.nextSibling() ) {
00124     QDomElement p = n.toElement();
00125     
00126     if ( p.tagName() == "noupload" ) setNoUpload( true );
00127     if ( p.tagName() == "title" ) setName( p.text().stripWhiteSpace() );
00128   }
00129 }
00130 
00131 QDomElement Provider::createDomElement( QDomDocument &doc, QDomElement &parent )
00132 {
00133   QDomElement entry = doc.createElement( "stuff" );
00134   parent.appendChild( entry );
00135 
00136   QDomElement n = doc.createElement( "name" );
00137   n.appendChild( doc.createTextNode( name() ) );
00138   entry.appendChild( n );
00139   
00140   return entry;
00141 }
00142 
00143 
00144 ProviderLoader::ProviderLoader( QWidget *parentWidget ) :
00145   mParentWidget( parentWidget )
00146 {
00147   mProviders.setAutoDelete( true );
00148 }
00149 
00150 void ProviderLoader::load( const QString &type )
00151 {
00152   kdDebug(5850) << "ProviderLoader::load()" << endl;
00153 
00154   mProviders.clear();
00155   mJobData = "";
00156 
00157   KConfig *cfg = KGlobal::config();
00158   cfg->setGroup("KNewStuff");
00159 
00160   QString providersUrl = cfg->readEntry( "ProvidersUrl" );
00161 
00162   if ( providersUrl.isEmpty() ) {
00163     // TODO: Replace the default by the real one.
00164     QString server = cfg->readEntry( "MasterServer",
00165                                      "http://korganizer.kde.org" );
00166   
00167     providersUrl = server + "/knewstuff/" + type + "/providers.xml";
00168   }
00169 
00170   kdDebug(5850) << "ProviderLoader::load(): providersUrl: " << providersUrl << endl;
00171   
00172   KIO::TransferJob *job = KIO::get( KURL( providersUrl ) );
00173   connect( job, SIGNAL( result( KIO::Job * ) ),
00174            SLOT( slotJobResult( KIO::Job * ) ) );
00175   connect( job, SIGNAL( data( KIO::Job *, const QByteArray & ) ),
00176            SLOT( slotJobData( KIO::Job *, const QByteArray & ) ) );
00177 
00178 //  job->dumpObjectInfo();
00179 }
00180 
00181 void ProviderLoader::slotJobData( KIO::Job *, const QByteArray &data )
00182 {
00183   kdDebug(5850) << "ProviderLoader::slotJobData()" << endl;
00184 
00185   if ( data.size() == 0 ) return;
00186 
00187   QCString str( data, data.size() + 1 );
00188 
00189   mJobData.append( QString::fromUtf8( str ) );
00190 }
00191 
00192 void ProviderLoader::slotJobResult( KIO::Job *job )
00193 {
00194   if ( job->error() ) {
00195     job->showErrorDialog( mParentWidget );
00196   }
00197 
00198   kdDebug(5850) << "--PROVIDERS-START--" << endl << mJobData << "--PROV_END--"
00199             << endl;
00200 
00201   QDomDocument doc;
00202   if ( !doc.setContent( mJobData ) ) {
00203     KMessageBox::error( mParentWidget, i18n("Error parsing providers list.") );
00204     return;
00205   }
00206 
00207   QDomElement providers = doc.documentElement();
00208 
00209   if ( providers.isNull() ) {
00210     kdDebug(5850) << "No document in Providers.xml." << endl;
00211   }
00212 
00213   QDomNode n;
00214   for ( n = providers.firstChild(); !n.isNull(); n = n.nextSibling() ) {
00215     QDomElement p = n.toElement();
00216     
00217     mProviders.append( new Provider( p ) );
00218   }
00219   
00220   emit providersLoaded( &mProviders );
00221 }
KDE Logo
This file is part of the documentation for korganizer Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat May 1 11:38:31 2004 by doxygen 1.2.15 written by Dimitri van Heesch, © 1997-2003