couple of fixes for #1133 and working on other parsing things

This commit is contained in:
Martin Rotter 2023-10-16 08:56:23 +02:00
parent 9792895e0b
commit fe72cd1564
4 changed files with 44 additions and 9 deletions

View File

@ -258,10 +258,13 @@ QStringList TextFactory::tokenizeProcessArguments(const QString& command) {
case TokenState::InsideArgSpaced: { case TokenState::InsideArgSpaced: {
switch (chr.unicode()) { switch (chr.unicode()) {
case u'\\': // NOTE: Probably disable escaping in spaced arguments to provide simpler UX?
// We found escaped! /*
state = TokenState::EscapedFromSpaced; case u'\\':
continue; // We found escaped!
state = TokenState::EscapedFromSpaced;
continue;
*/
case u' ': case u' ':
// We need to end this argument. // We need to end this argument.

View File

@ -41,6 +41,10 @@ FeedParser::FeedParser(QString data, bool is_xml)
FeedParser::~FeedParser() {} FeedParser::~FeedParser() {}
QStringList FeedParser::discoverFeeds(const QUrl& url) const {
return {};
}
QString FeedParser::xmlMessageRawContents(const QDomElement& msg_element) const { QString FeedParser::xmlMessageRawContents(const QDomElement& msg_element) const {
QString raw_contents; QString raw_contents;
QTextStream str(&raw_contents); QTextStream str(&raw_contents);

View File

@ -20,8 +20,14 @@ class FeedParser {
explicit FeedParser(QString data, bool is_xml = true); explicit FeedParser(QString data, bool is_xml = true);
virtual ~FeedParser(); virtual ~FeedParser();
// Returns list of absolute URLs of discovered feeds from provided base URL.
virtual QStringList discoverFeeds(const QUrl& url) const;
// Guesses feed.
virtual QPair<StandardFeed*, QList<IconLocation>> guessFeed(const QByteArray& content, virtual QPair<StandardFeed*, QList<IconLocation>> guessFeed(const QByteArray& content,
const QString& content_type) const = 0; const QString& content_type) const = 0;
// Returns list of all messages from the feed.
virtual QList<Message> messages(); virtual QList<Message> messages();
protected: protected:

View File

@ -122,8 +122,8 @@ bool FeedsImportExportModel::exportToOMPL20(QByteArray& result, bool export_icon
} }
case RootItem::Kind::Feed: { case RootItem::Kind::Feed: {
auto* child_feed = dynamic_cast<StandardFeed*>(child_item); auto* child_feed = qobject_cast<StandardFeed*>(child_item);
QDomElement outline_feed = opml_document.createElement("outline"); QDomElement outline_feed = opml_document.createElement(QSL("outline"));
outline_feed.setAttribute(QSL("type"), QSL("rss")); outline_feed.setAttribute(QSL("type"), QSL("rss"));
outline_feed.setAttribute(QSL("text"), child_feed->title()); outline_feed.setAttribute(QSL("text"), child_feed->title());
@ -157,6 +157,14 @@ bool FeedsImportExportModel::exportToOMPL20(QByteArray& result, bool export_icon
outline_feed.setAttribute(QSL("version"), QSL("JSON")); outline_feed.setAttribute(QSL("version"), QSL("JSON"));
break; break;
case StandardFeed::Type::Sitemap:
outline_feed.setAttribute(QSL("version"), QSL("Sitemap"));
break;
case StandardFeed::Type::SitemapIndex:
outline_feed.setAttribute(QSL("version"), QSL("SitemapIndex"));
break;
default: default:
break; break;
} }
@ -181,17 +189,27 @@ bool FeedsImportExportModel::produceFeed(const FeedLookup& feed_lookup) {
try { try {
if (feed_lookup.fetch_metadata_online) { if (feed_lookup.fetch_metadata_online) {
new_feed = StandardFeed::guessFeed(StandardFeed::SourceType::Url, StandardFeed::SourceType source_type =
feed_lookup.custom_data.contains(QSL("sourceType"))
? feed_lookup.custom_data[QSL("sourceType")].value<StandardFeed::SourceType>()
: StandardFeed::SourceType::Url;
QString pp_script = !feed_lookup.custom_data[QSL("postProcessScript")].toString().isEmpty()
? feed_lookup.custom_data[QSL("postProcessScript")].toString()
: feed_lookup.post_process_script;
new_feed = StandardFeed::guessFeed(source_type,
feed_lookup.url, feed_lookup.url,
feed_lookup.post_process_script, pp_script,
NetworkFactory::NetworkAuthentication::NoAuthentication, NetworkFactory::NetworkAuthentication::NoAuthentication,
!feed_lookup.do_not_fetch_icons, !feed_lookup.do_not_fetch_icons,
{}, {},
{}, {},
feed_lookup.custom_proxy); feed_lookup.custom_proxy);
new_feed->setSourceType(source_type);
new_feed->setSource(feed_lookup.url); new_feed->setSource(feed_lookup.url);
new_feed->setPostProcessScript(feed_lookup.post_process_script); new_feed->setPostProcessScript(pp_script);
if (feed_lookup.do_not_fetch_titles) { if (feed_lookup.do_not_fetch_titles) {
QString old_title = feed_lookup.custom_data[QSL("title")].toString(); QString old_title = feed_lookup.custom_data[QSL("title")].toString();
@ -216,6 +234,10 @@ bool FeedsImportExportModel::produceFeed(const FeedLookup& feed_lookup) {
new_feed = new StandardFeed(); new_feed = new StandardFeed();
if (feed_lookup.custom_data.isEmpty()) { if (feed_lookup.custom_data.isEmpty()) {
// We assume these are "best-guess" defaults.
new_feed->setSourceType(StandardFeed::SourceType::Url);
new_feed->setType(StandardFeed::Type::Rss2X);
new_feed->setSource(feed_lookup.url); new_feed->setSource(feed_lookup.url);
new_feed->setTitle(feed_lookup.url); new_feed->setTitle(feed_lookup.url);
new_feed->setIcon(qApp->icons()->fromTheme(QSL("application-rss+xml"))); new_feed->setIcon(qApp->icons()->fromTheme(QSL("application-rss+xml")));