From 6cf2f942e7cc8e7002afe3d58dc1e6d2236ad396 Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Sun, 7 Oct 2012 17:25:17 +0300 Subject: [PATCH] Fix cookie support for RSS feeds (closes #119) --- src/downloadthread.h | 4 ++-- src/rss/rss_imp.cpp | 11 +---------- src/rss/rssfeed.cpp | 8 +++++++- src/rss/rssfeed.h | 2 ++ src/rss/rsssettings.h | 14 ++++++++++++++ 5 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/downloadthread.h b/src/downloadthread.h index 23d5b1637..6bdc6a7a3 100644 --- a/src/downloadthread.h +++ b/src/downloadthread.h @@ -46,8 +46,8 @@ class DownloadThread : public QObject { public: DownloadThread(QObject* parent = 0); - QNetworkReply* downloadUrl(const QString &url, const QList& raw_cookies = QList()); - void downloadTorrentUrl(const QString &url, const QList& raw_cookies = QList()); + QNetworkReply* downloadUrl(const QString &url, const QList& cookies = QList()); + void downloadTorrentUrl(const QString &url, const QList& cookies = QList()); //void setProxy(QString IP, int port, QString username, QString password); signals: diff --git a/src/rss/rss_imp.cpp b/src/rss/rss_imp.cpp index 9e847f0ad..48c5f10cb 100644 --- a/src/rss/rss_imp.cpp +++ b/src/rss/rss_imp.cpp @@ -347,19 +347,10 @@ void RSSImp::downloadSelectedTorrents() QBtSession::instance()->addMagnetInteractive(torrentLink); else { // Load possible cookies - QList cookies; QString feed_url = m_feedList->getItemID(m_feedList->selectedItems().first()); QString feed_hostname = QUrl::fromEncoded(feed_url.toUtf8()).host(); - const QList raw_cookies = RssSettings().getHostNameCookies(feed_hostname); - foreach (const QByteArray& raw_cookie, raw_cookies) { - QList cookie_parts = raw_cookie.split('='); - if (cookie_parts.size() == 2) { - qDebug("Loading cookie: %s = %s", cookie_parts.first().constData(), cookie_parts.last().constData()); - cookies << QNetworkCookie(cookie_parts.first(), cookie_parts.last()); - } - } + QList cookies = RssSettings().getHostNameQNetworkCookies(feed_hostname); qDebug("Loaded %d cookies for RSS item\n", cookies.size()); - QBtSession::instance()->downloadFromUrl(torrentLink, cookies); } } diff --git a/src/rss/rssfeed.cpp b/src/rss/rssfeed.cpp index 88f7e9e2e..21aca08c9 100644 --- a/src/rss/rssfeed.cpp +++ b/src/rss/rssfeed.cpp @@ -136,6 +136,12 @@ void RssFeed::addArticle(const RssArticlePtr& article) } } +QList RssFeed::feedCookies() const +{ + QString feed_hostname = QUrl::fromEncoded(m_url.toUtf8()).host(); + return RssSettings().getHostNameQNetworkCookies(feed_hostname); +} + bool RssFeed::refresh() { if (m_loading) { @@ -144,7 +150,7 @@ bool RssFeed::refresh() } m_loading = true; // Download the RSS again - m_manager->rssDownloader()->downloadUrl(m_url); + m_manager->rssDownloader()->downloadUrl(m_url, feedCookies()); return true; } diff --git a/src/rss/rssfeed.h b/src/rss/rssfeed.h index df28cba3a..ff82697a3 100644 --- a/src/rss/rssfeed.h +++ b/src/rss/rssfeed.h @@ -35,6 +35,7 @@ #include #include #include +#include #include "rssfile.h" @@ -90,6 +91,7 @@ private: void loadItemsFromDisk(); void addArticle(const RssArticlePtr& article); void downloadArticleTorrentIfMatching(RssDownloadRuleList* rules, const RssArticlePtr& article); + QList feedCookies() const; private: RssManager* m_manager; diff --git a/src/rss/rsssettings.h b/src/rss/rsssettings.h index feb8775c2..5d90c2a98 100644 --- a/src/rss/rsssettings.h +++ b/src/rss/rsssettings.h @@ -32,6 +32,7 @@ #define RSSSETTINGS_H #include +#include #include "qinisettings.h" class RssSettings: public QIniSettings{ @@ -94,6 +95,19 @@ public: return raw_cookies.split(':'); } + QList getHostNameQNetworkCookies(const QString& host_name) const { + QList cookies; + const QList raw_cookies = getHostNameCookies(host_name); + foreach (const QByteArray& raw_cookie, raw_cookies) { + QList cookie_parts = raw_cookie.split('='); + if (cookie_parts.size() == 2) { + qDebug("Loading cookie: %s = %s", cookie_parts.first().constData(), cookie_parts.last().constData()); + cookies << QNetworkCookie(cookie_parts.first(), cookie_parts.last()); + } + } + return cookies; + } + void setHostNameCookies(const QString &host_name, const QList &cookies) { QMap hosts_table = value("Rss/hosts_cookies").toMap(); QByteArray raw_cookies = "";