KNewStuff
providerhandler.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "providerhandler.h"
00023
00024
00025 #include <kdebug.h>
00026
00027 #include <kglobal.h>
00028
00029 #include <klocale.h>
00030
00031 #include "feed.h"
00032
00033 using namespace KNS;
00034
00035 ProviderHandler::ProviderHandler(const Provider& provider)
00036 {
00037 mValid = false;
00038 mProvider = provider;
00039 mProviderXML = serializeElement(provider);
00040 }
00041
00042 ProviderHandler::ProviderHandler(const QDomElement& providerxml)
00043 {
00044 mValid = false;
00045 mProviderXML = providerxml;
00046 mProvider = deserializeElement(providerxml);
00047 }
00048
00049 bool ProviderHandler::isValid()
00050 {
00051 return mValid;
00052 }
00053
00054 QDomElement ProviderHandler::providerXML()
00055 {
00056 return mProviderXML;
00057 }
00058
00059 Provider *ProviderHandler::providerptr()
00060 {
00061 Provider *provider = new Provider();
00062 provider->setName(mProvider.name());
00063
00064 provider->setUploadUrl(mProvider.uploadUrl());
00065 provider->setNoUploadUrl(mProvider.noUploadUrl());
00066 provider->setWebAccess(mProvider.webAccess());
00067 provider->setWebService(mProvider.webService());
00068 provider->setIcon(mProvider.icon());
00069
00070 const QStringList feeds = mProvider.feeds();
00071 for (QStringList::ConstIterator it = feeds.begin(); it != feeds.end(); ++it) {
00072 Feed *feed = mProvider.downloadUrlFeed((*it));
00073 provider->addDownloadUrlFeed((*it), feed);
00074 }
00075 return provider;
00076 }
00077
00078 Provider ProviderHandler::provider()
00079 {
00080 return mProvider;
00081 }
00082
00083 QDomElement ProviderHandler::serializeElement(const Provider& provider)
00084 {
00085 QDomDocument doc;
00086
00087 QDomElement el = doc.createElement("provider");
00088
00089 KTranslatable name = provider.name();
00090
00091 QStringList::ConstIterator it;
00092 QDomElement e;
00093 const QStringList langs = name.languages();
00094 for (it = langs.begin(); it != langs.end(); ++it) {
00095 e = addElement(doc, el, "title", name.translated(*it));
00096 e.setAttribute("lang", *it);
00097 }
00098
00099
00100
00101
00102
00103 if (provider.uploadUrl().isValid()) {
00104 el.setAttribute("uploadurl", provider.uploadUrl().url());
00105 }
00106 if (provider.noUploadUrl().isValid()) {
00107 el.setAttribute("nouploadurl", provider.noUploadUrl().url());
00108 }
00109 if (provider.webAccess().isValid()) {
00110 el.setAttribute("webaccess", provider.webAccess().url());
00111 }
00112 if (provider.webService().isValid()) {
00113 el.setAttribute("webservice", provider.webService().url());
00114 }
00115 if (provider.icon().isValid()) {
00116 el.setAttribute("icon", provider.icon().url());
00117 }
00118
00119 const QStringList feeds = provider.feeds();
00120 for (QStringList::ConstIterator it = feeds.begin(); it != feeds.end(); ++it) {
00121 Feed *feed = provider.downloadUrlFeed((*it));
00122 if ((*it).isEmpty())
00123 el.setAttribute("downloadurl", feed->feedUrl().url());
00124 else
00125 el.setAttribute("downloadurl-" + (*it), feed->feedUrl().url());
00126 }
00127
00128 mValid = true;
00129 return el;
00130 }
00131
00132 Provider ProviderHandler::deserializeElement(const QDomElement& providerxml)
00133 {
00134 Provider provider;
00135 KTranslatable name;
00136
00137 if (providerxml.tagName() != "provider") return provider;
00138
00139 QString uploadurl = providerxml.attribute("uploadurl");
00140 QString nouploadurl = providerxml.attribute("nouploadurl");
00141 QString webservice = providerxml.attribute("webservice");
00142 QString webaccess = providerxml.attribute("webaccess");
00143
00144 provider.setUploadUrl(KUrl(uploadurl));
00145 provider.setNoUploadUrl(KUrl(nouploadurl));
00146 provider.setWebService(KUrl(webservice));
00147 provider.setWebAccess(KUrl(webaccess));
00148
00149 QString downloadurl = providerxml.attribute("downloadurl");
00150 QString downloadlatest = providerxml.attribute("downloadurl-latest");
00151 QString downloadscore = providerxml.attribute("downloadurl-score");
00152 QString downloaddownloads = providerxml.attribute("downloadurl-downloads");
00153
00154 if (!downloadlatest.isEmpty()) {
00155 Feed *feedlatest = new Feed();
00156 feedlatest->setName(i18nc("describes the feed of the latest posted entries", "Latest"));
00157 feedlatest->setFeedUrl(downloadlatest);
00158 provider.addDownloadUrlFeed("latest", feedlatest);
00159 }
00160 if (!downloadscore.isEmpty()) {
00161 Feed *feedscore = new Feed();
00162 feedscore->setName(i18n("Highest Rated"));
00163 feedscore->setFeedUrl(downloadscore);
00164 provider.addDownloadUrlFeed("score", feedscore);
00165 }
00166 if (!downloaddownloads.isEmpty()) {
00167 Feed *feeddownloads = new Feed();
00168 feeddownloads->setName(i18n("Most Downloads"));
00169 feeddownloads->setFeedUrl(downloaddownloads);
00170 provider.addDownloadUrlFeed("downloads", feeddownloads);
00171 }
00172 if (!downloadurl.isEmpty()) {
00173 Feed *feedgeneric = new Feed();
00174 feedgeneric->setName(i18n("Unsorted"));
00175 feedgeneric->setFeedUrl(downloadurl);
00176 provider.addDownloadUrlFeed(QString(), feedgeneric);
00177 }
00178
00179
00180
00181
00182 KUrl iconurl(providerxml.attribute("icon"));
00183 if (!iconurl.isValid()) iconurl.setPath(providerxml.attribute("icon"));
00184 provider.setIcon(iconurl);
00185
00186 QDomNode n;
00187 for (n = providerxml.firstChild(); !n.isNull(); n = n.nextSibling()) {
00188 QDomElement e = n.toElement();
00189 if (e.tagName() == "title") {
00190 QString lang = e.attribute("lang");
00191 name.addString(lang, e.text().trimmed());
00192 }
00193 }
00194
00195 provider.setName(name);
00196
00197
00198
00199 if ((provider.noUploadUrl().isValid()) && (provider.uploadUrl().isValid())) {
00200
00201 return provider;
00202 }
00203
00204 if ((!provider.noUploadUrl().isValid()) && (!provider.uploadUrl().isValid())) {
00205 if (!provider.webService().isValid()) {
00206
00207 return provider;
00208 }
00209 }
00210
00211
00212
00213 mValid = true;
00214 return provider;
00215 }
00216
00217
00218 QDomElement ProviderHandler::addElement(QDomDocument& doc, QDomElement& parent,
00219 const QString& tag, const QString& value)
00220 {
00221 QDomElement n = doc.createElement(tag);
00222 n.appendChild(doc.createTextNode(value));
00223 parent.appendChild(n);
00224
00225 return n;
00226 }