From 5238c7e41713147e1b0358ddaaeb62f76791df63 Mon Sep 17 00:00:00 2001 From: Martin Rotter Date: Thu, 19 Oct 2023 09:39:39 +0200 Subject: [PATCH] save work --- .../standard/gui/formdiscoverfeeds.cpp | 18 +++++++++++++++++- .../services/standard/gui/formdiscoverfeeds.h | 2 ++ .../standard/parsers/sitemapparser.cpp | 14 +++++++++++--- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/librssguard/services/standard/gui/formdiscoverfeeds.cpp b/src/librssguard/services/standard/gui/formdiscoverfeeds.cpp index 326b5573c..f7fd8ec64 100644 --- a/src/librssguard/services/standard/gui/formdiscoverfeeds.cpp +++ b/src/librssguard/services/standard/gui/formdiscoverfeeds.cpp @@ -6,6 +6,7 @@ #include "gui/guiutilities.h" #include "miscellaneous/application.h" #include "miscellaneous/iconfactory.h" +#include "miscellaneous/settings.h" #include "services/abstract/category.h" #include "services/abstract/serviceroot.h" #include "services/standard/definitions.h" @@ -96,11 +97,26 @@ FormDiscoverFeeds::~FormDiscoverFeeds() { qDeleteAll(m_parsers); } +QList FormDiscoverFeeds::discoverFeedsWithParser(const FeedParser* parser, const QString& url) { + auto feeds = parser->discoverFeeds(m_serviceRoot, url); + QPixmap icon; + int timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(); + + if (NetworkFactory::downloadIcon({{url, false}}, timeout, icon, {}, m_serviceRoot->networkProxy()) == + QNetworkReply::NetworkError::NoError) { + for (Feed* feed : feeds) { + feed->setIcon(icon); + } + } + + return feeds; +} + void FormDiscoverFeeds::discoverFeeds() { QString url = m_ui.m_txtUrl->lineEdit()->text(); std::function(const FeedParser*)> func = [=](const FeedParser* parser) -> QList { - return parser->discoverFeeds(m_serviceRoot, url); + return discoverFeedsWithParser(parser, url); }; std::function(QList&, const QList&)> reducer = diff --git a/src/librssguard/services/standard/gui/formdiscoverfeeds.h b/src/librssguard/services/standard/gui/formdiscoverfeeds.h index 4d28b1beb..6615e4a06 100644 --- a/src/librssguard/services/standard/gui/formdiscoverfeeds.h +++ b/src/librssguard/services/standard/gui/formdiscoverfeeds.h @@ -57,6 +57,8 @@ class FormDiscoverFeeds : public QDialog { void importSelectedFeeds(); private: + QList discoverFeedsWithParser(const FeedParser* parser, const QString& url); + void userWantsAdvanced(); void loadDiscoveredFeeds(const QList& feeds); void loadCategories(const QList& categories, RootItem* root_item); diff --git a/src/librssguard/services/standard/parsers/sitemapparser.cpp b/src/librssguard/services/standard/parsers/sitemapparser.cpp index 4d3ec78b8..6b136752e 100644 --- a/src/librssguard/services/standard/parsers/sitemapparser.cpp +++ b/src/librssguard/services/standard/parsers/sitemapparser.cpp @@ -24,6 +24,8 @@ SitemapParser::~SitemapParser() {} QList SitemapParser::discoverFeeds(ServiceRoot* root, const QUrl& url) const { QHash feeds; QStringList to_process_sitemaps; + int sitemap_index_limit = 2; + int timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(); // 1. Process "URL/robots.txt" file. // 2. Process "URLHOST/robots.txt" file. @@ -42,7 +44,6 @@ QList SitemapParser::discoverFeeds(ServiceRoot* root, const QUrl& for (const QString& robots_url : to_process_robots) { // Download URL. - int timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(); QByteArray data; auto res = NetworkFactory::performNetworkOperation(robots_url, timeout, @@ -92,7 +93,6 @@ QList SitemapParser::discoverFeeds(ServiceRoot* root, const QUrl& } // Download URL. - int timeout = qApp->settings()->value(GROUP(Feeds), SETTING(Feeds::UpdateTimeout)).toInt(); QByteArray data; auto res = NetworkFactory::performNetworkOperation(my_url, timeout, @@ -111,11 +111,15 @@ QList SitemapParser::discoverFeeds(ServiceRoot* root, const QUrl& auto guessed_feed = guessFeed(data, res.m_contentType); guessed_feed.first->setSource(my_url); + guessed_feed.first->setTitle(my_url); + feeds.insert(my_url, guessed_feed.first); } catch (const FeedRecognizedButFailedException& ex) { // This is index. - to_process_sitemaps.append(ex.arbitraryData().toStringList()); + if (sitemap_index_limit-- > 0) { + to_process_sitemaps.append(ex.arbitraryData().toStringList()); + } } catch (const ApplicationException&) { qDebugNN << LOGSEC_CORE << QUOTE_W_SPACE(my_url) << "is not a direct sitemap file."; @@ -226,6 +230,10 @@ QString SitemapParser::xmlMessageTitle(const QDomElement& msg_element) const { str_title = msg_element.elementsByTagNameNS(sitemapVideoNamespace(), QSL("title")).at(0).toElement().text(); } + if (str_title.isEmpty()) { + str_title = msg_element.elementsByTagNameNS(sitemapImageNamespace(), QSL("title")).at(0).toElement().text(); + } + return str_title; }