Browse Source

RSS parse torrent episodes like 1x01 as well as S01E01. Closes #2749.

--HG--
branch : magao-dev
adaptive-webui-19844
Tim Delaney 8 years ago
parent
commit
96c1187f47
  1. 22
      src/base/rss/rssdownloadrule.cpp
  2. 2
      src/gui/rss/automatedrssdownloader.cpp

22
src/base/rss/rssdownloadrule.cpp

@ -96,8 +96,6 @@ bool DownloadRule::matches(const QString &articleTitle) const
QString s = f.cap(1); QString s = f.cap(1);
QStringList eps = f.cap(2).split(";"); QStringList eps = f.cap(2).split(";");
QString expStr;
expStr += "s0?" + s + "[ -_\\.]?" + "e0?";
foreach (const QString &epStr, eps) { foreach (const QString &epStr, eps) {
if (epStr.isEmpty()) if (epStr.isEmpty())
@ -110,14 +108,21 @@ bool DownloadRule::matches(const QString &articleTitle) const
ep = ep.right(ep.size() - 1); ep = ep.right(ep.size() - 1);
if (ep.indexOf('-') != -1) { // Range detected if (ep.indexOf('-') != -1) { // Range detected
QString partialPattern = "s0?" + s + "[ -_\\.]?" + "e(0?\\d{1,4})"; QString partialPattern1 = "\\bs0?" + s + "[ -_\\.]?" + "e(0?\\d{1,4})(?:\\D|\\b)";
QRegExp reg(partialPattern, Qt::CaseInsensitive); QString partialPattern2 = "\\b" + s + "x" + "(0?\\d{1,4})(?:\\D|\\b)";
QRegExp reg(partialPattern1, Qt::CaseInsensitive);
if (ep.endsWith('-')) { // Infinite range if (ep.endsWith('-')) { // Infinite range
int epOurs = ep.left(ep.size() - 1).toInt(); int epOurs = ep.left(ep.size() - 1).toInt();
// Extract partial match from article and compare as digits // Extract partial match from article and compare as digits
pos = reg.indexIn(articleTitle); pos = reg.indexIn(articleTitle);
if (pos == -1) {
reg = QRegExp(partialPattern2, Qt::CaseInsensitive);
pos = reg.indexIn(articleTitle);
}
if (pos != -1) { if (pos != -1) {
int epTheirs = reg.cap(1).toInt(); int epTheirs = reg.cap(1).toInt();
if (epTheirs >= epOurs) { if (epTheirs >= epOurs) {
@ -138,6 +143,12 @@ bool DownloadRule::matches(const QString &articleTitle) const
// Extract partial match from article and compare as digits // Extract partial match from article and compare as digits
pos = reg.indexIn(articleTitle); pos = reg.indexIn(articleTitle);
if (pos == -1) {
reg = QRegExp(partialPattern2, Qt::CaseInsensitive);
pos = reg.indexIn(articleTitle);
}
if (pos != -1) { if (pos != -1) {
int epTheirs = reg.cap(1).toInt(); int epTheirs = reg.cap(1).toInt();
if ((epOursFirst <= epTheirs) && (epOursLast >= epTheirs)) { if ((epOursFirst <= epTheirs) && (epOursLast >= epTheirs)) {
@ -149,7 +160,8 @@ bool DownloadRule::matches(const QString &articleTitle) const
} }
} }
else { // Single number else { // Single number
QRegExp reg(expStr + ep + "\\D", Qt::CaseInsensitive); QString expStr("\\b(?:s0?" + s + "[ -_\\.]?" + "e0?" + ep + "|" + s + "x" + "0?" + ep + ")(?:\\D|\\b)");
QRegExp reg(expStr, Qt::CaseInsensitive);
if (reg.indexIn(articleTitle) != -1) { if (reg.indexIn(articleTitle) != -1) {
qDebug() << "Matched episode:" << ep; qDebug() << "Matched episode:" << ep;
qDebug() << "Matched article:" << articleTitle; qDebug() << "Matched article:" << articleTitle;

2
src/gui/rss/automatedrssdownloader.cpp

@ -71,7 +71,7 @@ AutomatedRssDownloader::AutomatedRssDownloader(const QWeakPointer<Rss::Manager>
Q_ASSERT(ok); Q_ASSERT(ok);
m_ruleList = manager.toStrongRef()->downloadRules(); m_ruleList = manager.toStrongRef()->downloadRules();
m_editableRuleList = new Rss::DownloadRuleList; // Read rule list from disk m_editableRuleList = new Rss::DownloadRuleList; // Read rule list from disk
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}", m_episodeRegex = new QRegExp("^(^\\d{1,4}x(\\d{1,4}(-(\\d{1,4})?)?;){1,}){1,1}",
Qt::CaseInsensitive); Qt::CaseInsensitive);
m_episodeValidator = new QRegExpValidator(*m_episodeRegex, ui->lineEFilter); m_episodeValidator = new QRegExpValidator(*m_episodeRegex, ui->lineEFilter);
ui->lineEFilter->setValidator(m_episodeValidator); ui->lineEFilter->setValidator(m_episodeValidator);

Loading…
Cancel
Save