You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
223 lines
7.1 KiB
223 lines
7.1 KiB
From d2797fe48b6d4429cd30163fd75003118400511f Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Daniel=20Vr=C3=A1til?= <dvratil@kde.org>
|
|
Date: Sun, 22 Apr 2018 09:13:45 +0200
|
|
Subject: Port away from remove Syndication API
|
|
|
|
---
|
|
src/CMakeLists.txt | 1 +
|
|
src/akregator_part.cpp | 10 ------
|
|
src/feed/feed.cpp | 3 +-
|
|
src/feed/feedretriever.cpp | 78 ++++++++++++++++++++++++++++++++++++++++++++++
|
|
src/feed/feedretriever.h | 54 ++++++++++++++++++++++++++++++++
|
|
5 files changed, 135 insertions(+), 11 deletions(-)
|
|
create mode 100644 src/feed/feedretriever.cpp
|
|
create mode 100644 src/feed/feedretriever.h
|
|
|
|
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
|
|
index 86af10e..312daee 100644
|
|
--- a/src/CMakeLists.txt
|
|
+++ b/src/CMakeLists.txt
|
|
@@ -86,6 +86,7 @@ set(akregatorprivate_LIB_SRCS
|
|
article.cpp
|
|
feed/feed.cpp
|
|
feed/feedlist.cpp
|
|
+ feed/feedretriever.cpp
|
|
treenode.cpp
|
|
treenodevisitor.cpp
|
|
utils.cpp
|
|
diff --git a/src/akregator_part.cpp b/src/akregator_part.cpp
|
|
index 74acfab..afde53f 100644
|
|
--- a/src/akregator_part.cpp
|
|
+++ b/src/akregator_part.cpp
|
|
@@ -259,14 +259,6 @@ Part::Part(QWidget *parentWidget, QObject *parent, const QVariantList &)
|
|
connect(m_autosaveTimer, &QTimer::timeout, this, &Part::slotSaveFeedList);
|
|
m_autosaveTimer->start(5 * 60 * 1000); // 5 minutes
|
|
|
|
- QString useragent = QStringLiteral("Akregator/%1; syndication").arg(QStringLiteral(AKREGATOR_VERSION));
|
|
-
|
|
- if (!Settings::customUserAgent().isEmpty()) {
|
|
- useragent = Settings::customUserAgent();
|
|
- }
|
|
-
|
|
- Syndication::FileRetriever::setUserAgent(useragent);
|
|
-
|
|
loadPlugins(QStringLiteral("extension")); // FIXME: also unload them!
|
|
if (mCentralWidget->previousSessionCrashed()) {
|
|
mCentralWidget->needToRestoreCrashedSession();
|
|
@@ -361,8 +353,6 @@ void Part::slotSettingsChanged()
|
|
m_actionManager->setTrayIcon(nullptr);
|
|
}
|
|
|
|
- Syndication::FileRetriever::setUseCache(Settings::useHTMLCache());
|
|
-
|
|
const QStringList fonts {
|
|
Settings::standardFont(),
|
|
Settings::fixedFont(),
|
|
diff --git a/src/feed/feed.cpp b/src/feed/feed.cpp
|
|
index 87ba473..774f506 100644
|
|
--- a/src/feed/feed.cpp
|
|
+++ b/src/feed/feed.cpp
|
|
@@ -36,6 +36,7 @@
|
|
#include "treenodevisitor.h"
|
|
#include "types.h"
|
|
#include "utils.h"
|
|
+#include "feedretriever.h"
|
|
|
|
#include <Syndication/Syndication>
|
|
|
|
@@ -681,7 +682,7 @@ void Akregator::Feed::tryFetch()
|
|
d->loader = Syndication::Loader::create(this, SLOT(fetchCompleted(Syndication::Loader *,
|
|
Syndication::FeedPtr,
|
|
Syndication::ErrorCode)));
|
|
- d->loader->loadFrom(QUrl(d->xmlUrl));
|
|
+ d->loader->loadFrom(QUrl(d->xmlUrl), new FeedRetriever());
|
|
}
|
|
|
|
void Akregator::Feed::slotImageFetched(const QPixmap &image)
|
|
diff --git a/src/feed/feedretriever.cpp b/src/feed/feedretriever.cpp
|
|
new file mode 100644
|
|
index 0000000..62526c4
|
|
--- /dev/null
|
|
+++ b/src/feed/feedretriever.cpp
|
|
@@ -0,0 +1,78 @@
|
|
+/*
|
|
+ This file is part of Akregator.
|
|
+
|
|
+ Copyright (C) 2018 Daniel Vrátil <dvratil@kde.org>
|
|
+
|
|
+ This program is free software; you can redistribute it and/or modify
|
|
+ it under the terms of the GNU General Public License as published by
|
|
+ the Free Software Foundation; either version 2 of the License, or
|
|
+ (at your option) any later version.
|
|
+
|
|
+ This program is distributed in the hope that it will be useful,
|
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ GNU General Public License for more details.
|
|
+
|
|
+ You should have received a copy of the GNU General Public License
|
|
+ along with this program; if not, write to the Free Software
|
|
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
+
|
|
+ As a special exception, permission is given to link this program
|
|
+ with any edition of Qt, and distribute the resulting executable,
|
|
+ without including the source code for Qt in the source distribution.
|
|
+*/
|
|
+
|
|
+#include "feedretriever.h"
|
|
+#include "akregatorconfig.h"
|
|
+#include "akregator-version.h"
|
|
+
|
|
+#include <KIO/StoredTransferJob>
|
|
+
|
|
+#include <QUrl>
|
|
+
|
|
+using namespace Akregator;
|
|
+
|
|
+FeedRetriever::FeedRetriever()
|
|
+ : Syndication::DataRetriever()
|
|
+{
|
|
+}
|
|
+
|
|
+void FeedRetriever::retrieveData(const QUrl &url)
|
|
+{
|
|
+ QString userAgent = QStringLiteral("Akregator/%1; syndication").arg(QStringLiteral(AKREGATOR_VERSION));
|
|
+ if (!Settings::customUserAgent().isEmpty()) {
|
|
+ userAgent = Settings::customUserAgent();
|
|
+ }
|
|
+ bool useCache = Settings::useHTMLCache();
|
|
+
|
|
+ auto job = KIO::storedGet(url, KIO::NoReload, KIO::HideProgressInfo);
|
|
+ job->addMetaData(QStringLiteral("UserAgent"), userAgent);
|
|
+ job->addMetaData(QStringLiteral("cache"), useCache ? QStringLiteral("refresh") : QStringLiteral("reload"));
|
|
+ connect(job, &KJob::result, this, &FeedRetriever::getFinished);
|
|
+ mJob = job;
|
|
+ mJob->start();
|
|
+}
|
|
+
|
|
+int FeedRetriever::errorCode() const
|
|
+{
|
|
+ return mError;
|
|
+}
|
|
+
|
|
+void FeedRetriever::abort()
|
|
+{
|
|
+ if (mJob) {
|
|
+ mJob->kill();
|
|
+ mJob = nullptr;
|
|
+ }
|
|
+}
|
|
+
|
|
+void FeedRetriever::getFinished(KJob *job)
|
|
+{
|
|
+ if (job->error()) {
|
|
+ mError = job->error();
|
|
+ Q_EMIT dataRetrieved({}, false);
|
|
+ return;
|
|
+ }
|
|
+
|
|
+ Q_EMIT dataRetrieved(static_cast<KIO::StoredTransferJob*>(job)->data(), true);
|
|
+}
|
|
diff --git a/src/feed/feedretriever.h b/src/feed/feedretriever.h
|
|
new file mode 100644
|
|
index 0000000..3a0ff3d
|
|
--- /dev/null
|
|
+++ b/src/feed/feedretriever.h
|
|
@@ -0,0 +1,54 @@
|
|
+/*
|
|
+ This file is part of Akregator.
|
|
+
|
|
+ Copyright (C) 2018 Daniel Vrátil <dvratil@kde.org>
|
|
+
|
|
+ This program is free software; you can redistribute it and/or modify
|
|
+ it under the terms of the GNU General Public License as published by
|
|
+ the Free Software Foundation; either version 2 of the License, or
|
|
+ (at your option) any later version.
|
|
+
|
|
+ This program is distributed in the hope that it will be useful,
|
|
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
+ GNU General Public License for more details.
|
|
+
|
|
+ You should have received a copy of the GNU General Public License
|
|
+ along with this program; if not, write to the Free Software
|
|
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
+
|
|
+ As a special exception, permission is given to link this program
|
|
+ with any edition of Qt, and distribute the resulting executable,
|
|
+ without including the source code for Qt in the source distribution.
|
|
+*/
|
|
+
|
|
+#ifndef FEEDRETRIEVER_H_
|
|
+#define FEEDRETRIEVER_H_
|
|
+
|
|
+#include <syndication/dataretriever.h>
|
|
+
|
|
+class KJob;
|
|
+
|
|
+namespace Akregator {
|
|
+
|
|
+class FeedRetriever : public Syndication::DataRetriever
|
|
+{
|
|
+ Q_OBJECT
|
|
+public:
|
|
+ explicit FeedRetriever();
|
|
+
|
|
+ void retrieveData(const QUrl &url) override;
|
|
+ void abort() override;
|
|
+ int errorCode() const override;
|
|
+
|
|
+private Q_SLOTS:
|
|
+ void getFinished(KJob *job);
|
|
+
|
|
+private:
|
|
+ KJob *mJob = nullptr;
|
|
+ int mError = 0;
|
|
+};
|
|
+
|
|
+}
|
|
+
|
|
+#endif
|
|
--
|
|
cgit v0.11.2
|