diff --git a/src/lib/adblock/adblockaddsubscriptiondialog.cpp b/src/lib/adblock/adblockaddsubscriptiondialog.cpp index 69fc96e63..0b373cfa3 100644 --- a/src/lib/adblock/adblockaddsubscriptiondialog.cpp +++ b/src/lib/adblock/adblockaddsubscriptiondialog.cpp @@ -24,7 +24,7 @@ AdBlockAddSubscriptionDialog::AdBlockAddSubscriptionDialog(QWidget* parent) { ui->setupUi(this); - m_knownSubscriptions << Subscription("EasyList (English)", "https://easylist-downloads.adblockplus.org/easylist.txt") + m_knownSubscriptions << Subscription("EasyList (English)", ADBLOCK_EASYLIST_URL) << Subscription("Fanboy's List (English)", "http://www.fanboy.co.nz/adblock/fanboy-adblock.txt") << Subscription("Adversity (English)", "http://adversity.googlecode.com/hg/Adversity.txt") << Subscription("BSI Lista Polska (Polish)", "http://www.bsi.info.pl/filtrABP.txt") diff --git a/src/lib/adblock/adblockdialog.cpp b/src/lib/adblock/adblockdialog.cpp index aedbbab3d..82c65e70f 100644 --- a/src/lib/adblock/adblockdialog.cpp +++ b/src/lib/adblock/adblockdialog.cpp @@ -33,6 +33,7 @@ AdBlockDialog::AdBlockDialog(QWidget* parent) , m_currentTreeWidget(0) , m_currentSubscription(0) , m_loaded(false) + , m_useLimitedEasyList(false) { setAttribute(Qt::WA_DeleteOnClose); setupUi(this); @@ -57,6 +58,7 @@ AdBlockDialog::AdBlockDialog(QWidget* parent) connect(adblockCheckBox, SIGNAL(toggled(bool)), this, SLOT(enableAdBlock(bool))); connect(search, SIGNAL(textChanged(QString)), this, SLOT(filterString(QString))); connect(tabWidget, SIGNAL(currentChanged(int)), this, SLOT(currentChanged(int))); + connect(buttonBox, SIGNAL(accepted()), this, SLOT(close())); load(); @@ -121,6 +123,9 @@ void AdBlockDialog::currentChanged(int index) if (index != -1) { m_currentTreeWidget = qobject_cast(tabWidget->widget(index)); m_currentSubscription = m_currentTreeWidget->subscription(); + + bool isEasyList = m_currentSubscription->url() == QUrl(ADBLOCK_EASYLIST_URL); + useLimitedEasyList->setVisible(isEasyList); } } @@ -174,7 +179,19 @@ void AdBlockDialog::load() tabWidget->addTab(tree, subscription->title()); } + m_useLimitedEasyList = m_manager->useLimitedEasyList(); + useLimitedEasyList->setChecked(m_useLimitedEasyList); + m_loaded = true; QTimer::singleShot(50, this, SLOT(loadSubscriptions())); } + +void AdBlockDialog::closeEvent(QCloseEvent* ev) +{ + if (useLimitedEasyList->isChecked() != m_useLimitedEasyList) { + m_manager->setUseLimitedEasyList(useLimitedEasyList->isChecked()); + } + + QDialog::closeEvent(ev); +} diff --git a/src/lib/adblock/adblockdialog.h b/src/lib/adblock/adblockdialog.h index 1c3066077..a8b0f8fc1 100644 --- a/src/lib/adblock/adblockdialog.h +++ b/src/lib/adblock/adblockdialog.h @@ -55,6 +55,8 @@ private slots: void load(); private: + void closeEvent(QCloseEvent* ev); + AdBlockManager* m_manager; AdBlockTreeWidget* m_currentTreeWidget; AdBlockSubscription* m_currentSubscription; @@ -65,6 +67,7 @@ private: QAction* m_actionRemoveSubscription; bool m_loaded; + bool m_useLimitedEasyList; }; #endif // ADBLOCKDIALOG_H diff --git a/src/lib/adblock/adblockdialog.ui b/src/lib/adblock/adblockdialog.ui index dc54e5e78..5da7eec0d 100644 --- a/src/lib/adblock/adblockdialog.ui +++ b/src/lib/adblock/adblockdialog.ui @@ -121,14 +121,25 @@ - - - Qt::Horizontal - - - QDialogButtonBox::Ok - - + + + + + Use only essential part of EasyList (for performance reasons) + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Ok + + + + diff --git a/src/lib/adblock/adblockmanager.cpp b/src/lib/adblock/adblockmanager.cpp index 218446489..89009ad6c 100644 --- a/src/lib/adblock/adblockmanager.cpp +++ b/src/lib/adblock/adblockmanager.cpp @@ -44,6 +44,7 @@ AdBlockManager::AdBlockManager(QObject* parent) : QObject(parent) , m_loaded(false) , m_enabled(true) + , m_useLimitedEasyList(true) { load(); } @@ -210,6 +211,7 @@ void AdBlockManager::load() Settings settings; settings.beginGroup("AdBlock"); m_enabled = settings.value("enabled", m_enabled).toBool(); + m_useLimitedEasyList = settings.value("useLimitedEasyList", m_useLimitedEasyList).toBool(); m_disabledRules = settings.value("disabledRules", QStringList()).toStringList(); QDateTime lastUpdate = settings.value("lastUpdate", QDateTime()).toDateTime(); settings.endGroup(); @@ -256,7 +258,7 @@ void AdBlockManager::load() // Prepend EasyList if subscriptions are empty if (m_subscriptions.isEmpty()) { AdBlockSubscription* easyList = new AdBlockSubscription(tr("EasyList"), this); - easyList->setUrl(QUrl("https://easylist-downloads.adblockplus.org/easylist.txt")); + easyList->setUrl(QUrl(ADBLOCK_EASYLIST_URL)); easyList->setFilePath(mApp->currentProfilePath() + "adblock/easylist.txt"); connect(easyList, SIGNAL(subscriptionUpdated()), mApp, SLOT(reloadUserStyleSheet())); @@ -309,6 +311,7 @@ void AdBlockManager::save() Settings settings; settings.beginGroup("AdBlock"); settings.setValue("enabled", m_enabled); + settings.setValue("useLimitedEasyList", m_useLimitedEasyList); settings.setValue("disabledRules", m_disabledRules); settings.endGroup(); } @@ -325,6 +328,22 @@ bool AdBlockManager::canRunOnScheme(const QString &scheme) const || scheme == QLatin1String("abp")); } +bool AdBlockManager::useLimitedEasyList() const +{ + return m_useLimitedEasyList; +} + +void AdBlockManager::setUseLimitedEasyList(bool useLimited) +{ + m_useLimitedEasyList = useLimited; + + foreach (AdBlockSubscription* subscription, m_subscriptions) { + if (subscription->url() == QUrl(ADBLOCK_EASYLIST_URL)) { + subscription->updateSubscription(); + } + } +} + bool AdBlockManager::canBeBlocked(const QUrl &url) const { foreach (AdBlockSubscription* subscription, m_subscriptions) { diff --git a/src/lib/adblock/adblockmanager.h b/src/lib/adblock/adblockmanager.h index ad8b33ef4..c98853371 100644 --- a/src/lib/adblock/adblockmanager.h +++ b/src/lib/adblock/adblockmanager.h @@ -48,6 +48,9 @@ public: bool isEnabled() const; bool canRunOnScheme(const QString &scheme) const; + bool useLimitedEasyList() const; + void setUseLimitedEasyList(bool useLimited); + QString elementHidingRules() const; QString elementHidingRulesForDomain(const QUrl &url) const; @@ -79,6 +82,7 @@ private: bool m_loaded; bool m_enabled; + bool m_useLimitedEasyList; QList m_subscriptions; QStringList m_disabledRules; diff --git a/src/lib/adblock/adblocksubscription.cpp b/src/lib/adblock/adblocksubscription.cpp index 29eb09517..7d7d2dd4a 100644 --- a/src/lib/adblock/adblocksubscription.cpp +++ b/src/lib/adblock/adblocksubscription.cpp @@ -182,7 +182,7 @@ void AdBlockSubscription::saveDownloadedData(const QByteArray &data) return; } - if (m_url == QUrl("https://easylist-downloads.adblockplus.org/easylist.txt")) { + if (AdBlockManager::instance()->useLimitedEasyList() && m_url == QUrl(ADBLOCK_EASYLIST_URL)) { // Third-party advertisers rules are with start domain (||) placeholder which needs regexps // So we are ignoring it for keeping good performance // But we will use whitelist rules at the end of list diff --git a/src/lib/app/qz_namespace.h b/src/lib/app/qz_namespace.h index 7ce1d8819..ef1e01ed1 100644 --- a/src/lib/app/qz_namespace.h +++ b/src/lib/app/qz_namespace.h @@ -99,6 +99,8 @@ Q_DECLARE_OPERATORS_FOR_FLAGS(Qz::NewTabPositionFlags) } +#define ADBLOCK_EASYLIST_URL "https://easylist-downloads.adblockplus.org/easylist.txt" + #ifdef Q_OS_WIN #define DEFAULT_THEME_NAME "windows" #elif defined(QZ_WS_X11)