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,
const QString &providersList )
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 = providersList;
00161
if( providersUrl.
isEmpty() )
00162 providersUrl = cfg->readEntry(
"ProvidersUrl" );
00163
00164
if ( providersUrl.
isEmpty() ) {
00165
00166
QString server = cfg->readEntry(
"MasterServer",
00167
"http://korganizer.kde.org" );
00168
00169 providersUrl = server +
"/knewstuff/" + type +
"/providers.xml";
00170 }
00171
00172 kdDebug(5850) <<
"ProviderLoader::load(): providersUrl: " << providersUrl << endl;
00173
00174 KIO::TransferJob *job = KIO::get( KURL( providersUrl ) );
00175 connect( job, SIGNAL( result( KIO::Job * ) ),
00176 SLOT( slotJobResult( KIO::Job * ) ) );
00177 connect( job, SIGNAL( data( KIO::Job *,
const QByteArray & ) ),
00178 SLOT( slotJobData( KIO::Job *,
const QByteArray & ) ) );
00179
00180
00181 }
00182
00183
void ProviderLoader::slotJobData( KIO::Job *,
const QByteArray &data )
00184 {
00185 kdDebug(5850) <<
"ProviderLoader::slotJobData()" << endl;
00186
00187
if ( data.size() == 0 )
return;
00188
00189
QCString str( data, data.size() + 1 );
00190
00191 mJobData.
append( QString::fromUtf8( str ) );
00192 }
00193
00194
void ProviderLoader::slotJobResult( KIO::Job *job )
00195 {
00196
if ( job->error() ) {
00197 job->showErrorDialog( mParentWidget );
00198 }
00199
00200 kdDebug(5850) <<
"--PROVIDERS-START--" << endl << mJobData <<
"--PROV_END--"
00201 << endl;
00202
00203
QDomDocument doc;
00204
if ( !doc.
setContent( mJobData ) ) {
00205 KMessageBox::error( mParentWidget, i18n(
"Error parsing providers list.") );
00206
return;
00207 }
00208
00209
QDomElement providers = doc.
documentElement();
00210
00211
if ( providers.isNull() ) {
00212 kdDebug(5850) <<
"No document in Providers.xml." << endl;
00213 }
00214
00215
QDomNode n;
00216
for ( n = providers.firstChild(); !n.
isNull(); n = n.
nextSibling() ) {
00217
QDomElement p = n.
toElement();
00218
00219 mProviders.
append(
new Provider( p ) );
00220 }
00221
00222 emit
providersLoaded( &mProviders );
00223 }