mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2024-12-16 13:11:36 +03:00
RSS parse torrent episodes like 1x01 as well as S01E01. Closes #2749.
--HG-- branch : magao-dev
This commit is contained in:
parent
64f9cbbf54
commit
96c1187f47
2 changed files with 18 additions and 6 deletions
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue