From 2244b7cb6642674c7ac3fba5d6303056c9d118e0 Mon Sep 17 00:00:00 2001 From: Tim Delaney Date: Sat, 31 Dec 2016 18:01:22 +1100 Subject: [PATCH] RSS episode filter refactoring and logging (prep for later commits). --HG-- branch : magao-dev --- src/base/rss/rssdownloadrule.cpp | 64 +++++++++++++++++++------- src/base/rss/rssdownloadrulelist.cpp | 1 + src/gui/rss/automatedrssdownloader.cpp | 8 ++-- src/gui/rss/automatedrssdownloader.h | 1 + 4 files changed, 54 insertions(+), 20 deletions(-) diff --git a/src/base/rss/rssdownloadrule.cpp b/src/base/rss/rssdownloadrule.cpp index 62a163ca8..288a7f1fc 100644 --- a/src/base/rss/rssdownloadrule.cpp +++ b/src/base/rss/rssdownloadrule.cpp @@ -50,26 +50,45 @@ DownloadRule::DownloadRule() bool DownloadRule::matches(const QString &articleTitle) const { - foreach (const QString &token, m_mustContain) { - if (!token.isEmpty()) { - QRegExp reg(token, Qt::CaseInsensitive, m_useRegex ? QRegExp::RegExp : QRegExp::Wildcard); - if (reg.indexIn(articleTitle) < 0) - return false; + if (!m_mustContain.empty()) { + bool logged = false; + + foreach (const QString &token, m_mustContain) { + if (!token.isEmpty()) { + if (!logged) { + qDebug() << "Checking matching expressions:" << m_mustContain.join("|"); + logged = true; + } + + QRegExp reg(token, Qt::CaseInsensitive, m_useRegex ? QRegExp::RegExp : QRegExp::Wildcard); + if (reg.indexIn(articleTitle) < 0) + return false; + } } } - qDebug("Checking not matching tokens"); - // Checking not matching - foreach (const QString &token, m_mustNotContain) { - if (!token.isEmpty()) { - QRegExp reg(token, Qt::CaseInsensitive, m_useRegex ? QRegExp::RegExp : QRegExp::Wildcard); - if (reg.indexIn(articleTitle) > -1) - return false; + + if (!m_mustNotContain.empty()) { + bool logged = false; + + foreach (const QString &token, m_mustNotContain) { + if (!token.isEmpty()) { + if (!logged) { + qDebug() << "Checking not matching expressions:" << m_mustNotContain.join("|"); + logged = true; + } + + QRegExp reg(token, Qt::CaseInsensitive, m_useRegex ? QRegExp::RegExp : QRegExp::Wildcard); + if (reg.indexIn(articleTitle) > -1) + return false; + } } } + if (!m_episodeFilter.isEmpty()) { - qDebug("Checking episode filter"); + qDebug() << "Checking episode filter:" << m_episodeFilter; QRegExp f("(^\\d{1,4})x(.*;$)"); int pos = f.indexIn(m_episodeFilter); + if (pos < 0) return false; @@ -93,8 +112,11 @@ bool DownloadRule::matches(const QString &articleTitle) const pos = reg.indexIn(articleTitle); if (pos != -1) { int epTheirs = reg.cap(1).toInt(); - if (epTheirs >= epOurs) + if (epTheirs >= epOurs) { + qDebug() << "Matched episode:" << ep; + qDebug() << "Matched article:" << articleTitle; return true; + } } } else { // Normal range @@ -110,19 +132,28 @@ bool DownloadRule::matches(const QString &articleTitle) const pos = reg.indexIn(articleTitle); if (pos != -1) { int epTheirs = reg.cap(1).toInt(); - if ((epOursFirst <= epTheirs) && (epOursLast >= epTheirs)) + if ((epOursFirst <= epTheirs) && (epOursLast >= epTheirs)) { + qDebug() << "Matched episode:" << ep; + qDebug() << "Matched article:" << articleTitle; return true; + } } } } else { // Single number QRegExp reg(expStr + ep + "\\D", Qt::CaseInsensitive); - if (reg.indexIn(articleTitle) != -1) + if (reg.indexIn(articleTitle) != -1) { + qDebug() << "Matched episode:" << ep; + qDebug() << "Matched article:" << articleTitle; return true; + } } } + return false; } + + qDebug() << "Matched article:" << articleTitle; return true; } @@ -302,6 +333,7 @@ QStringList DownloadRule::findMatchingArticles(const FeedPtr &feed) const ArticleHash::ConstIterator artItend = feedArticles.end(); for (; artIt != artItend; ++artIt) { const QString title = artIt.value()->title(); + qDebug() << "Matching article:" << title; if (matches(title)) ret << title; } diff --git a/src/base/rss/rssdownloadrulelist.cpp b/src/base/rss/rssdownloadrulelist.cpp index 55d52b2d8..49f16ea92 100644 --- a/src/base/rss/rssdownloadrulelist.cpp +++ b/src/base/rss/rssdownloadrulelist.cpp @@ -46,6 +46,7 @@ DownloadRuleList::DownloadRuleList() DownloadRulePtr DownloadRuleList::findMatchingRule(const QString &feedUrl, const QString &articleTitle) const { Q_ASSERT(Preferences::instance()->isRssDownloadingEnabled()); + qDebug() << "Matching article:" << articleTitle; QStringList ruleNames = m_feedRules.value(feedUrl); foreach (const QString &rule_name, ruleNames) { DownloadRulePtr rule = m_rules[rule_name]; diff --git a/src/gui/rss/automatedrssdownloader.cpp b/src/gui/rss/automatedrssdownloader.cpp index 3abc02bbf..cd253f849 100644 --- a/src/gui/rss/automatedrssdownloader.cpp +++ b/src/gui/rss/automatedrssdownloader.cpp @@ -71,10 +71,9 @@ AutomatedRssDownloader::AutomatedRssDownloader(const QWeakPointer Q_ASSERT(ok); m_ruleList = manager.toStrongRef()->downloadRules(); m_editableRuleList = new Rss::DownloadRuleList; // Read rule list from disk - m_episodeValidator = new QRegExpValidator( - QRegExp("^(^[1-9]{1,1}\\d{0,3}x([1-9]{1,1}\\d{0,3}(-([1-9]{1,1}\\d{0,3})?)?;){1,}){1,1}", - Qt::CaseInsensitive), - ui->lineEFilter); + m_episodeRegex = new QRegExp("^(^[1-9]{1,1}\\d{0,3}x([1-9]{1,1}\\d{0,3}(-([1-9]{1,1}\\d{0,3})?)?;){1,}){1,1}", + Qt::CaseInsensitive); + m_episodeValidator = new QRegExpValidator(*m_episodeRegex, ui->lineEFilter); ui->lineEFilter->setValidator(m_episodeValidator); QString tip = "

" + tr("Matches articles based on episode filter.") + "

" + tr("Example: ") + "1x2;8-15;5;30-;" + tr(" will match 2, 5, 8 through 15, 30 and onward episodes of season one", "example X will match") + "

"; @@ -134,6 +133,7 @@ AutomatedRssDownloader::~AutomatedRssDownloader() delete ui; delete m_editableRuleList; delete m_episodeValidator; + delete m_episodeRegex; } void AutomatedRssDownloader::loadSettings() diff --git a/src/gui/rss/automatedrssdownloader.h b/src/gui/rss/automatedrssdownloader.h index 36cfe5b67..54f474048 100644 --- a/src/gui/rss/automatedrssdownloader.h +++ b/src/gui/rss/automatedrssdownloader.h @@ -99,6 +99,7 @@ private: QListWidgetItem *m_editedRule; Rss::DownloadRuleList *m_ruleList; Rss::DownloadRuleList *m_editableRuleList; + QRegExp *m_episodeRegex; QRegExpValidator *m_episodeValidator; QShortcut *editHotkey; QShortcut *deleteHotkey;