diff --git a/src/rss.cpp b/src/rss.cpp index 53850abc3..c13e0bf63 100644 --- a/src/rss.cpp +++ b/src/rss.cpp @@ -561,31 +561,37 @@ short RssStream::readDoc(const QDomDocument& doc) { image = property.text(); else if(property.tagName() == "item") { RssItem * item = new RssItem(this, property); - if(item->isValid() && !itemAlreadyExists(item->getTitle())) { - (*this)[item->getTitle()] = item; + if(item->isValid()) { + bool already_exists = itemAlreadyExists(item->getTitle()); + if(!already_exists) { + (*this)[item->getTitle()] = item; + } if(item->has_attachment()) { has_attachments = true; // Check if the item should be automatically downloaded - FeedFilter * matching_filter = FeedFilters::getFeedFilters(url).matches(item->getTitle()); - if(matching_filter != 0) { - // Download the torrent - BTSession->addConsoleMessage(tr("Automatically downloading %1 torrent from %2 RSS feed...").arg(item->getTitle()).arg(getName())); - if(matching_filter->isValid()) { - QString save_path = matching_filter->getSavePath(); - if(save_path.isEmpty()) + if(!already_exists || !(*this)[item->getTitle()]->isRead()) { + FeedFilter * matching_filter = FeedFilters::getFeedFilters(url).matches(item->getTitle()); + if(matching_filter != 0) { + // Download the torrent + BTSession->addConsoleMessage(tr("Automatically downloading %1 torrent from %2 RSS feed...").arg(item->getTitle()).arg(getName())); + if(matching_filter->isValid()) { + QString save_path = matching_filter->getSavePath(); + if(save_path.isEmpty()) + BTSession->downloadUrlAndSkipDialog(item->getTorrentUrl()); + else + BTSession->downloadUrlAndSkipDialog(item->getTorrentUrl(), save_path); + } else { + // All torrents are downloaded from this feed BTSession->downloadUrlAndSkipDialog(item->getTorrentUrl()); - else - BTSession->downloadUrlAndSkipDialog(item->getTorrentUrl(), save_path); - } else { - // All torrents are downloaded from this feed - BTSession->downloadUrlAndSkipDialog(item->getTorrentUrl()); + } + // Item was downloaded, consider it as Read + (*this)[item->getTitle()]->setRead(); + // Clean up + delete matching_filter; } - // Item was downloaded, consider it as Read - item->setRead(); - // Clean up - delete matching_filter; } } + } else { delete item; }