diff --git a/resources/desktop/com.github.rssguard.appdata.xml b/resources/desktop/com.github.rssguard.appdata.xml index aca063294..370b129ea 100644 --- a/resources/desktop/com.github.rssguard.appdata.xml +++ b/resources/desktop/com.github.rssguard.appdata.xml @@ -26,7 +26,7 @@ https://github.com/sponsors/martinrotter - + none diff --git a/src/librssguard/network-web/networkfactory.cpp b/src/librssguard/network-web/networkfactory.cpp index 1390fb19e..76e107c89 100644 --- a/src/librssguard/network-web/networkfactory.cpp +++ b/src/librssguard/network-web/networkfactory.cpp @@ -144,8 +144,11 @@ QString NetworkFactory::sanitizeUrl(const QString& url) { {}); } -QNetworkReply::NetworkError NetworkFactory::downloadIcon(const QList>& urls, int timeout, - QIcon& output, const QNetworkProxy& custom_proxy) { +QNetworkReply::NetworkError NetworkFactory::downloadIcon(const QList>& urls, + int timeout, + QIcon& output, + const QList>& additional_headers, + const QNetworkProxy& custom_proxy) { QNetworkReply::NetworkError network_result = QNetworkReply::NetworkError::UnknownNetworkError; for (const auto& url : urls) { @@ -162,7 +165,7 @@ QNetworkReply::NetworkError NetworkFactory::downloadIcon(const QList>& urls, int timeout, QIcon& output, + const QList>& additional_headers, const QNetworkProxy& custom_proxy = QNetworkProxy::ProxyType::DefaultProxy); static NetworkResult performNetworkOperation(const QString& url, int timeout, const QByteArray& input_data, diff --git a/src/librssguard/services/feedly/feedlynetwork.cpp b/src/librssguard/services/feedly/feedlynetwork.cpp index f8b2e95a6..0fe87ea26 100644 --- a/src/librssguard/services/feedly/feedlynetwork.cpp +++ b/src/librssguard/services/feedly/feedlynetwork.cpp @@ -376,6 +376,7 @@ RootItem* FeedlyNetwork::decodeCollections(const QByteArray& json, bool obtain_i { fee_obj[QSL("logo")].toString(), true } }, timeout, icon, + {}, proxy); if (result == QNetworkReply::NetworkError::NoError && !icon.isNull()) { diff --git a/src/librssguard/services/greader/greadernetwork.cpp b/src/librssguard/services/greader/greadernetwork.cpp index c607fceb4..adb785f3e 100644 --- a/src/librssguard/services/greader/greadernetwork.cpp +++ b/src/librssguard/services/greader/greadernetwork.cpp @@ -784,6 +784,7 @@ RootItem* GreaderNetwork::decodeTagsSubscriptions(const QString& categories, con if (NetworkFactory::downloadIcon(icon_urls, 1000, icon, + {}, proxy) == QNetworkReply::NetworkError::NoError) { feed->setIcon(icon); } diff --git a/src/librssguard/services/standard/standardfeed.cpp b/src/librssguard/services/standard/standardfeed.cpp index 3786b8b97..49abf3f68 100644 --- a/src/librssguard/services/standard/standardfeed.cpp +++ b/src/librssguard/services/standard/standardfeed.cpp @@ -448,6 +448,7 @@ StandardFeed* StandardFeed::guessFeed(StandardFeed::SourceType source_type, if (NetworkFactory::downloadIcon(icon_possible_locations, DOWNLOAD_TIMEOUT, icon_data, + {}, custom_proxy) == QNetworkReply::NetworkError::NoError) { // Icon for feed was downloaded and is stored now in _icon_data. feed->setIcon(icon_data); diff --git a/src/librssguard/services/tt-rss/ttrssnetworkfactory.cpp b/src/librssguard/services/tt-rss/ttrssnetworkfactory.cpp index f32676a54..b10bda856 100644 --- a/src/librssguard/services/tt-rss/ttrssnetworkfactory.cpp +++ b/src/librssguard/services/tt-rss/ttrssnetworkfactory.cpp @@ -677,7 +677,10 @@ TtRssGetFeedsCategoriesResponse::TtRssGetFeedsCategoriesResponse(const QString& TtRssGetFeedsCategoriesResponse::~TtRssGetFeedsCategoriesResponse() = default; -RootItem* TtRssGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons, const QNetworkProxy& proxy, const QString& base_address) const { +RootItem* TtRssGetFeedsCategoriesResponse::feedsCategories(TtRssNetworkFactory* network, + bool obtain_icons, + const QNetworkProxy& proxy, + const QString& base_address) const { auto* parent = new RootItem(); // Chop the "api/" from the end of the address. @@ -740,9 +743,17 @@ RootItem* TtRssGetFeedsCategoriesResponse::feedsCategories(bool obtain_icons, co // Chop the "api/" suffix out and append QString full_icon_address = base_address + QL1C('/') + icon_path; QIcon icon; + QList> headers; + + if (network->authIsUsed()) { + headers << NetworkFactory::generateBasicAuthHeader(network->authUsername(), + network->authPassword()); + } + auto res = NetworkFactory::downloadIcon({ { full_icon_address, true } }, DOWNLOAD_TIMEOUT, icon, + headers, proxy); if (res == QNetworkReply::NoError) { diff --git a/src/librssguard/services/tt-rss/ttrssnetworkfactory.h b/src/librssguard/services/tt-rss/ttrssnetworkfactory.h index 95cf0e46b..cea35045d 100644 --- a/src/librssguard/services/tt-rss/ttrssnetworkfactory.h +++ b/src/librssguard/services/tt-rss/ttrssnetworkfactory.h @@ -48,6 +48,8 @@ class TtRssGetLabelsResponse : public TtRssResponse { QList labels() const; }; +class TtRssNetworkFactory; + class TtRssGetFeedsCategoriesResponse : public TtRssResponse { public: explicit TtRssGetFeedsCategoriesResponse(const QString& raw_content = QString()); @@ -56,7 +58,8 @@ class TtRssGetFeedsCategoriesResponse : public TtRssResponse { // Returns tree of feeds/categories. // Top-level root of the tree is not needed here. // Returned items do not have primary IDs assigned. - RootItem* feedsCategories(bool obtain_icons, const QNetworkProxy& proxy, const QString& base_address = QString()) const; + RootItem* feedsCategories(TtRssNetworkFactory* network, bool obtain_icons, + const QNetworkProxy& proxy, const QString& base_address = QString()) const; }; class ServiceRoot; diff --git a/src/librssguard/services/tt-rss/ttrssserviceroot.cpp b/src/librssguard/services/tt-rss/ttrssserviceroot.cpp index fd60e63ff..a15653822 100644 --- a/src/librssguard/services/tt-rss/ttrssserviceroot.cpp +++ b/src/librssguard/services/tt-rss/ttrssserviceroot.cpp @@ -275,7 +275,7 @@ RootItem* TtRssServiceRoot::obtainNewTreeForSyncIn() const { TtRssGetLabelsResponse labels = m_network->getLabels(networkProxy()); if (m_network->lastError() == QNetworkReply::NoError) { - auto* tree = feed_cats.feedsCategories(true, networkProxy(), m_network->url()); + auto* tree = feed_cats.feedsCategories(m_network, true, networkProxy(), m_network->url()); auto* lblroot = new LabelsNode(tree); lblroot->setChildItems(labels.labels());