mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-01-25 05:54:33 +00:00
Fix rss download rule import from qBittorrent < v2.5.0
This commit is contained in:
parent
d7b0299416
commit
5a02c56865
@ -88,6 +88,11 @@ void AutomatedRssDownloader::saveSettings()
|
|||||||
|
|
||||||
void AutomatedRssDownloader::loadRulesList()
|
void AutomatedRssDownloader::loadRulesList()
|
||||||
{
|
{
|
||||||
|
// Make sure we save the current item before clearing
|
||||||
|
if(ui->listRules->currentItem()) {
|
||||||
|
saveCurrentRule(ui->listRules->currentItem());
|
||||||
|
}
|
||||||
|
ui->listRules->clear();
|
||||||
foreach (const QString &rule_name, m_ruleList->ruleNames()) {
|
foreach (const QString &rule_name, m_ruleList->ruleNames()) {
|
||||||
QListWidgetItem *item = new QListWidgetItem(rule_name, ui->listRules);
|
QListWidgetItem *item = new QListWidgetItem(rule_name, ui->listRules);
|
||||||
item->setFlags(item->flags()|Qt::ItemIsUserCheckable);
|
item->setFlags(item->flags()|Qt::ItemIsUserCheckable);
|
||||||
@ -286,8 +291,10 @@ void AutomatedRssDownloader::on_importBtn_clicked()
|
|||||||
QString load_path = QFileDialog::getOpenFileName(this, tr("Please point to the RSS download rules file"), QDir::homePath(), tr("Rules list (*.rssrules *.filters)"));
|
QString load_path = QFileDialog::getOpenFileName(this, tr("Please point to the RSS download rules file"), QDir::homePath(), tr("Rules list (*.rssrules *.filters)"));
|
||||||
if(load_path.isEmpty() || !QFile::exists(load_path)) return;
|
if(load_path.isEmpty() || !QFile::exists(load_path)) return;
|
||||||
// Load it
|
// Load it
|
||||||
if(m_ruleList->unserialize(load_path)) {
|
if(!m_ruleList->unserialize(load_path)) {
|
||||||
QMessageBox::warning(this, tr("Import Error"), tr("Failed to import the selected rules file"));
|
QMessageBox::warning(this, tr("Import Error"), tr("Failed to import the selected rules file"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// Reload the rule list
|
||||||
|
loadRulesList();
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <QRegExp>
|
#include <QRegExp>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
#include "rssdownloadrule.h"
|
#include "rssdownloadrule.h"
|
||||||
#include "preferences.h"
|
#include "preferences.h"
|
||||||
@ -69,16 +70,18 @@ void RssDownloadRule::setMustNotContain(const QString &tokens)
|
|||||||
|
|
||||||
RssDownloadRule RssDownloadRule::fromOldFormat(const QVariantHash &rule_hash, const QString &feed_url, const QString &rule_name)
|
RssDownloadRule RssDownloadRule::fromOldFormat(const QVariantHash &rule_hash, const QString &feed_url, const QString &rule_name)
|
||||||
{
|
{
|
||||||
|
qDebug() << Q_FUNC_INFO << feed_url << rule_name;
|
||||||
RssDownloadRule rule;
|
RssDownloadRule rule;
|
||||||
rule.setName(rule_name);
|
rule.setName(rule_name);
|
||||||
rule.setMustContain(rule_hash.value("matches", "").toString());
|
rule.setMustContain(rule_hash.value("matches", "").toString());
|
||||||
rule.setMustNotContain(rule_hash.value("not", "").toString());
|
rule.setMustNotContain(rule_hash.value("not", "").toString());
|
||||||
|
if(!feed_url.isEmpty())
|
||||||
rule.setRssFeeds(QStringList() << feed_url);
|
rule.setRssFeeds(QStringList() << feed_url);
|
||||||
rule.setSavePath(rule_hash.value("save_path", "").toString());
|
rule.setSavePath(rule_hash.value("save_path", "").toString());
|
||||||
// Is enabled?
|
// Is enabled?
|
||||||
QIniSettings qBTRSS("qBittorrent", "qBittorrent-rss");
|
QIniSettings qBTRSS("qBittorrent", "qBittorrent-rss");
|
||||||
const QHash<QString, QVariant> feeds_w_downloader = qBTRSS.value("downloader_on", true).toHash();
|
const QHash<QString, QVariant> feeds_w_downloader = qBTRSS.value("downloader_on").toHash();
|
||||||
rule.setEnabled(feeds_w_downloader.value(feed_url, false).toBool());
|
rule.setEnabled(feeds_w_downloader.value(feed_url, true).toBool());
|
||||||
// label was unsupported < 2.5.0
|
// label was unsupported < 2.5.0
|
||||||
return rule;
|
return rule;
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
|
#include <QDataStream>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
#include "rssdownloadrulelist.h"
|
#include "rssdownloadrulelist.h"
|
||||||
@ -73,7 +74,7 @@ void RssDownloadRuleList::loadRulesFromStorage()
|
|||||||
{
|
{
|
||||||
QIniSettings qBTRSS("qBittorrent", "qBittorrent-rss");
|
QIniSettings qBTRSS("qBittorrent", "qBittorrent-rss");
|
||||||
if(qBTRSS.contains("feed_filters")) {
|
if(qBTRSS.contains("feed_filters")) {
|
||||||
importRulesInOldFormat(qBTRSS.value("feed_filters").toHash());
|
importFeedsInOldFormat(qBTRSS.value("feed_filters").toHash());
|
||||||
// Remove outdated rules
|
// Remove outdated rules
|
||||||
qBTRSS.remove("feed_filters");
|
qBTRSS.remove("feed_filters");
|
||||||
// Save to new format
|
// Save to new format
|
||||||
@ -84,12 +85,17 @@ void RssDownloadRuleList::loadRulesFromStorage()
|
|||||||
loadRulesFromVariantHash(qBTRSS.value("download_rules").toHash());
|
loadRulesFromVariantHash(qBTRSS.value("download_rules").toHash());
|
||||||
}
|
}
|
||||||
|
|
||||||
void RssDownloadRuleList::importRulesInOldFormat(const QHash<QString, QVariant> &rules)
|
void RssDownloadRuleList::importFeedsInOldFormat(const QHash<QString, QVariant> &rules)
|
||||||
{
|
{
|
||||||
foreach(const QString &feed_url, rules.keys()) {
|
foreach(const QString &feed_url, rules.keys()) {
|
||||||
const QHash<QString, QVariant> feed_rules = rules.value(feed_url).toHash();
|
importFeedRulesInOldFormat(feed_url, rules.value(feed_url).toHash());
|
||||||
foreach(const QString &rule_name, feed_rules.keys()) {
|
}
|
||||||
RssDownloadRule rule = RssDownloadRule::fromOldFormat(feed_rules.value(rule_name).toHash(), feed_url, rule_name);
|
}
|
||||||
|
|
||||||
|
void RssDownloadRuleList::importFeedRulesInOldFormat(const QString &feed_url, const QHash<QString, QVariant> &rules)
|
||||||
|
{
|
||||||
|
foreach(const QString &rule_name, rules.keys()) {
|
||||||
|
RssDownloadRule rule = RssDownloadRule::fromOldFormat(rules.value(rule_name).toHash(), feed_url, rule_name);
|
||||||
if(!rule.isValid()) continue;
|
if(!rule.isValid()) continue;
|
||||||
// Check for rule name clash
|
// Check for rule name clash
|
||||||
while(m_rules.contains(rule.name())) {
|
while(m_rules.contains(rule.name())) {
|
||||||
@ -99,7 +105,6 @@ void RssDownloadRuleList::importRulesInOldFormat(const QHash<QString, QVariant>
|
|||||||
saveRule(rule);
|
saveRule(rule);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
QVariantHash RssDownloadRuleList::toVariantHash() const
|
QVariantHash RssDownloadRuleList::toVariantHash() const
|
||||||
{
|
{
|
||||||
@ -192,23 +197,30 @@ bool RssDownloadRuleList::unserialize(const QString &path)
|
|||||||
QFile f(path);
|
QFile f(path);
|
||||||
if(f.open(QIODevice::ReadOnly)) {
|
if(f.open(QIODevice::ReadOnly)) {
|
||||||
QDataStream in(&f);
|
QDataStream in(&f);
|
||||||
if(path.endsWith(".filters")) {
|
if(path.endsWith(".filters", Qt::CaseInsensitive)) {
|
||||||
// Old format (< 2.5.0)
|
// Old format (< 2.5.0)
|
||||||
|
qDebug("Old serialization format detected, processing...");
|
||||||
in.setVersion(QDataStream::Qt_4_3);
|
in.setVersion(QDataStream::Qt_4_3);
|
||||||
QVariantHash tmp;
|
QVariantHash tmp;
|
||||||
in >> tmp;
|
in >> tmp;
|
||||||
f.close();
|
f.close();
|
||||||
if(tmp.isEmpty()) return false;
|
if(tmp.isEmpty()) return false;
|
||||||
importRulesInOldFormat(tmp);
|
qDebug("Processing was successful!");
|
||||||
|
// Unfortunately the feed_url is lost
|
||||||
|
importFeedRulesInOldFormat("", tmp);
|
||||||
} else {
|
} else {
|
||||||
|
qDebug("New serialization format detected, processing...");
|
||||||
in.setVersion(QDataStream::Qt_4_5);
|
in.setVersion(QDataStream::Qt_4_5);
|
||||||
QVariantHash tmp;
|
QVariantHash tmp;
|
||||||
in >> tmp;
|
in >> tmp;
|
||||||
f.close();
|
f.close();
|
||||||
if(tmp.isEmpty()) return false;
|
if(tmp.isEmpty()) return false;
|
||||||
|
qDebug("Processing was successful!");
|
||||||
loadRulesFromVariantHash(tmp);
|
loadRulesFromVariantHash(tmp);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
qDebug("Error: could not open file at %s", qPrintable(path));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +63,8 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void loadRulesFromStorage();
|
void loadRulesFromStorage();
|
||||||
void importRulesInOldFormat(const QHash<QString, QVariant> &rules); // Before v2.5.0
|
void importFeedsInOldFormat(const QHash<QString, QVariant> &feedrules); // Before v2.5.0
|
||||||
|
void importFeedRulesInOldFormat(const QString &feed_url, const QHash<QString, QVariant> &rules); // Before v2.5.0
|
||||||
void loadRulesFromVariantHash(const QVariantHash& l);
|
void loadRulesFromVariantHash(const QVariantHash& l);
|
||||||
QVariantHash toVariantHash() const;
|
QVariantHash toVariantHash() const;
|
||||||
void saveRulesToStorage();
|
void saveRulesToStorage();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user