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

--HG--
branch : magao-dev
This commit is contained in:
Tim Delaney 2016-11-06 15:26:48 +11:00
parent 64f9cbbf54
commit 96c1187f47
2 changed files with 18 additions and 6 deletions

View file

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

View file

@ -71,7 +71,7 @@ AutomatedRssDownloader::AutomatedRssDownloader(const QWeakPointer<Rss::Manager>
Q_ASSERT(ok);
m_ruleList = manager.toStrongRef()->downloadRules();
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);
m_episodeValidator = new QRegExpValidator(*m_episodeRegex, ui->lineEFilter);
ui->lineEFilter->setValidator(m_episodeValidator);