00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
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
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
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 }