00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "entry.h"
00023
00024 #include <tqptrdict.h>
00025 #include <tqwindowdefs.h>
00026
00027 #include <tdeglobal.h>
00028 #include <tdelocale.h>
00029
00030 using namespace KNS;
00031
00032
00033
00034 class EntryPrivate
00035 {
00036 public:
00037 EntryPrivate(){}
00038 TQString mEmail;
00039 TQMap<TQString,TQString> mNameMap;
00040 };
00041
00042 static TQPtrDict<EntryPrivate> *d_ptr = 0;
00043
00044 static EntryPrivate *d(const Entry *e)
00045 {
00046 if(!d_ptr)
00047 {
00048 d_ptr = new TQPtrDict<EntryPrivate>();
00049 d_ptr->setAutoDelete(true);
00050 }
00051 EntryPrivate *ret = d_ptr->find((void*)e);
00052 if(!ret)
00053 {
00054 ret = new EntryPrivate();
00055 d_ptr->replace((void*)e, ret);
00056 }
00057 return ret;
00058 }
00059
00060 TQString Entry::authorEmail() const
00061 {
00062 return d(this)->mEmail;
00063 }
00064
00065 void Entry::setAuthorEmail( const TQString& email )
00066 {
00067 d(this)->mEmail = email;
00068 }
00069
00070 TQString Entry::name( const TQString &lang ) const
00071 {
00072 if ( d(this)->mNameMap.isEmpty() ) return TQString::null;
00073
00074 if ( !d(this)->mNameMap[ lang ].isEmpty() ) return d(this)->mNameMap[ lang ];
00075 else {
00076 TQStringList langs = TDEGlobal::locale()->languageList();
00077 for(TQStringList::Iterator it = langs.begin(); it != langs.end(); ++it)
00078 if( !d(this)->mNameMap[ *it ].isEmpty() ) return d(this)->mNameMap[ *it ];
00079 }
00080 if ( !d(this)->mNameMap[ TQString::null ].isEmpty() ) return d(this)->mNameMap[ TQString::null ];
00081 else return *(mSummaryMap.begin());
00082 }
00083
00084 void Entry::setName( const TQString &name, const TQString &lang )
00085 {
00086 d(this)->mNameMap.insert( lang, name );
00087
00088 if ( mLangs.find( lang ) == mLangs.end() ) mLangs.append( lang );
00089 }
00090
00091
00092
00093 Entry::Entry() :
00094 mRelease( 0 ), mReleaseDate( TQDate::currentDate() ), mRating( 0 ),
00095 mDownloads( 0 )
00096 {
00097 }
00098
00099 Entry::Entry( const TQDomElement &e ) :
00100 mRelease( 0 ), mRating( 0 ), mDownloads( 0 )
00101 {
00102 parseDomElement( e );
00103 }
00104
00105 Entry::~Entry()
00106 {
00107 if (d_ptr)
00108 {
00109 EntryPrivate *p = d_ptr->find(this);
00110 if (p)
00111 d_ptr->remove(p);
00112
00113 if (d_ptr->isEmpty())
00114 {
00115 delete d_ptr;
00116 d_ptr = 0L;
00117 }
00118 }
00119 }
00120
00121
00122 void Entry::setName( const TQString &name )
00123 {
00124 mName = name;
00125 }
00126
00127 TQString Entry::name() const
00128 {
00129 return mName;
00130 }
00131
00132
00133 void Entry::setType( const TQString &type )
00134 {
00135 mType = type;
00136 }
00137
00138 TQString Entry::type() const
00139 {
00140 return mType;
00141 }
00142
00143
00144 void Entry::setAuthor( const TQString &author )
00145 {
00146 mAuthor = author;
00147 }
00148
00149 TQString Entry::author() const
00150 {
00151 return mAuthor;
00152 }
00153
00154
00155 void Entry::setLicence( const TQString &license )
00156 {
00157 mLicence = license;
00158 }
00159
00160 TQString Entry::license() const
00161 {
00162 return mLicence;
00163 }
00164
00165
00166 void Entry::setSummary( const TQString &text, const TQString &lang )
00167 {
00168 mSummaryMap.insert( lang, text );
00169
00170 if ( mLangs.find( lang ) == mLangs.end() ) mLangs.append( lang );
00171 }
00172
00173 TQString Entry::summary( const TQString &lang ) const
00174 {
00175 if ( mSummaryMap.isEmpty() ) return TQString::null;
00176
00177 if ( !mSummaryMap[ lang ].isEmpty() ) return mSummaryMap[ lang ];
00178 else {
00179 TQStringList langs = TDEGlobal::locale()->languageList();
00180 for(TQStringList::Iterator it = langs.begin(); it != langs.end(); ++it)
00181 if( !mSummaryMap[ *it ].isEmpty() ) return mSummaryMap[ *it ];
00182 }
00183 if ( !mSummaryMap[ TQString::null ].isEmpty() ) return mSummaryMap[ TQString::null ];
00184 else return *(mSummaryMap.begin());
00185 }
00186
00187
00188 void Entry::setVersion( const TQString &version )
00189 {
00190 mVersion = version;
00191 }
00192
00193 TQString Entry::version() const
00194 {
00195 return mVersion;
00196 }
00197
00198
00199 void Entry::setRelease( int release )
00200 {
00201 mRelease = release;
00202 }
00203
00204 int Entry::release() const
00205 {
00206 return mRelease;
00207 }
00208
00209
00210 void Entry::setReleaseDate( const TQDate &d )
00211 {
00212 mReleaseDate = d;
00213 }
00214
00215 TQDate Entry::releaseDate() const
00216 {
00217 return mReleaseDate;
00218 }
00219
00220
00221 void Entry::setPayload( const KURL &url, const TQString &lang )
00222 {
00223 mPayloadMap.insert( lang, url );
00224
00225 if ( mLangs.find( lang ) == mLangs.end() ) mLangs.append( lang );
00226 }
00227
00228 KURL Entry::payload( const TQString &lang ) const
00229 {
00230 KURL payload = mPayloadMap[ lang ];
00231 if ( payload.isEmpty() ) {
00232 TQStringList langs = TDEGlobal::locale()->languageList();
00233 for(TQStringList::Iterator it = langs.begin(); it != langs.end(); ++it)
00234 if( !mPayloadMap[ *it ].isEmpty() ) return mPayloadMap[ *it ];
00235 }
00236 if ( payload.isEmpty() ) payload = mPayloadMap [ TQString::null ];
00237 if ( payload.isEmpty() && !mPayloadMap.isEmpty() ) {
00238 payload = *(mPayloadMap.begin());
00239 }
00240 return payload;
00241 }
00242
00243
00244 void Entry::setPreview( const KURL &url, const TQString &lang )
00245 {
00246 mPreviewMap.insert( lang, url );
00247
00248 if ( mLangs.find( lang ) == mLangs.end() ) mLangs.append( lang );
00249 }
00250
00251 KURL Entry::preview( const TQString &lang ) const
00252 {
00253 KURL preview = mPreviewMap[ lang ];
00254 if ( preview.isEmpty() ) {
00255 TQStringList langs = TDEGlobal::locale()->languageList();
00256 for(TQStringList::Iterator it = langs.begin(); it != langs.end(); ++it)
00257 if( !mPreviewMap[ *it ].isEmpty() ) return mPreviewMap[ *it ];
00258 }
00259 if ( preview.isEmpty() ) preview = mPreviewMap [ TQString::null ];
00260 if ( preview.isEmpty() && !mPreviewMap.isEmpty() ) {
00261 preview = *(mPreviewMap.begin());
00262 }
00263 return preview;
00264 }
00265
00266
00267 void Entry::setRating( int rating )
00268 {
00269 mRating = rating;
00270 }
00271
00272 int Entry::rating()
00273 {
00274 return mRating;
00275 }
00276
00277
00278 void Entry::setDownloads( int downloads )
00279 {
00280 mDownloads = downloads;
00281 }
00282
00283 int Entry::downloads()
00284 {
00285 return mDownloads;
00286 }
00287
00288 TQString Entry::fullName()
00289 {
00290 if ( version().isEmpty() )
00291 return name();
00292 else
00293 return name() + "-" + version() + "-" + TQString::number( release() );
00294 }
00295
00296 TQStringList Entry::langs()
00297 {
00298 return mLangs;
00299 }
00300
00301
00302
00303
00304
00305
00306
00307
00308 void Entry::parseDomElement( const TQDomElement &element )
00309 {
00310 if ( element.tagName() != "content" ) return;
00311 mType = element.attribute("type");
00312
00313 TQDomNode n;
00314 TQString lang;
00315 for( n = element.firstChild(); !n.isNull(); n = n.nextSibling() ) {
00316 TQDomElement e = n.toElement();
00317 if ( e.tagName() == "name" )
00318 {
00319 setName( e.text().stripWhiteSpace(), lang );
00320 setName( e.text().stripWhiteSpace() );
00321 }
00322 if ( e.tagName() == "personid" ) {
00323 setAuthor( e.text().stripWhiteSpace() );
00324
00325
00326 }
00327
00328 if ( e.tagName() == "licence" ) setLicence( e.text().stripWhiteSpace() );
00329 if ( e.tagName() == "description" ) {
00330 setSummary( e.text().stripWhiteSpace(), lang );
00331 }
00332 if ( e.tagName() == "version" ) setVersion( e.text().stripWhiteSpace() );
00333
00334 if ( e.tagName() == "created" ) {
00335 TQDate date = TQT_TQDATE_OBJECT(TQDate::fromString( e.text().stripWhiteSpace(), Qt::ISODate ));
00336 setReleaseDate( date );
00337 }
00338 if ( e.tagName() == "smallpreviewpic1" ) {
00339 setPreview( KURL( e.text().stripWhiteSpace() ), lang );
00340 }
00341 if ( e.tagName() == "downloadlink1" ) {
00342 setPayload( KURL( e.text().stripWhiteSpace() ), lang );
00343 }
00344 if ( e.tagName() == "score" ) setRating( e.text().toInt() );
00345 if ( e.tagName() == "downloads" ) setDownloads( e.text().toInt() );
00346
00347 }
00348 }
00349
00350 TQDomElement Entry::createDomElement( TQDomDocument &doc,
00351 TQDomElement &parent )
00352 {
00353 TQDomElement entry = doc.createElement( "content" );
00354 entry.setAttribute("type", mType);
00355 parent.appendChild( entry );
00356
00357 addElement( doc, entry, "language", langs().first() );
00358
00359 addElement( doc, entry, "name", name() );
00360 addElement( doc, entry, "personid", author() );
00361
00362 addElement( doc, entry, "licence", license() );
00363 addElement( doc, entry, "version", version() );
00364
00365 addElement( doc, entry, "score", TQString::number( rating() ) );
00366 addElement( doc, entry, "downloads", TQString::number( downloads() ) );
00367
00368 addElement( doc, entry, "created",
00369 releaseDate().toString( Qt::ISODate ) );
00370
00371 addElement( doc, entry, "description", summary() );
00372 addElement( doc, entry, "preview", preview().url() );
00373 addElement( doc, entry, "payload", payload().url() );
00374
00375 return entry;
00376 }
00377
00378 TQDomElement Entry::addElement( TQDomDocument &doc, TQDomElement &parent,
00379 const TQString &tag, const TQString &value )
00380 {
00381 TQDomElement n = doc.createElement( tag );
00382 n.appendChild( doc.createTextNode( value ) );
00383 parent.appendChild( n );
00384
00385 return n;
00386 }