1
mirror of https://invent.kde.org/network/falkon.git synced 2024-09-21 09:42:10 +02:00

AdBlock: Added option to use full EasyList subscription

Instead of downloading only the essential half of EasyList,
user can now choose to download and use the full list.
This restriction is still here because the other half of EasyList
is full of domain restricted rules that are using RegExps in our
implementation, and thus being slow.
This commit is contained in:
nowrep 2013-11-03 16:04:38 +01:00
parent 9ad5563d36
commit 2abefeaf79
8 changed files with 67 additions and 11 deletions

View File

@ -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")

View File

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

View File

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

View File

@ -121,14 +121,25 @@
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Ok</set>
</property>
</widget>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QCheckBox" name="useLimitedEasyList">
<property name="text">
<string>Use only essential part of EasyList (for performance reasons)</string>
</property>
</widget>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>

View File

@ -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) {

View File

@ -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<AdBlockSubscription*> m_subscriptions;
QStringList m_disabledRules;

View File

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

View File

@ -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)