KNewStuff
entryloader.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 #include "entryloader.h"
00020
00021 #include "entryhandler.h"
00022 #include "feed.h"
00023
00024 #include <QtCore/QByteArray>
00025
00026 #include <kconfig.h>
00027 #include <kdebug.h>
00028 #include <kio/job.h>
00029 #include <klocale.h>
00030
00031 using namespace KNS;
00032
00033 EntryLoader::EntryLoader(QObject* parent)
00034 : QObject(parent)
00035 {
00036 m_feed = 0;
00037 m_provider = 0;
00038 }
00039
00040 void EntryLoader::load(const Provider *provider, Feed *feed)
00041 {
00042
00043
00044 m_provider = provider;
00045 m_feed = feed;
00046
00047 m_entries.clear();
00048 m_jobdata.clear();
00049
00050 KUrl stuffurl = feed->feedUrl();
00051
00052
00053 KIO::TransferJob *job = KIO::get(stuffurl, KIO::NoReload, KIO::HideProgressInfo);
00054 connect(job, SIGNAL(result(KJob *)),
00055 SLOT(slotJobResult(KJob *)));
00056 connect(job, SIGNAL(data(KIO::Job *, const QByteArray &)),
00057 SLOT(slotJobData(KIO::Job *, const QByteArray &)));
00058 connect(job, SIGNAL(percent(KJob*, unsigned long)),
00059 this, SIGNAL(signalProgress(KJob*, unsigned long)));
00060 }
00061
00062 Feed *EntryLoader::feed() const
00063 {
00064 return m_feed;
00065 }
00066
00067 const Provider *EntryLoader::provider() const
00068 {
00069 return m_provider;
00070 }
00071
00072 void EntryLoader::slotJobData(KIO::Job *, const QByteArray &data)
00073 {
00074
00075
00076 m_jobdata.append(data);
00077 }
00078
00079 void EntryLoader::slotJobResult(KJob *job)
00080 {
00081 if (job->error()) {
00082 emit signalEntriesFailed();
00083 return;
00084 }
00085
00086
00087
00088
00089
00090
00091
00092 QDomDocument doc;
00093 if (!doc.setContent(m_jobdata)) {
00094 emit signalEntriesFailed();
00095 return;
00096 }
00097
00098 QDomElement entries = doc.documentElement();
00099
00100 if (entries.isNull()) {
00101 kWarning() << "No document in stuff.xml.";
00102 }
00103
00104 QDomNode n;
00105 for (n = entries.firstChild(); !n.isNull(); n = n.nextSibling()) {
00106 QDomElement e = n.toElement();
00107
00108 if (e.tagName() == "stuff") {
00109 EntryHandler handler(e);
00110 Entry * entry = handler.entryptr();
00111 m_entries.append(entry);
00112 m_feed->addEntry(entry);
00113
00114 }
00115 }
00116
00117 emit signalEntriesLoaded(m_entries);
00118 }
00119
00120 #include "entryloader.moc"