• Skip to content
  • Skip to link menu
KDE 4.1 API Reference
  • KDE API Reference
  • kdelibs
  • Sitemap
  • Contact Us
 

KNewStuff

providerhandler.cpp

Go to the documentation of this file.
00001 /*
00002     This file is part of KNewStuff2.
00003     Copyright (c) 2002 Cornelius Schumacher <schumacher@kde.org>
00004     Copyright (c) 2003 - 2007 Josef Spillner <spillner@kde.org>
00005 
00006     This library is free software; you can redistribute it and/or
00007     modify it under the terms of the GNU Library General Public
00008     License as published by the Free Software Foundation; either
00009     version 2 of the License, or (at your option) any later version.
00010 
00011     This library is distributed in the hope that it will be useful,
00012     but WITHOUT ANY WARRANTY; without even the implied warranty of
00013     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014     Library General Public License for more details.
00015 
00016     You should have received a copy of the GNU Library General Public License
00017     along with this library; see the file COPYING.LIB.  If not, write to
00018     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00019     Boston, MA 02110-1301, USA.
00020 */
00021 
00022 #include "providerhandler.h"
00023 
00024 //#include <kconfig.h>
00025 #include <kdebug.h>
00026 //#include <kio/job.h>
00027 #include <kglobal.h>
00028 //#include <kmessagebox.h>
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     //provider->setDownloadUrl(mProvider.downloadUrl());
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     /*if(provider.downloadUrl().isValid())
00100     {
00101       el.setAttribute("downloadurl", provider.downloadUrl().url());
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     //provider.setDownloadUrl(KUrl(downloadurl));
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     // FIXME: what exactly is the following condition supposed to do?
00180     // FIXME: make sure new KUrl in KDE 4 handles this right
00181     // FIXME: this depends on freedesktop.org icon naming... introduce 'desktopicon'?
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     // Validation
00198 
00199     if ((provider.noUploadUrl().isValid()) && (provider.uploadUrl().isValid())) {
00200         //kWarning(550) << "ProviderHandler: both uploadurl and nouploadurl given";
00201         return provider;
00202     }
00203 
00204     if ((!provider.noUploadUrl().isValid()) && (!provider.uploadUrl().isValid())) {
00205         if (!provider.webService().isValid()) {
00206             //kWarning(550) << "ProviderHandler: neither uploadurl nor nouploadurl nor DXS given";
00207             return provider;
00208         }
00209     }
00210 
00211     // Provider is valid
00212 
00213     mValid = true;
00214     return provider;
00215 }
00216 
00217 // FIXME: also used in EntryHandler - make common method?
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 }

KNewStuff

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

kdelibs

Skip menu "kdelibs"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • Kate
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • KIO
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • Kross
  • KUtils
  • Nepomuk
  • Solid
  • Sonnet
  • ThreadWeaver
Generated for kdelibs by doxygen 1.5.4
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal