• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • knewstuff
 

knewstuff

  • knewstuff
provider.cpp
1 /*
2  This file is part of KOrganizer.
3  Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org>
4 
5  This library is free software; you can redistribute it and/or
6  modify it under the terms of the GNU Library General Public
7  License as published by the Free Software Foundation; either
8  version 2 of the License, or (at your option) any later version.
9 
10  This library is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  Library General Public License for more details.
14 
15  You should have received a copy of the GNU Library General Public License
16  along with this library; see the file COPYING.LIB. If not, write to
17  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  Boston, MA 02110-1301, USA.
19 */
20 
21 #include <kconfig.h>
22 #include <kdebug.h>
23 #include <kio/job.h>
24 #include <kglobal.h>
25 #include <kmessagebox.h>
26 #include <klocale.h>
27 
28 #include <tqptrdict.h>
29 #include <tqwindowdefs.h>
30 
31 #include "provider.h"
32 #include "provider.moc"
33 
34 using namespace KNS;
35 
36 // BCI for KDE 3.5 only
37 
38 class ProviderPrivate
39 {
40  public:
41  ProviderPrivate(){}
42  KURL mDownloadUrlLatest;
43  KURL mDownloadUrlScore;
44  KURL mDownloadUrlDownloads;
45 };
46 
47 static TQPtrDict<ProviderPrivate> *d_ptr_prov = 0;
48 
49 static ProviderPrivate *d_prov(const Provider *p)
50 {
51  if(!d_ptr_prov)
52  {
53  d_ptr_prov = new TQPtrDict<ProviderPrivate>();
54  d_ptr_prov->setAutoDelete(true);
55  }
56  ProviderPrivate *ret = d_ptr_prov->find((void*)p);
57  if(!ret)
58  {
59  ret = new ProviderPrivate();
60  d_ptr_prov->replace((void*)p, ret);
61  }
62  return ret;
63 }
64 
65 KURL Provider::downloadUrlVariant( TQString variant ) const
66 {
67  if((variant == "latest") && (d_prov(this)->mDownloadUrlLatest.isValid()))
68  return d_prov(this)->mDownloadUrlLatest;
69  if((variant == "score") && (d_prov(this)->mDownloadUrlScore.isValid()))
70  return d_prov(this)->mDownloadUrlScore;
71  if((variant == "downloads") && (d_prov(this)->mDownloadUrlDownloads.isValid()))
72  return d_prov(this)->mDownloadUrlDownloads;
73 
74  return mDownloadUrl;
75 }
76 
77 // BCI part ends here
78 
79 Provider::Provider() : mNoUpload( false )
80 {
81 }
82 
83 Provider::Provider( const TQDomElement &e ) : mNoUpload( false )
84 {
85  parseDomElement( e );
86 }
87 
88 Provider::~Provider()
89 {
90  if (d_ptr_prov)
91  {
92  ProviderPrivate *p = d_ptr_prov->find(this);
93  if (p)
94  d_ptr_prov->remove(p);
95 
96  if (d_ptr_prov->isEmpty())
97  {
98  delete d_ptr_prov;
99  d_ptr_prov = 0L;
100  }
101  }
102 }
103 
104 
105 void Provider::setName( const TQString &name )
106 {
107  mName = name;
108 }
109 
110 TQString Provider::name() const
111 {
112  return mName;
113 }
114 
115 
116 void Provider::setIcon( const KURL &url )
117 {
118  mIcon = url;
119 }
120 
121 KURL Provider::icon() const
122 {
123  return mIcon;
124 }
125 
126 
127 void Provider::setDownloadUrl( const KURL &url )
128 {
129  mDownloadUrl = url;
130 }
131 
132 KURL Provider::downloadUrl() const
133 {
134  return mDownloadUrl;
135 }
136 
137 
138 void Provider::setUploadUrl( const KURL &url )
139 {
140  mUploadUrl = url;
141 }
142 
143 KURL Provider::uploadUrl() const
144 {
145  return mUploadUrl;
146 }
147 
148 
149 void Provider::setNoUploadUrl( const KURL &url )
150 {
151  mNoUploadUrl = url;
152 }
153 
154 KURL Provider::noUploadUrl() const
155 {
156  return mNoUploadUrl;
157 }
158 
159 
160 void Provider::setNoUpload( bool enabled )
161 {
162  mNoUpload = enabled;
163 }
164 
165 bool Provider::noUpload() const
166 {
167  return mNoUpload;
168 }
169 
170 
171 void Provider::parseDomElement( const TQDomElement &element )
172 {
173  if ( element.tagName() != "provider" ) return;
174 
175  setDownloadUrl( KURL( element.attribute("downloadurl") ) );
176  setUploadUrl( KURL( element.attribute("uploadurl") ) );
177  setNoUploadUrl( KURL( element.attribute("nouploadurl") ) );
178 
179  d_prov(this)->mDownloadUrlLatest = KURL( element.attribute("downloadurl-latest") );
180  d_prov(this)->mDownloadUrlScore = KURL( element.attribute("downloadurl-score") );
181  d_prov(this)->mDownloadUrlDownloads = KURL( element.attribute("downloadurl-downloads") );
182 
183  KURL iconurl( element.attribute("icon") );
184  if(!iconurl.isValid()) iconurl.setPath( element.attribute("icon") );
185  setIcon( iconurl );
186 
187  TQDomNode n;
188  for ( n = element.firstChild(); !n.isNull(); n = n.nextSibling() ) {
189  TQDomElement p = n.toElement();
190 
191  if ( p.tagName() == "noupload" ) setNoUpload( true );
192  if ( p.tagName() == "title" ) setName( p.text().stripWhiteSpace() );
193  }
194 }
195 
196 TQDomElement Provider::createDomElement( TQDomDocument &doc, TQDomElement &parent )
197 {
198  TQDomElement entry = doc.createElement( "stuff" );
199  parent.appendChild( entry );
200 
201  TQDomElement n = doc.createElement( "name" );
202  n.appendChild( doc.createTextNode( name() ) );
203  entry.appendChild( n );
204 
205  return entry;
206 }
207 
208 
209 ProviderLoader::ProviderLoader( TQWidget *parentWidget ) :
210  TQObject( parentWidget )
211 {
212  mProviders.setAutoDelete( true );
213 }
214 
215 void ProviderLoader::load( const TQString &type, const TQString &providersList )
216 {
217  kdDebug() << "ProviderLoader::load()" << endl;
218 
219  mProviders.clear();
220  mJobData = "";
221 
222  KConfig *cfg = KGlobal::config();
223  cfg->setGroup("KNewStuff");
224 
225  TQString providersUrl = providersList;
226  if( providersUrl.isEmpty() )
227  providersUrl = cfg->readEntry( "ProvidersUrl" );
228 
229  if ( providersUrl.isEmpty() ) {
230  // TODO: Replace the default by the real one.
231  TQString server = cfg->readEntry( "MasterServer",
232  "http://korganizer.kde.org" );
233 
234  providersUrl = server + "/knewstuff/" + type + "/providers.xml";
235  }
236 
237  kdDebug() << "ProviderLoader::load(): providersUrl: " << providersUrl << endl;
238 
239  KIO::TransferJob *job = KIO::get( KURL( providersUrl ), false, false );
240  connect( job, TQT_SIGNAL( result( KIO::Job * ) ),
241  TQT_SLOT( slotJobResult( KIO::Job * ) ) );
242  connect( job, TQT_SIGNAL( data( KIO::Job *, const TQByteArray & ) ),
243  TQT_SLOT( slotJobData( KIO::Job *, const TQByteArray & ) ) );
244 
245 // job->dumpObjectInfo();
246 }
247 
248 void ProviderLoader::slotJobData( KIO::Job *, const TQByteArray &data )
249 {
250  kdDebug() << "ProviderLoader::slotJobData()" << endl;
251 
252  if ( data.size() == 0 ) return;
253 
254  TQCString str( data, data.size() + 1 );
255 
256  mJobData.append( TQString::fromUtf8( str ) );
257 }
258 
259 void ProviderLoader::slotJobResult( KIO::Job *job )
260 {
261  if ( job->error() ) {
262  job->showErrorDialog( TQT_TQWIDGET(parent()) );
263  }
264 
265  kdDebug() << "--PROVIDERS-START--" << endl << mJobData << "--PROV_END--"
266  << endl;
267 
268  TQDomDocument doc;
269  if ( !doc.setContent( mJobData ) ) {
270  KMessageBox::error( TQT_TQWIDGET(parent()), i18n("Error parsing providers list.") );
271  return;
272  }
273 
274  TQDomElement providers = doc.documentElement();
275 
276  if ( providers.isNull() ) {
277  kdDebug() << "No document in Providers.xml." << endl;
278  }
279 
280  TQDomNode n;
281  for ( n = providers.firstChild(); !n.isNull(); n = n.nextSibling() ) {
282  TQDomElement p = n.toElement();
283 
284  if ( p.tagName() == "provider" ) {
285  mProviders.append( new Provider( p ) );
286  }
287  }
288 
289  emit providersLoaded( &mProviders );
290 }
KNS::Provider::setNoUpload
void setNoUpload(bool)
Indicate whether provider supports uploads.
Definition: provider.cpp:160
KNS::Provider::noUploadUrl
KURL noUploadUrl() const
Retrieves the URL where a user is led if the provider does not support uploads.
Definition: provider.cpp:154
KNS::Provider::downloadUrl
KURL downloadUrl() const
Retrieves the download URL.
Definition: provider.cpp:132
KNS::Provider::noUpload
bool noUpload() const
Query whether provider supports uploads.
Definition: provider.cpp:165
KNS::ProviderLoader::load
void load(const TQString &type, const TQString &providerList=TQString::null)
Starts asynchronously loading the list of providers of the specified type.
Definition: provider.cpp:215
KNS::Provider::~Provider
~Provider()
Destructor.
Definition: provider.cpp:88
KNS::ProviderLoader::ProviderLoader
ProviderLoader(TQWidget *parentWidget)
Constructor.
Definition: provider.cpp:209
KNS::Provider::downloadUrlVariant
KURL downloadUrlVariant(TQString variant) const
Variant to retrieve 'tagged' download URLs.
Definition: provider.cpp:65
KNS::Provider::setDownloadUrl
void setDownloadUrl(const KURL &)
Sets the download URL.
Definition: provider.cpp:127
KNS::Provider::setNoUploadUrl
void setNoUploadUrl(const KURL &)
Sets the URL where a user is led if the provider does not support uploads.
Definition: provider.cpp:149
KNS::Provider::uploadUrl
KURL uploadUrl() const
Retrieves the upload URL.
Definition: provider.cpp:143
KNS::Provider::setUploadUrl
void setUploadUrl(const KURL &)
Sets the upload URL.
Definition: provider.cpp:138
KNS::Provider::name
TQString name() const
Retrieves the common name of the provider.
Definition: provider.cpp:110
KNS::Provider::icon
KURL icon() const
Retrieves the icon URL for this provider.
Definition: provider.cpp:121
KNS::ProviderLoader::providersLoaded
void providersLoaded(Provider::List *)
Indicates that the list of providers has been successfully loaded.
KNS
Handles security releated issues, like signing, verifying.
Definition: downloaddialog.h:36
KNS::Provider::setName
void setName(const TQString &)
Sets the common name of the provider.
Definition: provider.cpp:105
KNS::Provider::setIcon
void setIcon(const KURL &)
Sets the URL for an icon for this provider.
Definition: provider.cpp:116
KNS::Provider::Provider
Provider()
Constructor.
Definition: provider.cpp:79
KNS::Provider
KNewStuff provider container.
Definition: provider.h:46

knewstuff

Skip menu "knewstuff"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Class Members
  • Related Pages

knewstuff

Skip menu "knewstuff"
  • arts
  • dcop
  • dnssd
  • interfaces
  •     interface
  •     library
  •   kspeech
  •   ktexteditor
  • kabc
  • kate
  • kcmshell
  • kdecore
  • kded
  • kdefx
  • kdeprint
  • kdesu
  • kdeui
  • kdoctools
  • khtml
  • kimgio
  • kinit
  • kio
  •   bookmarks
  •   httpfilter
  •   kfile
  •   kio
  •   kioexec
  •   kpasswdserver
  •   kssl
  • kioslave
  •   http
  • kjs
  • kmdi
  •   kmdi
  • knewstuff
  • kparts
  • krandr
  • kresources
  • kspell2
  • kunittest
  • kutils
  • kwallet
  • libkmid
  • libkscreensaver
Generated for knewstuff by doxygen 1.8.8
This website is maintained by Timothy Pearson.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. |