mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-08-20 05:13:30 -07:00
commit
ad7b8a9bfa
4 changed files with 41 additions and 17 deletions
|
@ -2155,6 +2155,9 @@ bool Session::addTorrent_impl(CreateTorrentParams params, const MagnetUri &magne
|
||||||
|
|
||||||
try {
|
try {
|
||||||
handle.auto_managed(false);
|
handle.auto_managed(false);
|
||||||
|
// Preloaded torrent is in "Upload mode" so we need to disable it
|
||||||
|
// otherwise the torrent never be downloaded (until application restart)
|
||||||
|
handle.set_upload_mode(false);
|
||||||
handle.pause();
|
handle.pause();
|
||||||
}
|
}
|
||||||
catch (std::exception &) {}
|
catch (std::exception &) {}
|
||||||
|
|
|
@ -585,6 +585,7 @@ void Parser::parse_impl(const QByteArray &feedData)
|
||||||
|
|
||||||
emit finished(m_result);
|
emit finished(m_result);
|
||||||
m_result.articles.clear(); // clear articles only
|
m_result.articles.clear(); // clear articles only
|
||||||
|
m_articleIDs.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Parser::parseRssArticle(QXmlStreamReader &xml)
|
void Parser::parseRssArticle(QXmlStreamReader &xml)
|
||||||
|
@ -637,7 +638,7 @@ void Parser::parseRssArticle(QXmlStreamReader &xml)
|
||||||
if (article[Article::KeyTorrentURL].toString().isEmpty())
|
if (article[Article::KeyTorrentURL].toString().isEmpty())
|
||||||
article[Article::KeyTorrentURL] = altTorrentUrl;
|
article[Article::KeyTorrentURL] = altTorrentUrl;
|
||||||
|
|
||||||
m_result.articles.prepend(article);
|
addArticle(article);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Parser::parseRSSChannel(QXmlStreamReader &xml)
|
void Parser::parseRSSChannel(QXmlStreamReader &xml)
|
||||||
|
@ -732,7 +733,7 @@ void Parser::parseAtomArticle(QXmlStreamReader &xml)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m_result.articles.prepend(article);
|
addArticle(article);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Parser::parseAtomChannel(QXmlStreamReader &xml)
|
void Parser::parseAtomChannel(QXmlStreamReader &xml)
|
||||||
|
@ -762,3 +763,34 @@ void Parser::parseAtomChannel(QXmlStreamReader &xml)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Parser::addArticle(QVariantHash article)
|
||||||
|
{
|
||||||
|
QVariant &torrentURL = article[Article::KeyTorrentURL];
|
||||||
|
if (torrentURL.toString().isEmpty())
|
||||||
|
torrentURL = article[Article::KeyLink];
|
||||||
|
|
||||||
|
// If item does not have an ID, fall back to some other identifier.
|
||||||
|
QVariant &localId = article[Article::KeyId];
|
||||||
|
if (localId.toString().isEmpty())
|
||||||
|
localId = article.value(Article::KeyTorrentURL);
|
||||||
|
if (localId.toString().isEmpty())
|
||||||
|
localId = article.value(Article::KeyTitle);
|
||||||
|
|
||||||
|
if (localId.toString().isEmpty()) {
|
||||||
|
// The article could not be uniquely identified
|
||||||
|
// since it has no appropriate data.
|
||||||
|
// Just ignore it.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_articleIDs.contains(localId.toString())) {
|
||||||
|
// The article could not be uniquely identified
|
||||||
|
// since the Feed has duplicate identifiers.
|
||||||
|
// Just ignore it.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_articleIDs.insert(localId.toString());
|
||||||
|
m_result.articles.prepend(article);
|
||||||
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
|
|
||||||
#include <QList>
|
#include <QList>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QSet>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QVariantHash>
|
#include <QVariantHash>
|
||||||
|
|
||||||
|
@ -65,9 +66,11 @@ namespace RSS
|
||||||
void parseRSSChannel(QXmlStreamReader &xml);
|
void parseRSSChannel(QXmlStreamReader &xml);
|
||||||
void parseAtomArticle(QXmlStreamReader &xml);
|
void parseAtomArticle(QXmlStreamReader &xml);
|
||||||
void parseAtomChannel(QXmlStreamReader &xml);
|
void parseAtomChannel(QXmlStreamReader &xml);
|
||||||
|
void addArticle(QVariantHash article);
|
||||||
|
|
||||||
QString m_baseUrl;
|
QString m_baseUrl;
|
||||||
ParsingResult m_result;
|
ParsingResult m_result;
|
||||||
|
QSet<QString> m_articleIDs;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -419,24 +419,10 @@ int Feed::updateArticles(const QList<QVariantHash> &loadedArticles)
|
||||||
QVector<QVariantHash> newArticles;
|
QVector<QVariantHash> newArticles;
|
||||||
newArticles.reserve(loadedArticles.size());
|
newArticles.reserve(loadedArticles.size());
|
||||||
for (QVariantHash article : loadedArticles) {
|
for (QVariantHash article : loadedArticles) {
|
||||||
QVariant &torrentURL = article[Article::KeyTorrentURL];
|
|
||||||
if (torrentURL.toString().isEmpty())
|
|
||||||
torrentURL = article[Article::KeyLink];
|
|
||||||
|
|
||||||
// If item does not have an ID, fall back to some other identifier.
|
|
||||||
QVariant &localId = article[Article::KeyId];
|
|
||||||
if (localId.toString().isEmpty())
|
|
||||||
localId = article.value(Article::KeyTorrentURL);
|
|
||||||
if (localId.toString().isEmpty())
|
|
||||||
localId = article.value(Article::KeyTitle);
|
|
||||||
|
|
||||||
if (localId.toString().isEmpty())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// If article has no publication date we use feed update time as a fallback.
|
// If article has no publication date we use feed update time as a fallback.
|
||||||
// To prevent processing of "out-of-limit" articles we must not assign dates
|
// To prevent processing of "out-of-limit" articles we must not assign dates
|
||||||
// that are earlier than the dates of existing articles.
|
// that are earlier than the dates of existing articles.
|
||||||
const Article *existingArticle = articleByGUID(localId.toString());
|
const Article *existingArticle = articleByGUID(article[Article::KeyId].toString());
|
||||||
if (existingArticle) {
|
if (existingArticle) {
|
||||||
dummyPubDate = existingArticle->date().addMSecs(-1);
|
dummyPubDate = existingArticle->date().addMSecs(-1);
|
||||||
continue;
|
continue;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue