Browse Source

Fix rss download rule import from qBittorrent < v2.5.0

adaptive-webui-19844
Christophe Dumez 14 years ago
parent
commit
5a02c56865
  1. 9
      src/rss/automatedrssdownloader.cpp
  2. 7
      src/rss/rssdownloadrule.cpp
  3. 28
      src/rss/rssdownloadrulelist.cpp
  4. 3
      src/rss/rssdownloadrulelist.h

9
src/rss/automatedrssdownloader.cpp

@ -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();
} }

7
src/rss/rssdownloadrule.cpp

@ -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;
} }

28
src/rss/rssdownloadrulelist.cpp

@ -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;
} }

3
src/rss/rssdownloadrulelist.h

@ -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…
Cancel
Save