00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "entry.h"
00022
00023 #include <kglobal.h>
00024 #include <klocale.h>
00025
00026 using namespace KNS;
00027
00028 Entry::Entry() :
00029 mRelease( 0 ), mReleaseDate( QDate::currentDate() ), mRating( 0 ),
00030 mDownloads( 0 )
00031 {
00032 }
00033
00034 Entry::Entry( const QDomElement &e )
00035 {
00036 parseDomElement( e );
00037 }
00038
00039 Entry::~Entry()
00040 {
00041 }
00042
00043
00044 void Entry::setName( const QString &name )
00045 {
00046 mName = name;
00047 }
00048
00049 QString Entry::name() const
00050 {
00051 return mName;
00052 }
00053
00054
00055 void Entry::setType( const QString &type )
00056 {
00057 mType = type;
00058 }
00059
00060 QString Entry::type() const
00061 {
00062 return mType;
00063 }
00064
00065
00066 void Entry::setAuthor( const QString &author )
00067 {
00068 mAuthor = author;
00069 }
00070
00071 QString Entry::author() const
00072 {
00073 return mAuthor;
00074 }
00075
00076
00077 void Entry::setLicence( const QString &license )
00078 {
00079 mLicence = license;
00080 }
00081
00082 QString Entry::license() const
00083 {
00084 return mLicence;
00085 }
00086
00087
00088 void Entry::setSummary( const QString &text, const QString &lang )
00089 {
00090 mSummaryMap.insert( lang, text );
00091
00092 if ( mLangs.find( lang ) == mLangs.end() ) mLangs.append( lang );
00093 }
00094
00095 QString Entry::summary( const QString &lang ) const
00096 {
00097 if ( mSummaryMap.isEmpty() ) return QString::null;
00098
00099 if ( !mSummaryMap[ lang ].isEmpty() ) return mSummaryMap[ lang ];
00100 else {
00101 QStringList langs = KGlobal::locale()->languageList();
00102 for(QStringList::Iterator it = langs.begin(); it != langs.end(); it++)
00103 if( !mSummaryMap[ *it ].isEmpty() ) return mSummaryMap[ *it ];
00104 }
00105 if ( !mSummaryMap[ QString::null ].isEmpty() ) return mSummaryMap[ QString::null ];
00106 else return *(mSummaryMap.begin());
00107 }
00108
00109
00110 void Entry::setVersion( const QString &version )
00111 {
00112 mVersion = version;
00113 }
00114
00115 QString Entry::version() const
00116 {
00117 return mVersion;
00118 }
00119
00120
00121 void Entry::setRelease( int release )
00122 {
00123 mRelease = release;
00124 }
00125
00126 int Entry::release() const
00127 {
00128 return mRelease;
00129 }
00130
00131
00132 void Entry::setReleaseDate( const QDate &d )
00133 {
00134 mReleaseDate = d;
00135 }
00136
00137 QDate Entry::releaseDate() const
00138 {
00139 return mReleaseDate;
00140 }
00141
00142
00143 void Entry::setPayload( const KURL &url, const QString &lang )
00144 {
00145 mPayloadMap.insert( lang, url );
00146
00147 if ( mLangs.find( lang ) == mLangs.end() ) mLangs.append( lang );
00148 }
00149
00150 KURL Entry::payload( const QString &lang ) const
00151 {
00152 KURL payload = mPayloadMap[ lang ];
00153 if ( payload.isEmpty() ) {
00154 QStringList langs = KGlobal::locale()->languageList();
00155 for(QStringList::Iterator it = langs.begin(); it != langs.end(); it++)
00156 if( !mPayloadMap[ *it ].isEmpty() ) return mPayloadMap[ *it ];
00157 }
00158 if ( payload.isEmpty() ) payload = mPayloadMap [ QString::null ];
00159 if ( payload.isEmpty() && !mPayloadMap.isEmpty() ) {
00160 payload = *(mPayloadMap.begin());
00161 }
00162 return payload;
00163 }
00164
00165
00166 void Entry::setPreview( const KURL &url, const QString &lang )
00167 {
00168 mPreviewMap.insert( lang, url );
00169
00170 if ( mLangs.find( lang ) == mLangs.end() ) mLangs.append( lang );
00171 }
00172
00173 KURL Entry::preview( const QString &lang ) const
00174 {
00175 KURL preview = mPreviewMap[ lang ];
00176 if ( preview.isEmpty() ) {
00177 QStringList langs = KGlobal::locale()->languageList();
00178 for(QStringList::Iterator it = langs.begin(); it != langs.end(); it++)
00179 if( !mPreviewMap[ *it ].isEmpty() ) return mPreviewMap[ *it ];
00180 }
00181 if ( preview.isEmpty() ) preview = mPreviewMap [ QString::null ];
00182 if ( preview.isEmpty() && !mPreviewMap.isEmpty() ) {
00183 preview = *(mPreviewMap.begin());
00184 }
00185 return preview;
00186 }
00187
00188
00189 void Entry::setRating( int rating )
00190 {
00191 mRating = rating;
00192 }
00193
00194 int Entry::rating()
00195 {
00196 return mRating;
00197 }
00198
00199
00200 void Entry::setDownloads( int downloads )
00201 {
00202 mDownloads = downloads;
00203 }
00204
00205 int Entry::downloads()
00206 {
00207 return mDownloads;
00208 }
00209
00210 QString Entry::fullName()
00211 {
00212 return name() + "-" + version() + "-" + QString::number( release() );
00213 }
00214
00215 QStringList Entry::langs()
00216 {
00217 return mLangs;
00218 }
00219
00220 void Entry::parseDomElement( const QDomElement &element )
00221 {
00222 if ( element.tagName() != "stuff" ) return;
00223 mType = element.attribute("type");
00224
00225 QDomNode n;
00226 for( n = element.firstChild(); !n.isNull(); n = n.nextSibling() ) {
00227 QDomElement e = n.toElement();
00228 if ( e.tagName() == "name" ) setName( e.text().stripWhiteSpace() );
00229 if ( e.tagName() == "author" ) setAuthor( e.text().stripWhiteSpace() );
00230 if ( e.tagName() == "licence" ) setLicence( e.text().stripWhiteSpace() );
00231 if ( e.tagName() == "summary" ) {
00232 QString lang = e.attribute( "lang" );
00233 setSummary( e.text().stripWhiteSpace(), lang );
00234 }
00235 if ( e.tagName() == "version" ) setVersion( e.text().stripWhiteSpace() );
00236 if ( e.tagName() == "release" ) setRelease( e.text().toInt() );
00237 if ( e.tagName() == "releasedate" ) {
00238 QDate date = QDate::fromString( e.text().stripWhiteSpace(), Qt::ISODate );
00239 setReleaseDate( date );
00240 }
00241 if ( e.tagName() == "preview" ) {
00242 QString lang = e.attribute( "lang" );
00243 setPreview( KURL( e.text().stripWhiteSpace() ), lang );
00244 }
00245 if ( e.tagName() == "payload" ) {
00246 QString lang = e.attribute( "lang" );
00247 setPayload( KURL( e.text().stripWhiteSpace() ), lang );
00248 }
00249 if ( e.tagName() == "rating" ) setRating( e.text().toInt() );
00250 if ( e.tagName() == "downloads" ) setDownloads( e.text().toInt() );
00251 }
00252 }
00253
00254 QDomElement Entry::createDomElement( QDomDocument &doc,
00255 QDomElement &parent )
00256 {
00257 QDomElement entry = doc.createElement( "stuff" );
00258 entry.setAttribute("type", mType);
00259 parent.appendChild( entry );
00260
00261 addElement( doc, entry, "name", name() );
00262 addElement( doc, entry, "author", author() );
00263 addElement( doc, entry, "licence", license() );
00264 addElement( doc, entry, "version", version() );
00265 addElement( doc, entry, "release", QString::number( release() ) );
00266 addElement( doc, entry, "rating", QString::number( rating() ) );
00267 addElement( doc, entry, "downloads", QString::number( downloads() ) );
00268
00269 addElement( doc, entry, "releasedate",
00270 releaseDate().toString( Qt::ISODate ) );
00271
00272 QStringList ls = langs();
00273 QStringList::ConstIterator it;
00274 for( it = ls.begin(); it != ls.end(); ++it ) {
00275 QDomElement e = addElement( doc, entry, "summary", summary( *it ) );
00276 e.setAttribute( "lang", *it );
00277 e = addElement( doc, entry, "preview", preview( *it ).url() );
00278 e.setAttribute( "lang", *it );
00279 e = addElement( doc, entry, "payload", payload( *it ).url() );
00280 e.setAttribute( "lang", *it );
00281 }
00282
00283 return entry;
00284 }
00285
00286 QDomElement Entry::addElement( QDomDocument &doc, QDomElement &parent,
00287 const QString &tag, const QString &value )
00288 {
00289 QDomElement n = doc.createElement( tag );
00290 n.appendChild( doc.createTextNode( value ) );
00291 parent.appendChild( n );
00292
00293 return n;
00294 }