File indexing completed on 2024-05-05 05:13:02

0001 /*
0002     This file is part of Akregator.
0003 
0004     SPDX-FileCopyrightText: 2018 Daniel Vrátil <dvratil@kde.org>
0005 
0006     SPDX-License-Identifier: GPL-2.0-or-later WITH Qt-Commercial-exception-1.0
0007 */
0008 
0009 #include "feedretriever.h"
0010 #include "akregator-version.h"
0011 #include "akregatorconfig.h"
0012 
0013 #include <KIO/StoredTransferJob>
0014 
0015 #include <QUrl>
0016 
0017 using namespace Akregator;
0018 
0019 FeedRetriever::FeedRetriever()
0020     : Syndication::DataRetriever()
0021 {
0022 }
0023 
0024 void FeedRetriever::retrieveData(const QUrl &url)
0025 {
0026     QString userAgent = QStringLiteral("Akregator/%1; syndication").arg(QStringLiteral(AKREGATOR_VERSION));
0027     if (!Settings::customUserAgent().isEmpty()) {
0028         userAgent = Settings::customUserAgent();
0029     }
0030     bool useCache = Settings::useHTMLCache();
0031 
0032     auto job = KIO::storedGet(url, KIO::NoReload, KIO::HideProgressInfo);
0033     job->addMetaData(QStringLiteral("UserAgent"), userAgent);
0034     job->addMetaData(QStringLiteral("accept"), QStringLiteral("application/rss+xml;q=0.9, application/atom+xml;q=0.9, text/*;q=0.8, */*;q=0.7"));
0035     job->addMetaData(QStringLiteral("cache"), useCache ? QStringLiteral("refresh") : QStringLiteral("reload"));
0036     connect(job, &KJob::result, this, &FeedRetriever::getFinished);
0037     mJob = job;
0038     mJob->start();
0039 }
0040 
0041 int FeedRetriever::errorCode() const
0042 {
0043     return mError;
0044 }
0045 
0046 void FeedRetriever::abort()
0047 {
0048     if (mJob) {
0049         mJob->kill();
0050         mJob = nullptr;
0051     }
0052 }
0053 
0054 void FeedRetriever::getFinished(KJob *job)
0055 {
0056     if (job->error()) {
0057         mError = job->error();
0058         Q_EMIT dataRetrieved({}, false);
0059         return;
0060     }
0061 
0062     Q_EMIT dataRetrieved(static_cast<KIO::StoredTransferJob *>(job)->data(), true);
0063 }
0064 
0065 #include "moc_feedretriever.cpp"