mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2026-01-10 17:35:00 -06:00
Several RSS fixes:
- Fix possible redownload of torrents marked as read (Closes #927495) - Properly remove RSS feed settings/history upon feed removal - Fix possible crash in RSS Downloader dialog in debug mode
This commit is contained in:
@@ -471,8 +471,7 @@ void AutomatedRssDownloader::updateMatchingArticles()
|
|||||||
if(!rule.isValid()) continue;
|
if(!rule.isValid()) continue;
|
||||||
foreach(const QString &feed_url, rule.rssFeeds()) {
|
foreach(const QString &feed_url, rule.rssFeeds()) {
|
||||||
qDebug() << Q_FUNC_INFO << feed_url;
|
qDebug() << Q_FUNC_INFO << feed_url;
|
||||||
Q_ASSERT(all_feeds.contains(feed_url));
|
if(!all_feeds.contains(feed_url)) continue; // Feed was removed
|
||||||
if(!all_feeds.contains(feed_url)) continue;
|
|
||||||
const RssFeed *feed = all_feeds.value(feed_url);
|
const RssFeed *feed = all_feeds.value(feed_url);
|
||||||
Q_ASSERT(feed);
|
Q_ASSERT(feed);
|
||||||
if(!feed) continue;
|
if(!feed) continue;
|
||||||
|
|||||||
@@ -55,15 +55,14 @@ RssFeed::RssFeed(RssFolder* parent, const QString &url): m_parent(parent), m_ico
|
|||||||
}
|
}
|
||||||
|
|
||||||
RssFeed::~RssFeed(){
|
RssFeed::~RssFeed(){
|
||||||
// Saving current articles to hard disk
|
|
||||||
if(m_refreshed) {
|
|
||||||
saveItemsToDisk();
|
|
||||||
}
|
|
||||||
if(!m_icon.startsWith(":/") && QFile::exists(m_icon))
|
if(!m_icon.startsWith(":/") && QFile::exists(m_icon))
|
||||||
misc::safeRemove(m_icon);
|
misc::safeRemove(m_icon);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RssFeed::saveItemsToDisk() {
|
void RssFeed::saveItemsToDisk() {
|
||||||
|
qDebug() << Q_FUNC_INFO << m_url;
|
||||||
|
if (!m_refreshed)
|
||||||
|
return;
|
||||||
QIniSettings qBTRSS("qBittorrent", "qBittorrent-rss");
|
QIniSettings qBTRSS("qBittorrent", "qBittorrent-rss");
|
||||||
QVariantList old_items;
|
QVariantList old_items;
|
||||||
foreach(const RssArticle &item, m_articles.values()) {
|
foreach(const RssArticle &item, m_articles.values()) {
|
||||||
@@ -105,6 +104,7 @@ void RssFeed::refresh() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void RssFeed::removeAllSettings() {
|
void RssFeed::removeAllSettings() {
|
||||||
|
qDebug() << "Removing all settings / history for feed: " << m_url;
|
||||||
QIniSettings qBTRSS("qBittorrent", "qBittorrent-rss");
|
QIniSettings qBTRSS("qBittorrent", "qBittorrent-rss");
|
||||||
QHash<QString, QVariant> feeds_w_downloader = qBTRSS.value("downloader_on", QHash<QString, QVariant>()).toHash();
|
QHash<QString, QVariant> feeds_w_downloader = qBTRSS.value("downloader_on", QHash<QString, QVariant>()).toHash();
|
||||||
if (feeds_w_downloader.contains(m_url)) {
|
if (feeds_w_downloader.contains(m_url)) {
|
||||||
@@ -283,13 +283,13 @@ bool RssFeed::parseRSS(QIODevice* device) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure we limit the number of articles
|
||||||
|
resizeList();
|
||||||
|
|
||||||
// RSS Feed Downloader
|
// RSS Feed Downloader
|
||||||
if(RssSettings().isRssDownloadingEnabled())
|
if(RssSettings().isRssDownloadingEnabled())
|
||||||
downloadMatchingArticleTorrents();
|
downloadMatchingArticleTorrents();
|
||||||
|
|
||||||
// Make sure we limit the number of articles
|
|
||||||
resizeList();
|
|
||||||
|
|
||||||
// Save items to disk (for safety)
|
// Save items to disk (for safety)
|
||||||
saveItemsToDisk();
|
saveItemsToDisk();
|
||||||
|
|
||||||
|
|||||||
@@ -48,7 +48,8 @@ public:
|
|||||||
FileType type() const;
|
FileType type() const;
|
||||||
void refresh();
|
void refresh();
|
||||||
QString id() const { return m_url; }
|
QString id() const { return m_url; }
|
||||||
void removeAllSettings();
|
virtual void removeAllSettings();
|
||||||
|
virtual void saveItemsToDisk();
|
||||||
bool itemAlreadyExists(const QString &hash) const;
|
bool itemAlreadyExists(const QString &hash) const;
|
||||||
void setLoading(bool val);
|
void setLoading(bool val);
|
||||||
bool isLoading() const;
|
bool isLoading() const;
|
||||||
@@ -77,7 +78,6 @@ private:
|
|||||||
bool parseXmlFile(const QString &file_path);
|
bool parseXmlFile(const QString &file_path);
|
||||||
void downloadMatchingArticleTorrents();
|
void downloadMatchingArticleTorrents();
|
||||||
QString iconUrl() const;
|
QString iconUrl() const;
|
||||||
void saveItemsToDisk();
|
|
||||||
void loadItemsFromDisk();
|
void loadItemsFromDisk();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ public:
|
|||||||
virtual void setParent(RssFolder* parent) = 0;
|
virtual void setParent(RssFolder* parent) = 0;
|
||||||
virtual void refresh() = 0;
|
virtual void refresh() = 0;
|
||||||
virtual void removeAllSettings() = 0;
|
virtual void removeAllSettings() = 0;
|
||||||
|
virtual void saveItemsToDisk() = 0;
|
||||||
virtual const QList<RssArticle> articleList() const = 0;
|
virtual const QList<RssArticle> articleList() const = 0;
|
||||||
virtual const QList<RssArticle> unreadArticleList() const = 0;
|
virtual const QList<RssArticle> unreadArticleList() const = 0;
|
||||||
QStringList pathHierarchy() const;
|
QStringList pathHierarchy() const;
|
||||||
|
|||||||
@@ -196,6 +196,13 @@ void RssFolder::removeAllSettings() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void RssFolder::saveItemsToDisk()
|
||||||
|
{
|
||||||
|
foreach(IRssFile* child, m_children.values()) {
|
||||||
|
child->saveItemsToDisk();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QString RssFolder::id() const {
|
QString RssFolder::id() const {
|
||||||
return m_name;
|
return m_name;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,8 @@ public:
|
|||||||
bool hasChild(const QString &childId);
|
bool hasChild(const QString &childId);
|
||||||
const QList<RssArticle> articleList() const;
|
const QList<RssArticle> articleList() const;
|
||||||
const QList<RssArticle> unreadArticleList() const;
|
const QList<RssArticle> unreadArticleList() const;
|
||||||
void removeAllSettings();
|
virtual void removeAllSettings();
|
||||||
|
virtual void saveItemsToDisk();
|
||||||
void removeAllItems();
|
void removeAllItems();
|
||||||
void renameChildFolder(const QString &old_name, const QString &new_name);
|
void renameChildFolder(const QString &old_name, const QString &new_name);
|
||||||
IRssFile *takeChild(const QString &childId);
|
IRssFile *takeChild(const QString &childId);
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ RssManager::~RssManager(){
|
|||||||
m_refreshTimer.stop();
|
m_refreshTimer.stop();
|
||||||
delete m_rssDownloader;
|
delete m_rssDownloader;
|
||||||
RssDownloadRuleList::drop();
|
RssDownloadRuleList::drop();
|
||||||
|
saveItemsToDisk();
|
||||||
saveStreamList();
|
saveStreamList();
|
||||||
qDebug("RSSManager deleted");
|
qDebug("RSSManager deleted");
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user